def handle_update_group(self, message): """ Update user groups TODO: There is a race condition if 2 message.users arrives and overwrites each other """ # update table if message.method == Method.add: self.groups[message.receiver.uid].update( {x.uid: x for x in message.users}) else: self.groups[message.receiver.uid] = { x.uid: x for x in message.users } # update message message.method = Method.none message.users = list(self.groups[message.receiver.uid].values()) # update all users in group for user_uid in self.groups[message.receiver.uid]: if user_uid in self.user_to_connection: message_out = Message.Websocket( connection_id=self.user_to_connection[user_uid], message=message.as_websocket(), request=None, ) self.log.debug(message_out) self.rtx.on_next(message_out)
def send_forever(self): # use exit event to gracefully exit loop and graceful cleanup while not self.exit_event.is_set(): time.sleep(1) self.counter += 1 msg = Message.Client(name="client2", payload=str(self.counter)) self.log.info(f"send: {msg}") self.client.send(msg.to_multipart())
def send_forever(self): # use exit event to gracefully exit loop and graceful cleanup while not self.exit_event.is_set(): time.sleep(1) self.counter += 1 msg = Message.Notification(payload=str(self.counter)) self.log.info(f"publishing: {msg}") self.pub.send(msg.to_multipart())
def handle_websocket_message(self, msg): parsed = json.loads(msg.message.data) message_out = Message.Websocket( connection_id=self.user_to_connection[user_uid], message=message.as_websocket(), request=None, ) self.log.debug(message_out) self.rtx.on_next(message_out)
def main(self): f = Figlet(font="slant") puts("\n" + f.renderText("Fireside")) puts("Welcom to Fireside!!!") with indent(4, quote=" >"): puts(colored.green("username: "******"pub_address: ") + self.pub_address) puts(colored.green("sub_address: ") + self.sub_address) puts("Connect to this Fireside") with indent(4, quote=" >"): puts("fireside " + "-pub " + self.pub_address + " -sub " + self.sub_address) # use exit event to gracefully exit loop and graceful cleanup while not self.exit_event.is_set(): msg = input(colored.cyan(self.name + " : ")) if msg: self.pub.send( Message.notification(topic=self.name, payload=msg))
def handle_chat_message(self, message): """ Relay message User or Group """ receiver = message.receiver to_users = [] if isinstance(receiver, User): to_users.append(receiver.uid) elif isinstance(receiver, Group) and receiver.uid in self.groups: to_users += self.groups[receiver.uid].keys() for user_uid in to_users: if user_uid in self.user_to_connection: message_out = Message.Websocket( connection_id=self.user_to_connection[user_uid], message=message.as_websocket(), request=None, ) self.log.debug(message_out) self.rtx.on_next(message_out)
def send_message(self, x): self.counter += 1 msg = Message.Client(name="client2", payload=str(self.counter)) self.log.info(f"send: {msg}") self.client.send(msg.to_multipart())