def createAcceptor(self): acceptor = Acceptor(self.port + 1, self.ips, self.ip, self.num) if not self.logging_switch: acceptor.logging(False) acceptor.log('starting') acceptor.listen() acceptor.log('exiting')
class Server(object): def __init__(self, addr, coder=None): self.loop = Loop() self.acceptor = Acceptor(addr, self.loop) self.coder = coder self.clients = {} self.acceptor.set_error_callback(self.fatal_error) self.acceptor.set_connect_callback(self.process_new) def start(self): self.acceptor.listen() self.loop.loop() def fatal_error(self, msg): print msg self.quit() def quit(self): for fd in self.clients.keys(): ch = self.clients.pop(fd) ch.close() self.loop.quit() def process_new(self, sock): ch = Channel(Socket(sock), self.loop, self.coder) ch.set_read_callback(self.on_msg_in) ch.set_write_callback(self.on_msg_sent) ch.set_error_callback(self.on_error) ch.set_peer_closed(self.peer_closed) self.clients[ch.fd] = ch self.on_connect(ch) def on_connect(self, ch=None): print 'client {} connect.'.format(ch.peer_addr) pass def on_msg_in(self, msg, ch=None): pass def on_msg_sent(self, ch=None): pass def on_error(self, ch=None): print 'error' self.clients.pop(ch.fd) def peer_closed(self, ch=None): print 'client {} disconnect.'.format(ch.peer_addr) self.clients.pop(ch.fd)
if not accept_mode and not connect_mode: print(_helpText) sys.exit(0) Tunnel.set_tcp_fin_received_handler(tcptun.on_stream_fin_received) Tunnel.set_tcp_closed_handler(tcptun.on_stream_closed) Tunnel.set_udp_closed_handler(udptun.on_dgram_closed) if accept_mode: Tunnel.set_tcp_initial_handler(tcptun.on_server_side_initialized) Tunnel.set_udp_initial_handler(udptun.on_server_side_initialized) for addr, port, type_, arg in server_list: if accept_mode: acceptor = Acceptor('TUNNEL') acceptor.bind(addr, port) acceptor.listen() acceptor.set_on_accepted(server_side_on_accepted) acceptor.set_on_closed(acceptor_on_closed) else: via, to = arg if type_ == 'tcp': acceptor = Acceptor('TCP') acceptor.bind(addr, port) acceptor.listen() acceptor.set_on_accepted(tcptun.gen_on_client_side_accepted(via, to)) acceptor.set_on_closed(acceptor_on_closed) elif type_ == 'udp': receiver = Dgram() receiver.bind(addr, port) receiver.set_on_received(udptun.gen_on_client_side_received(via, to)) receiver.set_on_closed(acceptor_on_closed)