async def connect_peer(self, ip: str, port: int, data: bytes) -> None: loop = asyncio.get_event_loop() try: await loop.create_connection(lambda: TCPClientProtocol(self, data), ip, port) except ConnectionRefusedError: logger.debug("Connection refused. Peer may be offline.")
def test_log(self): print() logger.info("INFO LOG") logger.warning("WARNING LOG") logger.error("ERROR LOG") logger.debug("DEBUG LOG") logger.info(self) logger.error(1, 2)
def stop(self): super().stop() for task in asyncio.Task.all_tasks(): logger.debug(f"Canceling task: {task}") task.cancel() if self.tcp_server: self.tcp_server.close() if self.sync_loop: self.sync_loop.cancel()
def handle_receive_latest_block(self, block: dict) -> None: peer_block = Block.deserialize(block) latest_block = self.blockchain.latest_block is_added = self.blockchain.add_block(peer_block) if is_added: self.server.broadcast_message( Message.send_latest_block(peer_block)) elif latest_block.index < peer_block.index: # peer is longer, ask for blockchain logger.debug("Having no latest block. Asking for blockchain") self.server.broadcast_message(Message.get_blockchain()) else: # I'm on the edge! pass self.transport.close()
async def mine_blockchain(self) -> None: if not self.mining: return data = self.get_mempool() while True: start = time.time() logger.debug("Start mining...") mined = await self._mine(data) if mined: logger.debug( f"Mined block after {time.time() - start:.2f}s, broadcasting..." ) self.broadcast_message( Message.send_latest_block(self.blockchain.latest_block)) else: logger.debug("Mining block failed, awaiting longest chain") self.broadcast_message(Message.get_blockchain()) await asyncio.sleep(3)
parser.add_argument("-m", "--mine", action="store_true", help="Mining blocks") parser.add_argument("-D", "--debug", action="store_true", help="Debug mode") args = parser.parse_args() server = Server(mining=args.mine) server.listen(args.port) loop = asyncio.get_event_loop() loop.set_debug(args.debug) if args.bootstrap: logger.debug( loop.run_until_complete( server.bootstrap([(ip, port) for ip, port in args.bootstrap]) ) ) try: if server.mining: loop.run_until_complete(server.mine_blockchain()) else: loop.run_forever() except KeyboardInterrupt: logger.debug(server.blockchain[-5:]) server.stop() finally: loop.close()
def refresh_table(self) -> None: logger.debug("Refreshing routing table") asyncio.ensure_future(self._refresh_table()) loop = asyncio.get_event_loop() self.refresh_loop = loop.call_later(10, self.refresh_table)
def connection_lost(self, exc): logger.debug("The server closed the connection")
def data_received(self, data: bytes): logger.debug(f"Data receive from server: {data[:20]!r}") self.handle_message(data)
def connection_made(self, transport): peername = transport.get_extra_info("peername") logger.debug(f"Connecting server {peername}") self.transport = transport self.transport.write(self.data)
def connection_lost(self, exc): logger.debug("The client closed the connection")
def connection_made(self, transport): peername = transport.get_extra_info("peername") logger.debug(f"Connecting client {peername}") self.transport = transport