def processReceivedMessageData(self, msgData): log.log("Received data: %s\n" % msgData) try: container = serializable.deserialize(msgData) if 'received' in container.keys(): #Process received confirmation: index = container['received'] self.network.callback.handleMessage( messages.Confirmation(localID=self.localID, index=index) ) elif 'message' in container.keys(): index = container['index'] msg = container['message'] #print "Got message: ", str(msg.__class__) if isinstance(msg, messages.Connect): if not (self.localID is None): raise Exception("Received connect message while already connected") self.localID = msg.ID self.dice = msg.dice self.network.checkForDuplicateConnections(self.localID) else: #Send confirmation on non-connect messages: confirmation = {'received': index} self.send(serializable.serialize(confirmation) + '\n') #TODO: filter for acceptable message types, IDs etc. before #sending them to a general-purpose message handler self.network.callback.handleMessage(msg) else: log.log("Received message with invalid format") except Exception as e: log.logException()
def handler(self, *args, **kwargs): args, kwargs = self.rewrite_args(args, kwargs) retval = fn(self, *args, **kwargs) uid = self.get_persistent_uid(retval) def attachment_replacer(key, value): if type(value) is numpy.ndarray: return { '$type': 'ArrayBuffer', 'dataType': str(value.dtype), 'buffer': self.addAttachment(value.tobytes()), } return value return {'uid': uid, 'data': serialize(retval, attachment_replacer)}
def sendMessage(self, index, msg): log.log("Sending message %s" % str(msg.__class__)) container = {'index': index, 'message': msg} self.send(serializable.serialize(container) + '\n')