2019-03-10 00:29:52 +01:00
|
|
|
import asyncio
|
|
|
|
import websockets
|
2019-03-10 10:46:16 +01:00
|
|
|
from settings import *
|
|
|
|
import ssl
|
2019-03-10 00:29:52 +01:00
|
|
|
|
2019-03-21 12:06:22 +01:00
|
|
|
import traceback
|
|
|
|
|
|
|
|
from session_manager import SessionManager
|
|
|
|
from connection_handler import Connection, ConnectionHandler
|
|
|
|
from match_manager import MatchManager
|
|
|
|
from user_manager import UserManager
|
|
|
|
from database_connection import DatabaseConnection
|
|
|
|
import datetime
|
|
|
|
|
2019-03-27 17:23:04 +01:00
|
|
|
from tools import debug
|
|
|
|
|
2019-04-01 16:13:44 +02:00
|
|
|
um = UserManager(account_revoke_time)
|
2019-04-04 13:44:48 +02:00
|
|
|
sm = SessionManager(session_revove_time, temporary_session_revoke_time)
|
2019-04-01 16:13:44 +02:00
|
|
|
mm = MatchManager(um, match_revoke_time)
|
|
|
|
ch = ConnectionHandler(sm, um, mm, revoke_check_interval)
|
2019-03-21 12:06:22 +01:00
|
|
|
|
|
|
|
|
|
|
|
DatabaseConnection(db_host,
|
|
|
|
db_port,
|
|
|
|
db_user,
|
|
|
|
db_pw,
|
|
|
|
db_db,
|
|
|
|
db_charset)
|
|
|
|
|
|
|
|
|
2019-03-21 17:02:17 +01:00
|
|
|
async def socket_worker(websocket, path):
|
2019-03-21 12:06:22 +01:00
|
|
|
connection = None
|
|
|
|
|
|
|
|
try:
|
|
|
|
raw_msg = await websocket.recv()
|
|
|
|
|
|
|
|
connection = await ch.new_connection(websocket, raw_msg)
|
|
|
|
|
|
|
|
if connection is None:
|
|
|
|
return
|
2019-03-27 17:23:04 +01:00
|
|
|
|
|
|
|
debug("successfull logged in user: " + connection.user_name)
|
|
|
|
|
2019-03-21 12:06:22 +01:00
|
|
|
async for m in websocket:
|
|
|
|
await ch.handle_message(connection, m)
|
|
|
|
|
2019-03-27 17:23:04 +01:00
|
|
|
except websockets.ConnectionClosed as e:
|
|
|
|
# nothing suspicious here
|
|
|
|
pass
|
|
|
|
|
2019-03-21 12:06:22 +01:00
|
|
|
except Exception as e:
|
|
|
|
# TODO: each disconnect is an exception so far
|
|
|
|
if connection is not None:
|
2019-03-27 17:23:04 +01:00
|
|
|
debug("catched exception in worker for user: " +
|
2019-03-21 12:06:22 +01:00
|
|
|
connection.user_name + ": " + str(e))
|
|
|
|
else:
|
2019-03-27 17:23:04 +01:00
|
|
|
debug("catched exception in worker for unknown user: " + str(e))
|
|
|
|
|
|
|
|
debug(traceback.debug_exc())
|
2019-03-21 12:06:22 +01:00
|
|
|
|
|
|
|
finally:
|
|
|
|
id = None
|
|
|
|
if connection:
|
|
|
|
id = connection.user_name
|
|
|
|
await ch.disconnect(connection)
|
|
|
|
await connection.close()
|
|
|
|
|
|
|
|
if connection is None:
|
|
|
|
id = "unknown_user"
|
2019-03-27 17:23:04 +01:00
|
|
|
debug("close connection to user: " + id)
|
2019-03-10 00:29:52 +01:00
|
|
|
|
2019-03-22 23:04:32 +01:00
|
|
|
if cert_file is not None and key_file is not None:
|
|
|
|
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
|
|
|
ssl_context.load_cert_chain(cert_file, keyfile=key_file)
|
2019-03-21 12:06:22 +01:00
|
|
|
|
2019-03-22 23:04:32 +01:00
|
|
|
start_server = websockets.serve(
|
|
|
|
socket_worker, host='', port=server_port, ssl=ssl_context)
|
|
|
|
|
|
|
|
else:
|
|
|
|
start_server = websockets.serve(
|
|
|
|
socket_worker, host='', port=server_port)
|
2019-03-10 00:29:52 +01:00
|
|
|
|
|
|
|
asyncio.get_event_loop().run_until_complete(start_server)
|
|
|
|
asyncio.get_event_loop().run_forever()
|