import socket import threading from .worker.connector import Connector from .worker.cryptor import Cryptor from .worker.bearer import Bearer import config as cfg import json class Socket(): def __init__(self, socketPort): self.socketPort = socketPort t = threading.Thread(target=self.connection) t.start() print("socket is created and Listener is created",socketPort) def connection(self): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind(("localhost", self.socketPort)) s.listen() self.socket = s while True: conn, addr = self.socket.accept() print(conn, addr) u = threading.Thread(target=Connection,args=(conn, addr,self.socketPort+1)) # TODO socketprot dynamic u.start() class Connection(threading.Thread): def __init__(self,connection,address,oracleSocketPort): super(Connection,self).__init__(None, None, None, None) self.conn = connection self.addr = address self.history = [] self.type = None self.oracleSocketPort = oracleSocketPort t = threading.Thread(target=self.receive) t.start() # self.send("Connection") def toSEND(self,oracle, data): j = json.dumps(x) l = LenFunc - len(str(len(j))) oracle.send("0000"[0:l]+str(len(j))+j) def send(self,Message): Message=bytes(Message,'utf-8') self.conn.sendall(Message) # self.history.append(("send",Message)) def receive(self): while True: len = self.conn.recv(cfg.LenFunc) if not len: break data = self.conn.recv(int(len)) if not self.type: d = json.loads(data) if d["type"] == "user": if d["oracle"] == 0: self.type = Connector(self) elif d["oracle"] == 1: self.type = Cryptor(self) elif d["oracle"] == 2: self.type = Bearer(self) else: print("data",data) self.type.parser(data.decode("utf-8"),self.conn) # self.history.append(("receive",data))