Нашёл в интернете библиотеку для
вебсокетов. Он умеет запускать вебсокет сервак, слушать сообщения, отправлять, уведомлять о новом соединении, разьединении. Написал поверх этой либы интерфейс чтобы можно было декораторами подписываться на определённый канал, комнату, событие. Когда сообщение приходит, вызываются зарегистрированные функции на которых висит декоратор и там выполняются действия.
Проблема:
WebSocket сервер стартуется отдельно из файла runsocketserver.py по команде который вызывает из файла websocket.py запуск
def start():
....
cls = Manager
if options['ssl'] == 1:
server = SimpleSSLWebSocketServer(options['host'], options['port'], cls, options['cert'], options['cert'],
version=options['ver'])
else:
server = SimpleWebSocketServer(options['host'], options['port'], cls)
....
Есть файл manager.py в котором висит интерфейс со всякими декораторами, где хранятся каналы, комнаты, юзеры, в общем все, что я сделал.
@staticmethod
def listen(channel, room, event):
def wrapper(f):
....
Декораторы висят по всему проекту в разных файлах. Чтобы слушать событие, сделал так
@staticmethod
@WebSocketManager.listen('/', 'chat', 'message')
def on_message(packet):
...
Когда стартуется сервер, регистрация этих самых функций через декоратор не работает. Я решил эту проблему так. Создал отдельный файл settings.py, там создал переменную куда вставляю классы в которых есть декоратор а потом делаю импорт файла локально когда стартуется вебсокет сервер в файле websocket.py:
class SimpleWebSocketServer(object):
def __init__(self, host, port, websocketclass, selectInterval=0.1):
...
from Websocket.manager import WebSocketManager
Можно ли сделать так, чтобы при запуске файла, файл мог обращаться файлам, классам не так как я сделал, а по другому?
Файл settings.py
from Test.test import Chat
INSTALLED_MODULES = [
Chat
]