Esempio n. 1
0
class HubClient(Protocol, ProtocolTaskMixin):
    def __init__(self):
        self._buffer = bytes()
        self._hub = empty
        self._handle = Handle()

    def connectionMade(self):
        print(f"连接到服务器: {self.transport.getPeer()}")
        self._buffer = bytes()
        self.send_verify()

    def dataReceived(self, data):
        print(f"接收数据: {data}")

    def send(self, command_id, content):
        length = 12 + len(content)
        header = [length, __version__, command_id]
        header_pack = struct.pack("!3I", *header)
        self.transport.write(header_pack + content.encode("UTF-8"))

    def send_heartbeat(self):
        header = [12, __version__, 5]
        content = struct.pack("!3I", *header)
        self.transport.write(content)

    def report_status(self):
        if self._hub is not empty:
            body = self._handle.report_status(self._hub)
            content = self._serializer_data(body)
            print(f"上报电能数据: {content}")
            self.send(2, content)

    def report_weather_data(self):
        if self._hub is not empty:
            body = self._handle.report_weather_data()
            content = self._serializer_data(body)
            print(f"上报气象站数据: {content}")
            self.send(2, content)

    def send_verify(self):
        is_empty = self.factory.queue.empty()
        if not is_empty:
            self._hub = self.factory.queue.get()
            body = self._handle.register(self._hub)
            content = self._serializer_data(body)
            print(f"注册: {content}")
            self.send(1, content)

    def _serializer_data(self, body):
        content = {"sender": self._hub.hid, "receiver": "NS", "body": body}
        return json.dumps(content)