def sendMessage(self, deviceId, payload):
self.logger.debug("Attempting do send message to device %s, payload %s", binascii.hexlify(deviceId), payload)
if deviceId in self.sessions:
session = self.sessions[deviceId]
if session.protocol == IotSession.TYPE_UDP:
counter = self.getCounter(deviceId)
message = UdpPacket(deviceId, UdpPacket.SERVER_TO_CLIENT, self.IOT_PROTOCOL_VERSION, counter.udpSentCounter, session.lastUdpMessage.counter1, payload)
deviceKey = iotcommon.deriveKey(self.masterKey, deviceId)
data = message.createPacket(deviceKey)
self.logger.info("Sending {0} bytes in UDP to device {1} at {2}:{3}".format(len(data), binascii.hexlify(message.deviceId), session.clientAddr[0], session.clientAddr[1]))
with session.lock:
self.udpServer.socket.sendto(data, session.clientAddr)
counter.udpSentCounter += 1
self.saveState()
elif session.protocol == IotSession.TYPE_SSL:
self.logger.info("Sending {0} bytes by SSL to device {1} at {2}:{3}".format(len(payload), binascii.hexlify(deviceId), session.clientAddr[0], session.clientAddr[1]))
with session.lock:
iotcommon.sendMessage(session.sslSocket, payload)
else:
self.logger.warning("could not send message to device - device %s is not connected", binascii.hexlify(message.deviceId))
return False
评论列表
文章目录