/
Client.py
90 lines (68 loc) · 2.63 KB
/
Client.py
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
"""
Created on Wed Dec 16 17:08:53 2015
@author: Ying
"""
import xmlrpclib
from NodeInfo import NodeInfo
from threading import Thread
class Client(Thread):
def __init__(self,ip,port):
nodeInfo = NodeInfo(port,ip)
nodeInfo.setRunning(True)
nodeInfo.setNodeAddr(ip,port)
nodeInfo.addActiveNode(ip + ":" + str(port))
def stopClient(self):
nodeInfo = NodeInfo()
nodeInfo.setRunning(False)
def joinRPC(self,url):
nodeInfo = NodeInfo()
proxy = xmlrpclib.ServerProxy(url)
#multicall = xmlrpclib.MultiCall(proxy)
params = nodeInfo.getNodeAddrStr()
proxy.add(params)
def signOffRPC(self,url):
nodeInfo = NodeInfo()
proxy = xmlrpclib.ServerProxy(url)
#multicall = xmlrpclib.MultiCall(proxy)
params = nodeInfo.getNodeAddrStr()
proxy.delete(params)
def join(self):
nodeInfo = NodeInfo()
if (nodeInfo.isOnline==False):
ip = raw_input('Input IP to connect to:')
port = raw_input('Input port to connect to:')
nodeInfo.setParentNodeAddr(ip+":"+str(port))
proxy = xmlrpclib.ServerProxy("http://"+nodeInfo.parentNodeAddr+"/")
activeNodes = proxy.getActiveNodes()
print activeNodes
if(activeNodes != []):
for node in activeNodes:
nodeInfo.addActiveNode(node)
nodeInfo.setOnline(True)
for nodeAddr in nodeInfo.getActiveNodes():
if nodeAddr != nodeInfo.getNodeAddrStr():
self.joinRPC("http://" + nodeAddr + "/")
print "successfully joined"
return 0
else:
print "Something is wrong, node may already exist"
return -1
def signOff(self):
nodeInfo = NodeInfo()
currentNodeAddr = nodeInfo.getNodeAddrStr()
if nodeInfo.isOnline:
nodeInfo.setOnline(False)
print nodeInfo.getActiveNodes()
for nodeAddr in nodeInfo.getActiveNodes():
if nodeAddr != currentNodeAddr:
self.signOffRPC("http://"+nodeAddr+"/")
nodeInfo.clearActiveNodes()
print "successfully signed off"
def run(self):
class Runnable(Thread):
def run(self):
nodeInfo = NodeInfo()
#while nodeInfo.isRunning():
#if nodeInfo.isOnline():
#pass
Runnable().start()