2019-06-17 18:17:59 +02:00
|
|
|
#!/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()
|
2019-06-17 20:10:03 +02:00
|
|
|
command_handler = CommandHandler(user_manager.skill_dict)
|
2019-06-17 18:17:59 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@sio.on('connect')
|
|
|
|
|
def connect(sid, environ):
|
|
|
|
|
print("CONNECTED: {}".format(sid))
|
2019-06-17 20:10:03 +02:00
|
|
|
sio.emit(Events.SYSTEM_MESSAGE.value, {'sender': 'System', 'message': 'Verbunden!'}, room=sid)
|
2019-06-17 18:17:59 +02:00
|
|
|
for user in user_manager.get_users():
|
|
|
|
|
sio.emit(Events.USER_ADDED.value, user, room=sid)
|
2019-06-20 16:10:16 +02:00
|
|
|
for char in actor_manager.get_actors():
|
|
|
|
|
sio.emit(Events.CHARACTER_ADDED.value, char, room=sid)
|
|
|
|
|
|
2019-06-17 18:17:59 +02:00
|
|
|
|
|
|
|
|
@sio.on('disconnect')
|
|
|
|
|
def disconnect(sid):
|
|
|
|
|
print("DISCONNECTED: {}".format(sid))
|
|
|
|
|
name = user_manager.remove_user(sid)
|
|
|
|
|
sio.emit(Events.USER_REMOVED.value, name)
|
|
|
|
|
|
2019-06-20 16:10:16 +02:00
|
|
|
|
2019-06-17 18:17:59 +02:00
|
|
|
@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())
|
|
|
|
|
|
|
|
|
|
|
2019-06-20 16:10:16 +02:00
|
|
|
@sio.on(Events.CHARACTER_ADDED.value)
|
2019-06-17 18:17:59 +02:00
|
|
|
def message(sid, data):
|
|
|
|
|
actor_manager.add_character(data)
|
2019-06-20 16:10:16 +02:00
|
|
|
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)
|
|
|
|
|
|
2019-06-17 18:17:59 +02:00
|
|
|
|
|
|
|
|
@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'])
|
2019-06-17 20:10:03 +02:00
|
|
|
name, loaded = user_manager.add_user(data['new']['characterName'], sid)
|
2019-06-17 18:17:59 +02:00
|
|
|
d = data['new']
|
2019-06-17 20:10:03 +02:00
|
|
|
d['characterLoaded'] = loaded
|
|
|
|
|
if loaded:
|
|
|
|
|
d['skills'] = user_manager.get_skills(name)
|
2019-06-17 18:17:59 +02:00
|
|
|
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.listen(('', 3101)), app)
|
|
|
|
|
|