该函数处理来与thingsbaord消息,主要流程如下:
消息解码:
content = TBUtility.decode(message)
调用父类的_on_decoded_message函数
- 调用自己类的_on_decoded_message函数
父类(网关设备)的_on_decoded_message函数,主要流程如下:
四种类型的消息处理:
“v1/devices/me/rpc/request/“
request_id = message.topic[len(RPC_REQUEST_TOPIC):len(message.topic)]
if self.__device_on_server_side_rpc_response:
# __device_on_server_side_rpc_response回调是gatewayservice设置的
self.__device_on_server_side_rpc_response(request_id, content)
“v1/devices/me/rpc/response/“
with self._lock:
# __device_client_rpc_dict字典里保存了客户端远程调用服务端的request_id以及回调函数
request_id = int(message.topic[len(RPC_RESPONSE_TOPIC):len(message.topic)])
callback = self.__device_client_rpc_dict.pop(request_id)
callback(request_id, content, None)
“v1/devices/me/attributes”
todo…
“v1/devices/me/attributes/response/“
with self._lock:
# _attr_request_dict字典里保存了客户端获取服务端的属性的request_id以及回调函数
req_id = int(message.topic[len(ATTRIBUTES_TOPIC + "/response/"):])
callback = self._attr_request_dict.pop(req_id)
callback(content, None)
自己类(网关客户端)的_on_decoded_message函数,主要流程如下:
同上,三种类型的消息处理:“v1/gateway/attributes/response”
with self._lock:
req_id = content["id"]
# pop callback and use it
if self._attr_request_dict[req_id]:
self._attr_request_dict.pop(req_id)(content, None)
“v1/gateway/attributes”
todo…
- “v1/gateway/rpc”
if self.devices_server_side_rpc_request_handler:
self.devices_server_side_rpc_request_handler(self, content)