В настоящее время я создаю приложение, которое позволяет пользователям совместно работать и создавать вещи, так как мне требуется что-то вроде раздора, такого как групповой чат. Мне нужно иметь возможность подписаться на зарегистрированных пользователей на проект для уведомлений.
У меня есть метод open_project
, который извлекает подробности из проекта, выбранного пользователем, который я использую, чтобы подписать его на любые обновления для этого проекта.
Так что я могу придумать 2 способа сделать это. Я создал переменную экземпляра в моей функции подключения, например:
def connect(self):
print("connected to projectconsumer...")
self.accept()
self.projectSessions = {}
А вот метод open_project
:
def open_project(self, message):
p = Project.objects.values("projectname").get(id=message)
if len(self.projectSessions) == 0:
self.projectSessions[message] = []
pass
self.projectSessions[message] = self.projectSessions[message].append(self)
print(self.projectSessions[message])
self.userjoinedMessage(self.projectSessions[message])
message = {}
message["command"] = "STC-openproject"
message["message"] = p
self.send_message(json.dumps(message))
Затем, когда пользователь открывает проект, он добавляется в список projectSessions
, однако это не работает (я думаю), когда новый пользователь подключается к веб-сокету, он получает своего собственного потребителя проекта.
Второй способ, который я задумал сделать, - это создать управляющий класс, который имеет только 1 экземпляр и отслеживает всех пользователей, подключенных к проекту. Я еще не пробовал это, так как я хотел бы получить некоторую обратную связь, если я даже качаюсь в правильном парке мячей. Любые отзывы приветствуются.
РЕДАКТИРОВАТЬ 1:
Я забыл добавить метод userjoinedMessage
к вопросу, этот метод просто для имитации будущей механики и для обратной связи, чтобы увидеть, действительно ли мое решение работает, но вот оно:
def userjoinedMessage(self, pointer):
message = {}
message["command"] = "STC-userjoinedtest"
message["message"] = ""
pointer.send_message(json.dumps(message))
обратите внимание, что я пытаюсь сослаться на экземпляр потребителя.
Я также попытаюсь внедрить менеджера потребителей, который будет следить за тем, какие потребители просматривают какие проекты и отправляет обновления на соответствующие каналы.