def __onDeviceConnectionChange(self,data,size): reader = RemoteMeDataReader(data) size = int(size/3) self.__logger.warning("size:{}".format(size)) for i in range(0,size): deviceId = reader.readUInt16() state = reader.readUInt8() == 1 for listener in self.__onDeviceConnectionChangeListeners: listener(deviceId,state)
def __onConnectionChange(self, data): reader = RemoteMeDataReader(data) # data and type already took deviceId = reader.readUInt16() type = reader.readUInt8() # type 1 = weboscket type 2 = webrtc state = remotemeStruct.ConnectionState(reader.readUInt8()) if type == 1: for toCall in self.__onWebsocketConnectionChangeListeners: toCall(state) elif type == 2: for toCall in self.__onWebRtcConnectionChangeListeners: toCall(state)
def __readFromSocket(self): concesousErrors = 0 while self.__socketObj is not None: try: header = self.__socketObj.recv(4) if (len(header) == 4): [messageType, size] = struct.unpack(">hh", header) messageType = remotemeStruct.MessageType(messageType) self.__logger.debug("got message type {} size:{}".format( messageType, size)) data = self.__socketObj.recv(size) if (len(data) == size): self.__logger.debug('Python message received') if (messageType == remotemeStruct.MessageType.USER_MESSAGE): userMessageSettings = remotemeStruct.UserMessageSettings( reader.readUInt8()) # for later use receiverDeviceId = reader.readUInt16() senderDeviceId = reader.readUInt16() messageId = reader.readUInt16() data = reader.readRest() if (self.__ownId == receiverDeviceId): self.__onUserMessage(userMessageSettings, senderDeviceId, messageId, data) else: print('PYTHON wrong deviceId :{} '.format( receiverDeviceId)) elif (messageType == remotemeStruct.MessageType. USER_MESSAGE_WEBPAGE_TOKEN): reader = RemoteMeDataReader(data) # data and type already took userMessageSettings = remotemeStruct.UserMessageSettings( reader.readUInt8()) # for later use receiverDeviceId = reader.readUInt16() senderDeviceId = reader.readUInt16() sessionId = reader.readUInt16() credit = reader.readUInt16() time = reader.readUInt16() data = reader.readRest() if (self.__ownId == receiverDeviceId): self.__onUserMessage(userMessageSettings, senderDeviceId, 0, data, sessionId, credit, time) else: print('PYTHON wrong deviceId :{} '.format( receiverDeviceId)) elif messageType == remotemeStruct.MessageType.USER_SYNC_MESSAGE: self.__logger.debug( "expected size of bytes {} data length:{}". format( size - remotemeStruct. USER_SYNC_DATA_HEADEARS_SIZE, len(data))) receiverDeviceId = reader.readUInt16() senderDeviceId = reader.readUInt16() messageId = reader.readUInt64() data = reader.readRest() if (self.__ownId == receiverDeviceId): self.__onSyncMessage(senderDeviceId, messageId, data) else: print('PYTHON wrong deviceId :{} '.format( receiverDeviceId)) elif messageType == remotemeStruct.MessageType.USER_SYNC_MESSAGE_WEBPAGE_TOKEN: self.__logger.debug( "expected size of bytes {} data length:{}". format( size - remotemeStruct. USER_SYNC_DATA_HEADEARS_SIZE, len(data))) receiverDeviceId = reader.readUInt16() senderDeviceId = reader.readUInt16() sessionId = reader.readUInt16() credit = reader.readUInt16() time = reader.readUInt16() messageId = reader.readUInt64() data = reader.readRest() if (self.__ownId == receiverDeviceId): self.__onSyncMessage(senderDeviceId, messageId, data, sessionId, credit, time) else: print('PYTHON wrong deviceId :{} '.format( receiverDeviceId)) elif messageType in ( remotemeStruct.MessageType. VARIABLE_CHANGE_PROPAGATE_MESSAGE, remotemeStruct.MessageType. VARIABLE_CHANGE_PROPAGATE_MESSAGE_WEBPAGE_TOKEN ): self.getVariables().__onVariableChangePropagate( data, messageType) elif messageType == remotemeStruct.MessageType.CONNECTION_CHANGE: self.__onConnectionChange(data) else: print('PYTHON wrong data type {} '.format( messageType)) concesousErrors = 0 except: self.__logger.exception("error while processing message") concesousErrors = concesousErrors + 1 if concesousErrors > 5: self.__logger.error("more then 10 errors exit") exit(0) print("PYTHON end loop")
def _RemoteMe__onVariableChangePropagate(self,data,messageType): reader = RemoteMeDataReader(data) # data and type already took senderDeviceId = reader.readUInt16() receiverDeviceId = reader.readUInt16() if messageType == remotemeStruct.MessageType.VARIABLE_CHANGE_PROPAGATE_MESSAGE_WEBPAGE_TOKEN: sessionId = reader.readUInt16() credit = reader.readUInt16() time = reader.readUInt16() else: sessionId = None credit = None time = None count = reader.readUInt16() while count != 0: count = count-1 type = remotemeStruct.VariableType(reader.readUInt16()) name = reader.readString() self.__logger.debug("type:{} name:{} is bool {}".format(type, name,(type ==remotemeStruct.VariableType.BOOLEAN) )) if type ==remotemeStruct.VariableType.BOOLEAN: value = reader.readInt8()==1 self.__logger.debug("try to call {} {}".format(name,value)) toCall= self.__observables.get(name + str(type.value),None) if toCall is not None: if toCall.paramCount ==1: toCall.toCall(value) else: toCall.toCall(value,sessionId,credit,time) else: self.__logger.debug("ddint found caller") elif type == remotemeStruct.VariableType.INTEGER: value = reader.readInt32() toCall = self.__observables.get(name + str(type.value),None) if toCall is not None: if toCall.paramCount == 1: toCall.toCall(value) else: toCall.toCall(value, sessionId, credit, time) elif type == remotemeStruct.VariableType.TEXT: value = reader.readString() toCall = self.__observables.get(name + str(type.value),None) if toCall is not None: if toCall.paramCount == 1: toCall.toCall(value) else: toCall.toCall(value, sessionId, credit, time) elif type == remotemeStruct.VariableType.SMALL_INTEGER_3: value = reader.readInt16() value2 = reader.readInt16() value3 = reader.readInt16() toCall = self.__observables.get(name + str(type.value),None) if toCall is not None: if toCall.paramCount == 3: toCall.toCall(value, value2,value3) else: toCall.toCall(value, value2,value3, sessionId, credit, time) elif type == remotemeStruct.VariableType.SMALL_INTEGER_2: value = reader.readInt16() value2 = reader.readInt16() toCall = self.__observables.get(name + str(type.value),None) if toCall is not None: if toCall.paramCount == 2: toCall.toCall(value, value2) else: toCall.toCall(value, value2, sessionId, credit, time) elif type == remotemeStruct.VariableType.INTEGER_BOOLEAN: value = reader.readInt32() value2 =reader.readInt8()==1 toCall = self.__observables.get(name + str(type.value),None) if toCall is not None: if toCall.paramCount == 2: toCall.toCall(value, value2) else: toCall.toCall(value, value2, sessionId, credit, time) elif type == remotemeStruct.VariableType.DOUBLE: value = reader.readDouble() toCall = self.__observables.get(name + str(type.value),None) if toCall is not None: if toCall.paramCount == 1: toCall.toCall(value) else: toCall.toCall(value, sessionId, credit, time) elif type == remotemeStruct.VariableType.TEXT_2: value = reader.readString() value2 = reader.readString() toCall = self.__observables.get(name + str(type.value),None) if toCall is not None: if toCall.paramCount == 2: toCall.toCall(value, value2) else: toCall.toCall(value, value2, sessionId, credit, time) elif type == remotemeStruct.VariableType.SMALL_INTEGER_2_TEXT_2: value = reader.readInt16() value2 = reader.readInt16() value3 = reader.readString() value4 = reader.readString() toCall = self.__observables.get(name + str(type.value),None) if toCall is not None: if toCall.paramCount == 4: toCall.toCall(value, value2,value3,value4) else: toCall.toCall(value, value2,value3,value4, sessionId, credit, time)