def RouteResponse(self, fromUID, toUID, trackingNbr, code, dataFormat, formatOpt, data): if toUID or self.CentralSessionExists(): if toUID: session = self._objectsSessions.get(toUID, None) else: session = self._centralSession if session: session.EndTrackingRequest(trackingNbr) data = IoTSocketStruct.MakeResponseTRHdr( fromUID, trackingNbr, code, dataFormat, formatOpt, len(data) ) \ + data return session.Send(data) else: httpReq, exp = self._centralHTTPRequests.get( trackingNbr, (None, None)) if httpReq: plFormat, plObject = IoTSocketStruct.DecodeJSONPayload( data, dataFormat) if plFormat is not None and plObject is not None: self.RemoveCentralHTTPRequest(httpReq) return httpReq.SendResponse(code, plObject, plFormat) self.Log('ROUTER > NO DESTINATION FOR RESPONSE (#%s)' % trackingNbr) return False
def _onRequestRecv(self, xAsyncTCPClient, data, arg) : uid = arg[0] if len(arg) == 2 : trackingNbr, dataFormat, formatOpt, dataLen = arg[1] data = data.tobytes() else : hdr = IoTSocketStruct.DecodeRequestHdr(data.tobytes()) trackingNbr, dataFormat, formatOpt, dataLen = hdr if dataLen > 0 : self._recv(dataLen, self._onRequestRecv, (uid, hdr)) return data = b'' print('ON REQUEST [%s] RECV' % trackingNbr) self._send(IoTSocketStruct.MakeResponseTRHdr(uid, trackingNbr, 0, dataFormat, 0, dataLen) + data) self._waitDataTransmission()
def _onWebHookResponseOk(self, centralHTTPWebHook, o): if o: uid, trackingNbr = centralHTTPWebHook.ObjRef try: code = int(o['Code']) fmt, data = IoTSocketStruct.EncodeJSONPayload( o['Payload'], o['Format']) if fmt is not None and data is not None: centralHTTPWebHook.ObjRef = (None, None) session = self._objectsSessions.get(uid, None) if session: session.EndTrackingRequest(trackingNbr) data = IoTSocketStruct.MakeResponseTRHdr( None, trackingNbr, code, fmt, IoTSocketStruct.PLDATA_FMT_OPT_NONE, len(data) ) \ + data session.Send(data) except: pass