Example #1
0
    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)
Example #5
0
    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))
Example #6
0
    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())