This commit is contained in:
n0rdye 2024-12-15 17:09:10 +00:00
parent e6ce63d19c
commit 75ec09e005
2 changed files with 69 additions and 30 deletions

View File

@ -7,21 +7,38 @@ from websockets.sync.server import serve
import websockets import websockets
import array import array
import time import time
from flask import render_template
api = Flask(__name__) api = Flask(__name__)
watchers_last_seen = {} watchers_last_seen = {}
web_users = {}
stream = False stream = False
freeze = False
debug = False debug = False
def current_time(): def current_time():
return str(int(time.time())) return str(int(time.time()))
@api.route("/", methods=["GET"])
def web():
return render_template('index.html')
@api.route("/off", methods=["GET"]) @api.route("/off", methods=["GET"])
def streaOff(): def streaOff():
global stream global stream
stream=False stream=False
return "True" 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"]) @api.route("/on", methods=["GET"])
def streamOn(): def streamOn():
global stream global stream
@ -29,15 +46,14 @@ def streamOn():
return "True" return "True"
@api.route("/views", methods=["GET"]) @api.route("/views", methods=["GET"])
def views(): def return_views():
global watchers_last_seen global watchers_last_seen
return str(len(watchers_last_seen)) return str(len(watchers_last_seen.keys()))
@api.route("/mode", methods=["GET"]) @api.route("/mode", methods=["GET"])
def mode(): def mode():
global watchers_last_seen global watchers_last_seen
return str(stream) return "streaming-"+str(stream)+"\n frozen-"+str(freeze)
def ws_server(websocket): def ws_server(websocket):
global stream, watchers_last_seen global stream, watchers_last_seen
@ -52,11 +68,16 @@ def ws_server(websocket):
if debug: print(req,"-----",args) if debug: print(req,"-----",args)
match (req): match (req):
case ("get_stream"): case ("get_stream"):
if freeze == True:
websocket.send(f"freeze")
else:
if stream: if stream:
watchers_last_seen[args["uuid"]] = current_time() watchers_last_seen[args["uuid"]] = current_time()
websocket.send(f""+str(json.dumps([True, screenlive.gen()]))) websocket.send(f""+str(json.dumps([True, screenlive.gen()])))
else: else:
websocket.send(f"null") websocket.send(f"null")
case ("web-site-user"):
users[args["uuid"]] = current_time()
case (_): case (_):
websocket.send(f"null") websocket.send(f"null")
except websockets.exceptions.ConnectionClosedOK: except websockets.exceptions.ConnectionClosedOK:
@ -76,8 +97,14 @@ def timeout_task():
if debug: print(key+"is timed out") if debug: print(key+"is timed out")
watchers_last_seen.pop(key) watchers_last_seen.pop(key)
break 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("time -",current_time())
if debug: print("watchers -",watchers_last_seen.keys()) if debug: print("watchers -",watchers_last_seen.keys(),"::::: users - ",users.keys())
sleep(10) sleep(10)
def run_flask_server(): def run_flask_server():

View File

@ -99,7 +99,7 @@
con() con()
function con(){ function con(){
ws = new WebSocket('wss://ws.n0r.su/'); ws = new WebSocket('wss://n0r.su/screen_share/ws');
ws.onopen = () => { ws.onopen = () => {
console.log('websocket success---'); console.log('websocket success---');
get() get()
@ -109,7 +109,7 @@
setTimeout(()=>{con()},5000) setTimeout(()=>{con()},5000)
}; };
ws.onerror = (e) => { ws.onerror = (e) => {
setTimeout(()=>{con()},5000) // setTimeout(()=>{con()},5000)
no_stream(); no_stream();
// console.error('websocket fail'); // console.error('websocket fail');
} }
@ -120,6 +120,11 @@
// get(); // get();
// }, 100); // }, 100);
ws.onmessage = (message) => { ws.onmessage = (message) => {
if (message.data == "freeze"){
no_stream(true);
setTimeout(()=>{get();},2000)
}
else{
if (message.data != "null"){ if (message.data != "null"){
was_connect = true; was_connect = true;
let data = message.data; let data = message.data;
@ -135,8 +140,9 @@
} }
} }
} }
}
ws.onerror = (e) => { ws.onerror = (e) => {
setTimeout(()=>{con()},5000) // setTimeout(()=>{con()},5000)
no_stream(); no_stream();
// console.error('websocket fail'); // console.error('websocket fail');
} }
@ -146,7 +152,8 @@
// console.log("The connection has been closed successfully.") // console.log("The connection has been closed successfully.")
}; };
function no_stream(){ function no_stream(freeze = false){
if (!freeze){
if (document.body.style.backgroundImage != `url(/papi/savehouse/?const=club_dance)`){ if (document.body.style.backgroundImage != `url(/papi/savehouse/?const=club_dance)`){
document.body.style.backgroundImage = `url(/papi/savehouse/?const=club_dance)`; document.body.style.backgroundImage = `url(/papi/savehouse/?const=club_dance)`;
} }
@ -158,6 +165,11 @@
status("Stream is closed") status("Stream is closed")
} }
} }
else{
document.getElementById("top_bar").removeAttribute("hidden");
status("stream is frozen")
}
}
} else { } else {
console.error('dont support websocket'); console.error('dont support websocket');
}; };