示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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")
示例#4
0
    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)