Exemple #1
0
    async def _run_write_task(self) -> None:
        """Write to the peer."""

        self._check_env()

        # Introduce ourself so our peer knows how it can talk to us.
        data = dataclass_to_json(
            _PeerInfo(protocol=OUR_PROTOCOL,
                      keepalive_interval=self._keepalive_interval)).encode()
        self._writer.write(len(data).to_bytes(4, _BYTE_ORDER) + data)

        # Now just write out-messages as they come in.
        while True:

            # Wait until some data comes in.
            await self._have_out_packets.wait()

            assert self._out_packets
            data = self._out_packets.pop(0)

            # Important: only clear this once all packets are sent.
            if not self._out_packets:
                self._have_out_packets.clear()

            self._writer.write(data)
Exemple #2
0
 async def send_message(self,
                        message: _Message,
                        timeout: Optional[float] = None) -> _Message:
     """Send high level messages."""
     assert self._endpoint is not None
     response = await self._endpoint.send_message(
         dataclass_to_json(message).encode(), timeout=timeout)
     return dataclass_from_json(_Message, response.decode())
    def save_state(self) -> None:
        """Save state to disk (if possible)."""

        print('ASSET-MANAGER SAVING STATE')
        try:
            with open(self.state_path, 'w', encoding='utf-8') as outfile:
                outfile.write(dataclass_to_json(self._state))
        except Exception:
            logging.exception('Error writing AssetManager state')
Exemple #4
0
 async def _handle_raw_message(self, message: bytes) -> bytes:
     msgobj = dataclass_from_json(_Message, message.decode())
     rspobj = await self.handle_message(msgobj)
     return dataclass_to_json(rspobj).encode()