def sendCommand(self, command, initialParameters = None): """ Sends command to the handler @param command: AbstractCommand instance @param initialParameters: dict Initial command parameters """ if not initialParameters: raise Exception("Empty initial parameters!") config = {} if "config" in initialParameters: config = initialParameters["config"] transport = initialParameters["transport"] commandData = command.getData(transport) or [] if not isinstance(commandData, list): commandData = [{"message": commandData}] for item in commandData: if not isinstance(item, dict): item = {"message": item} buffer = item["message"] if transport == "tcp": self.send(buffer) log.debug('[%s] Command data is sent: %s', self.handlerId, buffer) elif transport == "sms": data = { 'type': transport, 'message': buffer, 'remaining': 1 } if 'address' in config: data['send_to'] = config['address'] if 'callback' in config: data['callback'] = config['callback'] if 'id_object' in config: data['id_object'] = config['id_object'] if 'id_firm' in config: data['id_firm'] = config['id_firm'] if 'from' in config: data['params'] = {} data['params']['from'] = config['from'] log.debug('[%s] Sending AMQP message to [work.process]...', self.handlerId) broker.send([data], routing_key = 'n.work.work.process', exchangeName = 'n.work') if transport == "sms": # immediate sending of command update message broker.sendAmqpAnswer(self, "Command was successfully received and processed")
def processProtocolPacket(self, protocolPacket): """ Process naviset packet. @type protocolPacket: packets.Packet @param protocolPacket: Naviset protocol packet """ self.sendAcknowledgement(protocolPacket) self.receiveImage(protocolPacket) self.isHeadPacket = False log.info('[%s] processProtocolPacket... isHead = %s', self.handlerId, self.isHeadPacket) if isinstance(protocolPacket, packets.PacketHead): log.info('[%s] HeadPack is stored.', self.handlerId) self.__headPacketRawData = protocolPacket.rawData self.uid = protocolPacket.deviceImei self.isHeadPacket = True if isinstance(protocolPacket, packets.PacketAnswer): log.info("[%s] Storing command answer packet: %s", self.handlerId, protocolPacket.__class__) broker.sendAmqpAnswer(self, protocolPacket) return if not isinstance(protocolPacket, packets.PacketData): return if not self.__headPacketRawData: self.__headPacketRawData = b'' observerPackets = self.translate(protocolPacket) if len(observerPackets) == 0: log.info('[%s] Location packet not found. Exiting...', self.handlerId) return log.info(observerPackets) self.store(observerPackets)