This commit is contained in:
Your Name
2024-12-02 02:35:49 +05:00
commit d1c12a08b0
7 changed files with 348 additions and 0 deletions

95
server.py Normal file
View File

@ -0,0 +1,95 @@
from screen import screenlive
import json, argparse
from flask import Flask, json
import threading
from time import sleep
from websockets.sync.server import serve
import websockets
import array
import time
api = Flask(__name__)
watchers_last_seen = {}
stream = False
debug = False
def current_time():
return str(int(time.time()))
@api.route("/off", methods=["GET"])
def streaOff():
global stream
stream=False
return "True"
@api.route("/on", methods=["GET"])
def streamOn():
global stream
stream=True
return "True"
@api.route("/views", methods=["GET"])
def views():
global watchers_last_seen
return str(len(watchers_last_seen))
def ws_server(websocket):
global stream, watchers_last_seen
if debug: print("WebSocket: Server Started.")
try:
while True:
req=websocket.recv()
if "%" in req:
args= req.split("%")[1]
args = dict(x.split("=") for x in args.split(";"))
req = req.split("%")[0]
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()])))
else:
websocket.send(f"null")
case (_):
websocket.send(f"null")
except websockets.exceptions.ConnectionClosedOK:
if debug: print("hungup")
except websockets.ConnectionClosedError:
if debug: print("Internal Server Error.")
def run_ws_server():
with serve(ws_server, "0.0.0.0", 7890) as server:
server.serve_forever()
def timeout_task():
while True:
for key,value in watchers_last_seen.items():
if debug: print(key+"||||"+value)
if (int(current_time())-int(value)) > 5:
if debug: print(key+"is timed out")
watchers_last_seen.pop(key)
break
if debug: print("time -",current_time())
if debug: print("watchers -",watchers_last_seen.keys())
sleep(10)
def run_flask_server():
api.run()
def main():
t1 = threading.Thread(target=run_ws_server)
t2 = threading.Thread(target=run_flask_server)
t3 = threading.Thread(target=timeout_task)
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
if __name__ == "__main__":
main()