def onFailure(self, callback = None): peer = Peer() peer.host = self.addrFrom Peers.removePeer(peer) callback( 'error: Invalid ping message' )
def onSuccess(self, callback=None): if len(self.addrList) > 0: peers = [] for addr in self.addrList: peer = Peer() peer.host = addr peers.append(peer) Peers.addPeers(peers)
def send(self): payload = Network.sendData(self.addrRecv, self.serialize()) message = MessageFactory.getInstance(MessageType.ADDR) if message.deserialize(payload): message.onSuccess() else: peer = Peer() peer.host = self.addrRecv Peers.removePeer(peer) message.onFailure(self.sendFailure)
def send(self): payload = Network.sendData(self.addrRecv, self.serialize()) isValid = True message = MessageFactory.getInstance(MessageType.PONG) if message.deserialize(payload): if message.nonce == self.nonce: message.onSuccess() else: isValid = False else: isValid = False if isValid == False: peer = Peer() peer.host = self.addrRecv Peers.removePeer(peer) message.onFailure(self.sendFailure)
def onSuccess(self, callback=None): message = MessageFactory.getInstance(MessageType.ADDR) peers = Peers.getPeers() message.count = len(peers) for peer in peers.copy(): message.addrList.append(peer.host) callback(message.serialize())
def onSuccess(self, callback=None): peer = Peers.getPeerByHost(self.addrFrom) syncVersion = False if peer == None: peer = Peer() else: syncVersion = peer.lastVersionNonce == None if peer.lastVersionNonce == None or peer.lastVersionNonce == self.nonce: peer.host = self.addrFrom peer.version = self.version peer.lastVersionNonce = self.nonce peer.chainHeadBlockHash = self.chainHeadBlockHash Peers.addPeer(peer) if syncVersion: Sync.synchronizeMessage(MessageType.VERSION, peer.host) message = MessageFactory.getInstance(MessageType.VERACK) callback(message.serialize())
def send(self): peer = Peers.getPeerByHost(self.addrRecv) self.blockHashes.append(peer.chainHeadBlockHash) payload = Network.sendData(self.addrRecv, self.serialize()) message = MessageFactory.getInstance(MessageType.INV) message.addrFrom = self.addrRecv if message.deserialize(payload): message.onSuccess() else: message.onFailure(self.sendFailure)
def send(self): peer = Peers.getPeerByHost(self.addrRecv) if peer.lastVersionNonce == None: peer.lastVersionNonce = self.nonce Peers.addPeer(peer) else: self.nonce = peer.lastVersionNonce chainHeadBlock = Chain.getChain().getChainHeadBlock() self.chainHeadBlockHash = chainHeadBlock.hash() payload = Network.sendData(self.addrRecv, self.serialize()) message = MessageFactory.getInstance(MessageType.VERACK) message.addrFrom = self.addrRecv if message.deserialize(payload): message.onSuccess() else: peer = Peer() peer.host = self.addrRecv Peers.removePeer(peer) message.onFailure(self.sendFailure)
def onSuccess(self, callback=None): peer = Peers.getPeerByHost(self.addrFrom) peer.lastVersionNonce = None Peers.addPeer(peer)
def broadcastMessage(message): peers = Peers.getPeers() if len(peers) > 0: for peer in peers.copy(): processMessage(message, peer.host)