Files
splittermond-backend/main.py
2019-06-20 17:35:26 +02:00

79 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python
# WS server example
import eventlet
import socketio
from actors import ActorManager
from events import Events
from chat.chat_commands import CommandHandler
from users.users import UserManager
sio = socketio.Server()
app = socketio.WSGIApp(sio)
actor_manager = ActorManager()
user_manager = UserManager()
command_handler = CommandHandler(user_manager.skill_dict)
@sio.on('connect')
def connect(sid, environ):
print("CONNECTED: {}".format(sid))
sio.emit(Events.SYSTEM_MESSAGE.value, {'sender': 'System', 'message': 'Verbunden!'}, room=sid)
for user in user_manager.get_users():
sio.emit(Events.USER_ADDED.value, user, room=sid)
for char in actor_manager.get_actors():
sio.emit(Events.CHARACTER_ADDED.value, char, room=sid)
@sio.on('disconnect')
def disconnect(sid):
print("DISCONNECTED: {}".format(sid))
name = user_manager.remove_user(sid)
sio.emit(Events.USER_REMOVED.value, name)
@sio.on(Events.PUBLIC_CHAT.value)
def message(sid, data):
# print(data)
response = command_handler.handle(data['char'], data['message'])
# print(response)
# print("\n")
sio.emit(response.event.
value, response.to_json())
@sio.on(Events.CHARACTER_ADDED.value)
def message(sid, data):
actor_manager.add_character(data)
print(data)
sio.emit(Events.CHARACTER_ADDED.value, data)
@sio.on(Events.CHARACTER_REMOVED.value)
def message(sid, data):
actor_manager.remove_character(data)
sio.emit(Events.CHARACTER_REMOVED.value, data)
@sio.on(Events.USER_EDITED.value)
def message(sid, data):
if user_manager.has_user(data['old']):
user_manager.remove_user(sid)
sio.emit(Events.USER_REMOVED.value, data['old'])
name, loaded = user_manager.add_user(data['new']['characterName'], sid)
d = data['new']
d['characterLoaded'] = loaded
if loaded:
d['skills'] = user_manager.get_skills(name)
sio.emit(Events.USER_EDITED.value, d, room=sid)
sio.emit(Events.USER_ADDED.value, data['new']['characterName'])
if __name__ == '__main__':
eventlet.wsgi.server(eventlet.wrap_ssl(eventlet.listen(('', 3101)), certfile='/keys/fullchain.pem', keyfile='/keys/privkey.pem', server_side=True), app)