def _onWebHookClosed(self, centralHTTPWebHook): uid, trackingNbr = centralHTTPWebHook.ObjRef if uid and trackingNbr: session = self._objectsSessions.get(uid, None) if session: session.EndTrackingRequest(trackingNbr) data = IoTSocketStruct.MakeResponseErrTR( None, trackingNbr, IoTSocketStruct.RESP_CODE_REQ_NOK) session.Send(data)
def CheckRequestsTimeout(self, nowSec): if self._requests: with self._requestsLock: for trackingNbr in list(self._requests): uid, exp = self._requests[trackingNbr] if nowSec >= exp: del self._requests[trackingNbr] self.Send( IoTSocketStruct.MakeResponseErrTR( uid, trackingNbr, IoTSocketStruct.RESP_CODE_ERR_TIMEOUT)) self._router.Log('SESSION %s > REQUEST TIMEOUT (#%s)' % (self._getSessionName(), trackingNbr))
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'' if uid: strUID = ('{%s}' % IoTSocketStruct.UIDFromBin128(uid)) else: strUID = 'CENTRAL' errCode = None with self._requestsLock: self._router.Log('SESSION %s > REQUEST TO %s RECEIVED (#%s)' % (self._getSessionName(), strUID, trackingNbr)) if not trackingNbr in self._requests: if self._router.RouteRequest( fromUID=None if self._isCentral else self._uid, toUID=uid, trackingNbr=trackingNbr, dataFormat=dataFormat, formatOpt=formatOpt, data=data): exp = time() + self._reqTimeout self._requests[trackingNbr] = (uid, exp) else: errCode = IoTSocketStruct.RESP_CODE_ERR_NO_DEST else: self._router.Log( 'SESSION %s > TRACKING NUMBER #%s ALREADY EXISTS' % (self._getSessionName(), trackingNbr)) errCode = IoTSocketStruct.RESP_CODE_ERR_SAME_TRK_NBR if errCode: self.Send( IoTSocketStruct.MakeResponseErrTR(uid, trackingNbr, errCode)) self._waitDataTransmission()