aboutsummaryrefslogtreecommitdiffstats
path: root/src/py/center_server.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/py/center_server.py')
-rwxr-xr-x[-rw-r--r--]src/py/center_server.py126
1 files changed, 53 insertions, 73 deletions
diff --git a/src/py/center_server.py b/src/py/center_server.py
index f54a57c..1164b08 100644..100755
--- a/src/py/center_server.py
+++ b/src/py/center_server.py
@@ -18,19 +18,19 @@ from netio import SocketStream,SocketConnection
from tojauth import TOJAuth
class Worker:
- def __init__(self,main_stream,linkclass,linkid,idendesc,worker_info,center_linkid):
+ def __init__(self,main_stream,link,idendesc,worker_info,center_link):
self.main_stream = main_stream
- self.linkclass = linkclass
- self.linkid = linkid
+ self.link = link
self.idendesc = idendesc
self.sock_addr = (worker_info['sock_ip'],worker_info['sock_port'])
netio.send_pack(self.main_stream,bytes(json.dumps({
'idendesc':self.idendesc,
- 'center_linkid':center_linkid
+ 'worker_link':self.link,
+ 'center_link':center_link
}),'utf-8'))
- conn = SocketConnection(self.linkclass,self.linkid,self.main_stream,self.sock_addr)
+ conn = SocketConnection(self.link,self.main_stream,self.sock_addr)
conn.add_close_callback(lambda conn : self.close())
Proxy.instance.add_conn(conn)
@@ -38,10 +38,10 @@ class Worker:
pass
class BackendWorker(Worker):
- def __init__(self,main_stream,linkid,idendesc,worker_info,center_linkid):
+ def __init__(self,main_stream,link,idendesc,worker_info,center_link):
global center_serv
- super().__init__(main_stream,'backend',linkid,idendesc,worker_info,center_linkid)
+ super().__init__(main_stream,link,idendesc,worker_info,center_link)
self.ws_addr = (worker_info['ws_ip'],worker_info['ws_port'])
center_serv.add_backend_worker(self)
@@ -58,7 +58,7 @@ class CenterServer(tornado.tcpserver.TCPServer):
self._ioloop = tornado.ioloop.IOLoop.instance()
self._linkid_usemap = {}
- self._worker_linkidmap = {}
+ self._worker_linkmap = {}
self._backend_clientmap = {}
self._backend_workerlist = []
@@ -66,18 +66,15 @@ class CenterServer(tornado.tcpserver.TCPServer):
privkey = open('privkey.pem','r').read()
TOJAuth(pubkey,privkey)
- self._linkid = self._create_linkid()
+ self._link = self._create_link('center')
- self._idendesc = TOJAuth.instance.create_iden('center',self._linkid,1,TOJAuth.ROLETYPE_TOJ)
- Proxy('center',self._linkid,TOJAuth.instance,self._idendesc)
+ self._idendesc = TOJAuth.instance.create_iden(self._link,1,TOJAuth.ROLETYPE_TOJ)
+ Proxy(self._link,TOJAuth.instance,self._idendesc)
- imc_register_call('','lookup_linkid',self._lookup_linkid)
+ imc_register_call('','lookup_link',self._lookup_link)
imc_register_call('','create_iden',self._create_iden)
- imc_register_call('','add_client',self._add_client)
- imc_register_call('','del_client',self._del_client)
-
- imc_register_call('','test_dst',self._test_dst)
- imc_register_call('','test_dstb',self._test_dstb)
+ #imc_register_call('','add_client',self._add_client)
+ #imc_register_call('','del_client',self._del_client)
def handle_stream(self,stream,addr):
def _recv_worker_info(data):
@@ -85,9 +82,9 @@ class CenterServer(tornado.tcpserver.TCPServer):
linkclass = worker_info['linkclass']
if linkclass == 'backend':
- linkid = self._create_linkid()
- idendesc = TOJAuth.instance.create_iden('backend',linkid,1,TOJAuth.ROLETYPE_TOJ)
- BackendWorker(main_stream,linkid,idendesc,worker_info,self._linkid)
+ link = self._create_link('backend')
+ idendesc = TOJAuth.instance.create_iden(link,1,TOJAuth.ROLETYPE_TOJ)
+ BackendWorker(main_stream,link,idendesc,worker_info,self._link)
fd = stream.fileno()
self._ioloop.remove_handler(fd)
@@ -96,17 +93,17 @@ class CenterServer(tornado.tcpserver.TCPServer):
netio.recv_pack(main_stream,_recv_worker_info)
def add_backend_worker(self,backend):
- backend_linkid = backend.linkid
+ backend_link = backend.link
- self._worker_linkidmap[backend_linkid] = backend
- self._backend_clientmap[backend_linkid] = {}
+ self._worker_linkmap[backend_link] = backend
+ self._backend_clientmap[backend_link] = {}
self._backend_workerlist.append(backend)
def del_backend_worker(self,backend):
- backend_linkid = backend.linkid
+ backend_link = backend.link
- del self._worker_linkidmap[backend_linkid]
- del self._backend_clientmap[backend_linkid]
+ del self._worker_linkmap[backend_link]
+ del self._backend_clientmap[backend_link]
self._backend_workerlist.remove(backend)
def dispatch_client(self):
@@ -114,14 +111,14 @@ class CenterServer(tornado.tcpserver.TCPServer):
if size == 0:
return None
- linkid = self._create_linkid()
- idendesc = TOJAuth.instance.create_iden('client',linkid,2,TOJAuth.ROLETYPE_GUEST)
+ link = self._create_link()
+ idendesc = TOJAuth.instance.create_iden('client',link,2,TOJAuth.ROLETYPE_GUEST)
backend = self._backend_workerlist[random.randrange(size)]
ws_ip,ws_port = backend.ws_addr
- return (idendesc,backend.linkid,ws_ip,ws_port)
+ return (idendesc,backend.link,ws_ip,ws_port)
- def _create_linkid(self):
+ def _create_link(self,linkclass):
linkid = uuid.uuid1()
while linkid in self._linkid_usemap:
linkid = uuid.uuid1()
@@ -129,16 +126,14 @@ class CenterServer(tornado.tcpserver.TCPServer):
linkid = str(linkid)
self._linkid_usemap[linkid] = True
- linkid = str(len(self._linkid_usemap))
-
- return linkid
+ return ''.join(['/',linkclass,'/',str(len(self._linkid_usemap)),'/'])
@imc.async.caller
- def _lookup_linkid(self,linkid):
+ def _lookup_link(self,link):
try:
- worker = self._worker_linkidmap[linkid]
+ worker = self._worker_linkmap[link]
- #a = int(iden['linkid'])
+ #a = int(TOJAuth.get_current_iden()['linkid'])
#b = int(linkid)
#if b > a:
@@ -147,11 +142,11 @@ class CenterServer(tornado.tcpserver.TCPServer):
#else:
# worker = self._worker_linkidmap[str(a - 1)]
- if TOJAuth.get_current_iden()['linkclass'] != 'client':
+ linkclass = TOJAuth.get_current_iden()['link'].split('/',1)
+ if linkclass != 'client':
sock_ip,sock_port = worker.sock_addr
return {
- 'worker_linkclass':worker.linkclass,
- 'worker_linkid':worker.linkid,
+ 'worker_link':worker.link,
'sock_ip':sock_ip,
'sock_port':sock_port
}
@@ -161,47 +156,32 @@ class CenterServer(tornado.tcpserver.TCPServer):
@imc.async.caller
@TOJAuth.check_access(1,TOJAuth.ACCESS_EXECUTE)
- def _create_iden(self,linkclass,linkid,idenid,roletype,payload):
- return TOJAuth.instance.create_iden(linkclass,linkid,idenid,roletype,payload)
+ def _create_iden(self,link,idenid,roletype,payload):
+ return TOJAuth.instance.create_iden(link,idenid,roletype,payload)
- @imc.async.caller
- def _add_client(self,param):
- backend_linkid = iden['linkid']
- client_linkid = param['client_linkid']
+ #@imc.async.caller
+ #def _add_client(self,param):
+ # backend_linkid = iden['linkid']
+ # client_linkid = param['client_linkid']
- self._backend_clientmap[backend_linkid][client_linkid] = True
- conn = Proxy.instance.get_conn(backend_linkid)
- Proxy.instance.link_conn(client_linkid,conn)
+ # self._backend_clientmap[backend_linkid][client_linkid] = True
+ # conn = Proxy.instance.get_conn(backend_linkid)
+ # Proxy.instance.link_conn(client_linkid,conn)
- print(client_linkid);
+ # print(client_linkid);
- @imc.async.caller
- def _del_client(self,param):
- backend_linkid = iden['linkid']
- client_linkid = param
+ #@imc.async.caller
+ #def _del_client(self,param):
+ # backend_linkid = iden['linkid']
+ # client_linkid = param
- del self._backend_clientmap[backend_linkid][client_linkid]
- conn = Proxy.instance.get_conn(client_linkid)
- Proxy.instance.unlink_conn(client_linkid)
+ # del self._backend_clientmap[backend_linkid][client_linkid]
+ # conn = Proxy.instance.get_conn(client_linkid)
+ # Proxy.instance.unlink_conn(client_linkid)
- @imc.async.caller
- def _test_dst(self,param):
- linkidlist = []
- clientmaps = self._backend_clientmap.values()
- for clientmap in clientmaps:
- linkids = clientmap.keys()
- for linkid in linkids:
- linkidlist.append(linkid)
-
- return linkidlist
-
- @imc.async.caller
- def _test_dstb(self,param):
- return param + ' World'
-
class WebConnHandler(tornado.web.RequestHandler):
def set_default_headers(self):
self.set_header('Access-Control-Allow-Origin','*')
@@ -213,10 +193,10 @@ class WebConnHandler(tornado.web.RequestHandler):
if data == None:
self.write('Eno_backend')
else:
- client_idendesc,backend_linkid,ip,port = data
+ client_idendesc,backend_link,ip,port = data
self.write(json.dumps({
'client_idendesc':client_idendesc,
- 'backend_linkid':backend_linkid,
+ 'backend_link':backend_link,
'ip':ip,
'port':port
}))