Repository navigation
Expand file tree
/
Copy pathSocketCommunication.py
More file actions
48 lines (35 loc) · 1.59 KB
/
Copy pathSocketCommunication.py
File metadata and controls
48 lines (35 loc) · 1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from BlockchainUtils import BlockChainUtils
from SocketConnector import SocketConnector
from p2pnetwork.node import Node
from PeerDiscoveryHandler import PeerDiscoveryHandler
import json
from Transaction import Transaction
class SocketCommunication(Node):
def __init__(self, ip, port):
super(SocketCommunication, self).__init__(ip, port, None)
self.peers = []
self.peerDiscoveryHandler = PeerDiscoveryHandler(self)
self.socketConnector = SocketConnector(ip, port)
def connectToFirstNode(self):
if self.socketConnector.port != 10001:
self.connect_with_node('localhost', 10001)
def startSocketCommunication(self, node):
self.node = node
self.start()
self.peerDiscoveryHandler.start()
self.connectToFirstNode()
def inbound_node_connected(self, connected_node):
self.peerDiscoveryHandler.handshake(connected_node)
def outbound_node_connected(self, connected_node):
self.peerDiscoveryHandler.handshake(connected_node)
def node_message(self, connected_node, message):
message = BlockChainUtils.decode(json.dumps(message))
if message.messageType == 'DISCOVERY':
self.peerDiscoveryHandler.handleMessage(message)
elif message.messageType == 'TRANSACTION':
transaction = message.data
self.node.handleTransactions(transaction)
def send(self, receiver, message):
self.send_to_node(receiver, message)
def broadcast(self, message):
self.send_to_nodes(message)