예제 #1
0
 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
예제 #2
0
 def RouteTelemetry(self, token, dataFormat, formatOpt, data):
     if token and data:
         uid, exp = self._telemetryTokens.get(token, (None, None))
         if uid:
             self.Log(
                 'ROUTER > TELEMETRY RECEIVED FROM {%s} WITH TOKEN %s' %
                 (IoTSocketStruct.UIDFromBin128(uid),
                  self.TelemetryTokenToStr(token)))
             if self.CentralSessionExists():
                 session = self._centralSession
                 if session:
                     data = IoTSocketStruct.MakeIdentTelemetryTRHdr( uid,
                                                                     dataFormat,
                                                                     formatOpt,
                                                                     len(data) ) \
                          + data
                     if session.Send(data):
                         return True
             elif self._onGetWebHookTelemetry:
                 plFormat, plObject = IoTSocketStruct.DecodeJSONPayload(
                     data, dataFormat)
                 if plFormat is not None and plObject is not None:
                     webHook = self._onGetWebHookTelemetry(self)
                     if webHook:
                         webHook.Post(self._centralAuthKeyHex, uid,
                                      plObject, plFormat)
                         return True
                     self.Log('ROUTER > ERROR TO OPEN WEBHOOK OF TELEMETRY')
             self.Log('ROUTER > NO DESTINATION FOR TELEMETRY')
     return False
예제 #3
0
 def RouteRequest(self, fromUID, toUID, trackingNbr, dataFormat, formatOpt,
                  data):
     if toUID or self.CentralSessionExists():
         if toUID:
             session = self._objectsSessions.get(toUID, None)
         else:
             session = self._centralSession
         data = IoTSocketStruct.MakeRequestTRHdr( fromUID,
                                                  trackingNbr,
                                                  dataFormat,
                                                  formatOpt,
                                                  len(data) ) \
              + data
         if session and session.Send(data):
             return True
         if not toUID:
             toUID = IoTSocketStruct.CENTRAL_EMPTY_UID
         sessionData, exp = self._keepSessionsData.get(toUID, (None, None))
         if sessionData is not None:
             sessionData.append(data)
             self.Log('ROUTER > REQUEST KEPT (#%s)' % trackingNbr)
             return True
     else:
         if self._onGetWebHookRequest:
             plFormat, plObject = IoTSocketStruct.DecodeJSONPayload(
                 data, dataFormat)
             if plFormat is not None and plObject is not None:
                 webHook = self._onGetWebHookRequest(self)
                 if webHook:
                     webHook.ObjRef = (fromUID, trackingNbr)
                     webHook.OnResponseOk = self._onWebHookResponseOk
                     webHook.OnClosed = self._onWebHookClosed
                     webHook.Post(self._centralAuthKeyHex, fromUID,
                                  plObject, plFormat)
                     return True
                 self.Log('ROUTER > ERROR TO OPEN WEBHOOK OF REQUEST')
     self.Log('ROUTER > NO DESTINATION FOR REQUEST (#%s)' % trackingNbr)
     return False