diff --git a/server.py b/server.py index dedf7ea..acc2b21 100644 --- a/server.py +++ b/server.py @@ -7,21 +7,38 @@ from websockets.sync.server import serve import websockets import array import time +from flask import render_template api = Flask(__name__) watchers_last_seen = {} +web_users = {} stream = False +freeze = False debug = False def current_time(): return str(int(time.time())) +@api.route("/", methods=["GET"]) +def web(): + return render_template('index.html') + @api.route("/off", methods=["GET"]) def streaOff(): global stream stream=False return "True" +@api.route("/freeze", methods=["GET"]) +def freeze_the_stream(): + global freeze + if freeze == True: + freeze=False + return "un-frosen" + else: + freeze=True + return "frosen" + @api.route("/on", methods=["GET"]) def streamOn(): global stream @@ -29,15 +46,14 @@ def streamOn(): return "True" @api.route("/views", methods=["GET"]) -def views(): +def return_views(): global watchers_last_seen - return str(len(watchers_last_seen)) + return str(len(watchers_last_seen.keys())) @api.route("/mode", methods=["GET"]) def mode(): global watchers_last_seen - return str(stream) - + return "streaming-"+str(stream)+"\n frozen-"+str(freeze) def ws_server(websocket): global stream, watchers_last_seen @@ -52,11 +68,16 @@ def ws_server(websocket): if debug: print(req,"-----",args) match (req): case ("get_stream"): - if stream: - watchers_last_seen[args["uuid"]] = current_time() - websocket.send(f""+str(json.dumps([True, screenlive.gen()]))) + if freeze == True: + websocket.send(f"freeze") else: - websocket.send(f"null") + if stream: + watchers_last_seen[args["uuid"]] = current_time() + websocket.send(f""+str(json.dumps([True, screenlive.gen()]))) + else: + websocket.send(f"null") + case ("web-site-user"): + users[args["uuid"]] = current_time() case (_): websocket.send(f"null") except websockets.exceptions.ConnectionClosedOK: @@ -76,8 +97,14 @@ def timeout_task(): if debug: print(key+"is timed out") watchers_last_seen.pop(key) break + for key,value in users.items(): + if debug: print(key+"||||"+value) + if (int(current_time())-int(value)) > 5: + if debug: print(key+"is timed out") + users.pop(key) + break if debug: print("time -",current_time()) - if debug: print("watchers -",watchers_last_seen.keys()) + if debug: print("watchers -",watchers_last_seen.keys(),"::::: users - ",users.keys()) sleep(10) def run_flask_server(): diff --git a/index.html b/templates/index.html similarity index 72% rename from index.html rename to templates/index.html index 652f6fc..5d98a1a 100644 --- a/index.html +++ b/templates/index.html @@ -99,7 +99,7 @@ con() function con(){ - ws = new WebSocket('wss://ws.n0r.su/'); + ws = new WebSocket('wss://n0r.su/screen_share/ws'); ws.onopen = () => { console.log('websocket success---'); get() @@ -109,7 +109,7 @@ setTimeout(()=>{con()},5000) }; ws.onerror = (e) => { - setTimeout(()=>{con()},5000) + // setTimeout(()=>{con()},5000) no_stream(); // console.error('websocket fail'); } @@ -120,23 +120,29 @@ // get(); // }, 100); ws.onmessage = (message) => { - if (message.data != "null"){ - was_connect = true; - let data = message.data; - // console.log('get websocket message---', JSON.parse(data)[1]); - document.body.style.backgroundImage = `url(data:image/jpeg;base64,${JSON.parse(data)[1]})`; - document.getElementById("top_bar").setAttribute("hidden",""); - status("conected") - setTimeout(()=>{get()},200) + if (message.data == "freeze"){ + no_stream(true); + setTimeout(()=>{get();},2000) } else{ - setTimeout(()=>{get();},5000) - no_stream(); + if (message.data != "null"){ + was_connect = true; + let data = message.data; + // console.log('get websocket message---', JSON.parse(data)[1]); + document.body.style.backgroundImage = `url(data:image/jpeg;base64,${JSON.parse(data)[1]})`; + document.getElementById("top_bar").setAttribute("hidden",""); + status("conected") + setTimeout(()=>{get()},200) + } + else{ + setTimeout(()=>{get();},5000) + no_stream(); + } } } } ws.onerror = (e) => { - setTimeout(()=>{con()},5000) + // setTimeout(()=>{con()},5000) no_stream(); // console.error('websocket fail'); } @@ -146,16 +152,22 @@ // console.log("The connection has been closed successfully.") }; - function no_stream(){ - if (document.body.style.backgroundImage != `url(/papi/savehouse/?const=club_dance)`){ - document.body.style.backgroundImage = `url(/papi/savehouse/?const=club_dance)`; - } - document.getElementById("top_bar").removeAttribute("hidden"); - if(was_connect){ - status("Stream has ended") + function no_stream(freeze = false){ + if (!freeze){ + if (document.body.style.backgroundImage != `url(/papi/savehouse/?const=club_dance)`){ + document.body.style.backgroundImage = `url(/papi/savehouse/?const=club_dance)`; + } + document.getElementById("top_bar").removeAttribute("hidden"); + if(was_connect){ + status("Stream has ended") + } + else{ + status("Stream is closed") + } } else{ - status("Stream is closed") + document.getElementById("top_bar").removeAttribute("hidden"); + status("stream is frozen") } } } else {