def process_line_data(self, data, raw_line): if "ack" in data: if data["ack"] == 1: self.process_ack(data["uid_conversation"]) else: log.info("Un-ack received: {message!r}", message=raw_line.rstrip()) if "to" in data: uid_to = data["to"] clients = self.factory.clients.get(uid_to) if clients: uid_conversation = str(uuid.uuid4()) self.factory.waiting_acks[uid_conversation] = { "clients": clients, "channel": self } data = self.serializer.dumps({ 'uid_to': uid_to, 'uid_conversation': uid_conversation }) for client in clients: try: client.sendLine(data) except Exception, e: log.failure("{message!r}", message=e.message) client.transport.loseConnection() callback = reactor.callLater(1.7, PubProtocol.no_ack_timeout, self.factory, self, uid_conversation, uid_to) self.factory.conversation_callbacks[ uid_conversation] = callback else: self.send_uid_no_registered()
def lineReceived(self, line): log.debug("{line!r}", line=line) try: data = self.serializer.loads(line.rstrip()) self.process_line_data(data, line) except Exception, e: log.failure("{message!r}", message=e.message) log.error("{line!r}", line=line)
def lineReceived(self, line): try: data = self.serializer.loads(line.rstrip()) for each in self._unsupported_messages(): if each in data: log.error("Unsupported message {message!r}", message=line.rstrip()) self.transport.abortConnection() self.process_line_data(data, line) except Exception, e: log.failure(e.message) self.transport.abortConnection()
def no_ack_timeout(cls, factory, channel, uid_conversation, uid_to): if uid_conversation in factory.waiting_acks: log.warn('No ack for %s to %s' % (uid_conversation, uid_to)) data = {'ack': 0, 'error': 'time out, unable to contact'} channel.sendLine(factory.serializer.dumps(data)) clients = factory.waiting_acks[uid_conversation]["clients"] for client in clients: log.warn('UIDS for this client: %s' % client.uids) if len(client.uids) == 1: try: log.warn( 'Aborting connection because the only uid it had is not responding %s' % (uid_conversation, )) client.transport.abortConnection() except Exception, e: log.failure("{message!r}", message=e.message) client.uids.remove(uid_to) del factory.clients[uid_to]
def new_message(self, data): if "uid_to" in data: uid_to = data["uid_to"] clients = self.clients.get(uid_to) uid_conversation = data['uid_conversation'] if clients: self.waiting_acks[uid_conversation] = { "clients": clients, "channel": self.subscriber } data = self.serializer.dumps({ 'uid_to': uid_to, 'uid_conversation': uid_conversation }) for client in clients: try: log.debug( 'Going to send message for uid %s in conversation %s' % ( uid_to, uid_conversation, )) client.sendLine(data) except Exception, e: log.failure("ERROR in new_message: {message!r}", message=e.message) client.transport.loseConnection() callback = reactor.callLater(1.7, BrokerPubProtocol.no_ack_timeout, self, self.subscriber, uid_conversation, uid_to) self.conversation_callbacks[uid_conversation] = callback else: self.send_uid_no_registered()
def insert_doc(_, mbox_uuid, doc_id): d = self.mbox_indexer.get_uid_from_doc_id(mbox_uuid, doc_id) d.addCallback(insert_conditionally, mbox_uuid, doc_id) d.addErrback(lambda err: log.failure(err)) d.addCallback(log_result) return d