def process(self): # print("CLIENT TRANSACTION: starting") try: """Read greeting from server""" dbid = Protocol.parse_greeting_message(self._read().decode()) """TODO: We should use the remote tc from the last sync...""" """Request and read message id's""" self._write(Protocol.create_message_id_list_request().encode()) _, msgids = Protocol.parse_message_id_list(self._read().decode()) req_msgids = [mid for mid in msgids if not self._db.contains_message(mid)] if len(req_msgids) == 0: # Nothing to fetch # print("CLIENT TRANSACTION: hanging up - 0 sync") return """Request and read messages""" self._write(Protocol.create_message_list_request(req_msgids).encode()) msgs = Protocol.parse_message_list(self._read().decode()) """Store the new messages""" self._db.add_messages(msgs) except (socket.timeout, ProtocolParseError, ValueError, TypeError): """Do nothing on error, just hang up""" #print("CLIENT TRANSACTION: Error processing data from server") print("CLIENT TRANSACTION: hanging up")
def test_message_list_roundtrip(self): m1 = Message('M1') m2 = Message('M2') m3 = Message('M3') msg = Protocol.create_message_list([m1, m2, m3]) mout = Protocol.parse_message_list(msg) self.assertEqual(len(mout), 3) self.assertTrue(m1 in mout) self.assertTrue(m2 in mout) self.assertTrue(m3 in mout)