该函数处理来与thingsbaord消息,主要流程如下:

    1. 消息解码:

      1. content = TBUtility.decode(message)
    2. 调用父类的_on_decoded_message函数

    3. 调用自己类的_on_decoded_message函数

    父类(网关设备)的_on_decoded_message函数,主要流程如下:
    四种类型的消息处理:

    1. “v1/devices/me/rpc/request/“

      1. request_id = message.topic[len(RPC_REQUEST_TOPIC):len(message.topic)]
      2. if self.__device_on_server_side_rpc_response:
      3. # __device_on_server_side_rpc_response回调是gatewayservice设置的
      4. self.__device_on_server_side_rpc_response(request_id, content)
    2. “v1/devices/me/rpc/response/“

      1. with self._lock:
      2. # __device_client_rpc_dict字典里保存了客户端远程调用服务端的request_id以及回调函数
      3. request_id = int(message.topic[len(RPC_RESPONSE_TOPIC):len(message.topic)])
      4. callback = self.__device_client_rpc_dict.pop(request_id)
      5. callback(request_id, content, None)
    3. “v1/devices/me/attributes”

    todo…

    1. “v1/devices/me/attributes/response/“

      1. with self._lock:
      2. # _attr_request_dict字典里保存了客户端获取服务端的属性的request_id以及回调函数
      3. req_id = int(message.topic[len(ATTRIBUTES_TOPIC + "/response/"):])
      4. callback = self._attr_request_dict.pop(req_id)
      5. callback(content, None)

      自己类(网关客户端)的_on_decoded_message函数,主要流程如下:
      同上,三种类型的消息处理:

    2. “v1/gateway/attributes/response”

      1. with self._lock:
      2. req_id = content["id"]
      3. # pop callback and use it
      4. if self._attr_request_dict[req_id]:
      5. self._attr_request_dict.pop(req_id)(content, None)
    3. “v1/gateway/attributes”

    todo…

    1. “v1/gateway/rpc”
      1. if self.devices_server_side_rpc_request_handler:
      2. self.devices_server_side_rpc_request_handler(self, content)