def connect_endpoint(self, remote_name): t = 0 while t < 999999: if self.track_dict.get(remote_name): break time.sleep(1) t += 1 if t > 30: raise Exception(f'{remote_name} not registed') """connect to another endpoint""" acc = 0.5 #TODO: implement sleep "growth" print(self.track_dict) connected = False synned = False remote_offset = None my_pub_offset = None syn_time=0 ack_time=0 self.dat = PunchObject("") for count in range(550): print("versuch %s" % count) r,w,x = select([self.s], [self.s], [], 0) if w: r_addr = self.track_dict.get(remote_name) r_addr = r_addr[0], r_addr[1] print("addr update",r_addr) if connected: print("send msg to", r_addr) msg = self.dat.compose('MSG', "%s offsetted msg: %s has public offset: %s" % (count, self.session_name, my_pub_offset)) self.send(msg, r_addr) print('send :', msg) if not self.dat.SYN and not self.dat.ACK: msg = self.dat.compose('SYN', "%s %s,%s"%(count, self.session_name, 0) )#SYN mit offset self.send(msg, r_addr) print('No:send :', msg) syn_time = time.time() if self.dat.SYN: msg = self.dat.compose('ACK',"%s %s,%s" % \ (count, self.session_name, 0) ) self.send(msg, r_addr) print('SYNed:send :', msg) if r: data,addr=self.recv() print("data: ", data) self.dat = PunchObject(data) if self.dat.MSG: num_nomsg = 0 print(str(self.dat), ':', addr) elif self.dat.SYN: print("recvd SYN ", str(self.dat), ':', addr) synned = True elif self.dat.ACK: ack_time = time.time()-syn_time print("recvd ACK ", str(self.dat), ack_time, ':', addr) if synned: connected = True print("Connected.", remote_name, ':', addr) self.p2plist[remote_name] = addr elif self.dat.JSON: self.track_dict = json.loads(data[1:]) else: num_nomsg += 1 time.sleep(acc)
def __init__(self, port): self.track_dict['this'] = ['localhost', port, 0] self.p = PunchObject("") self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.s.bind(('0.0.0.0', self.track_dict['this'][1]))
def send_request(self, offset): self.send("%s,%d" % (self.session_name, offset) , self.env.server_addr()) data,addr=self.recv() self.dat = PunchObject(data) if self.dat.JSON: self.track_dict = json.loads(data[1:])