YuntechNet/AtomicP2P

View on GitHub
atomic_p2p/mixin/topology/lan/handler/ack_new_member.py

Summary

Maintainability
A
55 mins
Test Coverage
from .....communication import Handler, Packet
from .....peer.entity import PeerInfo


class AckNewMemberHandler(Handler):
    pkt_type = "peer-ack-new-memeber"

    def __init__(self, peer):
        super().__init__(pkt_type=type(self).pkt_type, peer=peer)

    def on_send_pkt(self, target):
        data = {
            "name": self.peer.server_info.name,
            "role": self.peer.server_info.role,
            "listen_port": int(self.peer.server_info.host[1]),
        }
        return Packet(
            dst=target,
            src=self.peer.server_info.host,
            program_hash=self.peer.program_hash,
            _type=type(self).pkt_type,
            _data=data,
        )

    def on_recv_pkt(self, src, pkt, conn):
        data = pkt.data
        name = data["name"]
        role = data["role"]
        listen_port = int(data["listen_port"])

        peer_info = PeerInfo(
            name=name, role=role, host=(src[0], listen_port), conn=conn
        )
        self.peer.add_peer_in_net(peer_info=peer_info)
        self.peer.logger.info("ACK new member join net: {}".format(peer_info))