123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import asyncio
- import datetime
- import re
- import websockets
- import logging
- import threading
- from pokermaster.PokerMasterDataProccesser import deal_message, write_message_2_log_file
- logging.basicConfig(level=logging.INFO)
- ip = "192.168.137.1"
- port = 9999
- with open("../props.properties", "r") as f:
- props = f.readlines()
- for prop in props:
- if prop.startswith("ip"):
- ip = prop.split("=")[1].strip()
- if prop.startswith("port"):
- port = prop.split("=")[1].strip()
- connected_clients = set()
- async def echo(websocket, path):
- connected_clients.add(websocket)
- try:
- async for message in websocket:
-
- await deal_message(message, broadcast)
-
- await websocket.send("Server says: 你好,服务端收到,连接建立成功")
- except websockets.ConnectionClosed as e:
- logging.warning(f"Connection closed: {e.reason}")
- except Exception as e:
- logging.error(f"Error: {e}", exc_info=True)
- finally:
- connected_clients.remove(websocket)
- async def broadcast(message):
- if connected_clients:
-
- tasks = [asyncio.create_task(client.send(message)) for client in connected_clients]
-
- await asyncio.wait(tasks)
- else:
- print("No clients are connected.")
- def start_cli(loop):
- while True:
-
- print("输入命令 (1: 发送自定义消息, 2: 发送JS脚本):")
- command = input("请输入:")
- if command == "1":
- message = input("Enter message to send: ")
-
- loop.call_soon_threadsafe(asyncio.create_task, broadcast(message))
- elif command == "2":
- sendJsCommand(loop)
- else:
- print("Unknown command")
- def sendJsCommand(loop):
- with open("../script.js", "r", encoding="utf-8") as file:
- script_content = file.read()
-
- script_content = re.sub(r"//.*?$", "", script_content, flags=re.MULTILINE)
- script_content = re.sub(r"/\*.*?\*/", "", script_content, flags=re.DOTALL)
-
- script_content = re.sub(r"\n\s*\n", "\n", script_content, flags=re.MULTILINE)
-
- loop.call_soon_threadsafe(asyncio.create_task, broadcast(script_content))
- async def main():
- server = await websockets.serve(echo, ip, port)
- try:
- await server.wait_closed()
- except KeyboardInterrupt:
- logging.info("Server stopped by KeyboardInterrupt")
- if __name__ == '__main__':
- now = datetime.datetime.now()
- cache_date = now.strftime("%Y-%m-%d")
- cache_hour = now.strftime("%H")
- loop = asyncio.get_event_loop()
-
- cli_thread = threading.Thread(target=start_cli, args=(loop,), daemon=True)
- cli_thread.start()
- try:
- loop.run_until_complete(main())
- except Exception as e:
- logging.error(f"Server error: {e}", exc_info=True)
- finally:
- loop.close()
|