示例#1
0
文件: rabbitmq.py 项目: UPCnet/max
    def add_conversation_message(self, conversation, newmessage):
        """
            Sends a Carrot (TM) notification of a new conversation creation
        """
        conversation_id = conversation.getIdentifier()
        participants_usernames = [user['username'] for user in conversation['participants']]
        self.client.conversations.create(conversation_id, users=participants_usernames)

        # Send a conversation creation notification to rabbit
        message = RabbitMessage()
        message.prepare(self.message_defaults)

        if newmessage['object']['objectType'] == 'note':
            data_message = {'text': newmessage['object']['content'],'message_id': newmessage['_id']}
        elif newmessage['object']['objectType'] == 'image':
            data_message = {'text': 'Add image', 'message_id': str(newmessage['_id'])}
        else:
            data_message = {}

        message.update({
            "user": {
                'username': self.request.actor['username'],
                'displayname': self.request.actor['displayName'],
            },
            "action": "add",
            "object": "message",
            "data": data_message
        })
        self.client.send('conversations', json.dumps(message.packed), routing_key='{}.notifications'.format(conversation_id))
示例#2
0
文件: rabbitmq.py 项目: UPCnet/max
    def notify_context_activity(self, activity):
        """
            Sends a Carrot (TM) notification of a new post on a context
        """
        message = RabbitMessage()
        message.prepare(self.message_defaults)

        if activity['object']['objectType'] == 'image':
            text = 'Add image'
        else:
            text = activity['object'].get('content', '')

        message.update({
            "user": {
                'username': self.request.actor['username'],
                'displayname': self.request.actor['displayName'],
            },
            "action": "add",
            "object": "activity",
            "data": {
                'text': text,
                'activityid': str(activity['_id'])
            }
        })
        self.client.send('activity', json.dumps(message.packed), activity['contexts'][0]['hash'])
示例#3
0
 def process_message(self, stomp):
     """
         Handle a decoded stomp message.
         We're assuming that stomp messages will ever contain a MaxCarrot message.
         Based on properties fn the latter, we'll execute proper actions.
     """
     message = RabbitMessage.unpack(stomp.json)
     destination = re.search(r'([0-9a-f]+).(?:notifications|messages)', stomp.headers['destination']).groups()[0]
     if message['action'] == 'add' and message['object'] == 'message':
         sent = datetime.strptime(message['published'], '%Y-%m-%dT%H:%M:%S.%fZ')
         recv = datetime.utcnow()
         elapsed = abs((recv - sent).total_seconds())
         self.received.append((message, elapsed))
         #self.log('{}@{} ({:.3f}): {}'.format(message['user']['username'], destination, elapsed, message['data']['text']))
         self.trigger('message_received', stomp)
     elif message['action'] == 'add' and message['object'] == 'conversation':
         self.log('{}@{}: Just started a chat'.format(message['user']['username'], destination))
         self.trigger('conversation_started', stomp)
     elif message['action'] == 'ack' and message['object'] == 'message':
         sent = datetime.strptime(message['published'], '%Y-%m-%dT%H:%M:%S.%fZ')
         recv = datetime.utcnow()
         elapsed = abs((recv - sent).total_seconds())
         self.acknowledged.append((message, elapsed))
         self.trigger('message_ackd', stomp)
     else:
         print '\n{}\n'.format(message)
示例#4
0
 def notify_context_activity_comment(self, activity, comment):
     """
         Sends a Carrot (TM) notification of a new post on a context
     """
     message = RabbitMessage()
     message.prepare(self.message_defaults)
     message.update({
         "user": {
             'username': self.request.actor['username'],
             'displayname': self.request.actor['displayName'],
         },
         "action": "add",
         "object": "comment",
         "data": {
             'text': comment['content'],
             'activityid': str(activity['_id']),
             'commentid': comment['id']
         }
     })
     self.client.send('activity', json.dumps(message.packed), activity['contexts'][0]['hash'])
示例#5
0
    def add_conversation(self, conversation):
        """
            Sends a Carrot (TM) notification of a new conversation creation
        """
        conversation_id = conversation.getIdentifier()
        participants_usernames = [user['username'] for user in conversation['participants']]
        self.client.conversations.create(conversation_id, users=participants_usernames)

        # Send a conversation creation notification to rabbit
        message = RabbitMessage()
        message.prepare(self.message_defaults)
        message.update({
            "user": {
                'username': self.request.actor['username'],
                'displayname': self.request.actor['displayName'],
            },
            "action": "add",
            "object": "conversation",
            "data": {}
        })
        self.client.send('conversations', json.dumps(message.packed), routing_key='{}.notifications'.format(conversation_id))
示例#6
0
    def send_message(self, conversation, text):
        """
            Sends a stomp message to a specific conversation
        """
        message = RabbitMessage()
        message.prepare()
        message['source'] = 'test'
        message['data'] = {'text': text}
        message['action'] = 'add'
        message['object'] = 'message'
        message['user'] = {'username': self.username}
        if self.domain:
            message['domain'] = self.domain

        headers = {
            "destination": "/exchange/{}.publish/{}.messages".format(self.username, conversation),
        }
        # Convert json to text without blank space, and escape it
        json_message = json.dumps(message.packed, separators=(',', ':'))
        json_message = json_message.replace('"', '\\"')

        self.send(self.stomp.send_frame(headers, json_message))
        self.trigger('message_sent')
示例#7
0
 def sync_acl(self, domain, context, username, tasks):
     """
         Sends a Carrot (TM) notification of a new sync acl task
     """
     # Send a conversation creation notification to rabbit
     message = RabbitMessage()
     message.prepare(self.message_defaults)
     message.update({
         "user": {
             'username': username,
         },
         "domain": domain,
         "action": "modify",
         "object": "context",
         "data": {
             'context': context,
             'tasks': tasks
         }
     })
     self.client.send('syncacl', json.dumps(message.packed), routing_key='')