Задать вопрос
@Bilyalov
Программист

Как решить проблему с видимостью функций?

Нашёл в интернете библиотеку для вебсокетов. Он умеет запускать вебсокет сервак, слушать сообщения, отправлять, уведомлять о новом соединении, разьединении. Написал поверх этой либы интерфейс чтобы можно было декораторами подписываться на определённый канал, комнату, событие. Когда сообщение приходит, вызываются зарегистрированные функции на которых висит декоратор и там выполняются действия.

Проблема:
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
]
  • Вопрос задан
  • 316 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы