def __init__(self,ip,port,CAssignClass,io_loop=None,ssl_options=None, **kwargs): self.ip = ip self.port = port #上一个客户端连接ID self._lastClientid = 0 self._idAllocor = IDAllocor() super(CServer, self).__init__( io_loop=io_loop, ssl_options=ssl_options,**kwargs) if io_loop: self.ioloop = io_loop else: self.ioloop = IOLoop.instance() self.cpool = cpool.CConnectionPool.getInstance() self.cpool.connect(CAssignClass.getGSArray()) run()
class CServer(TCPServer): def __init__(self,ip,port,CAssignClass,io_loop=None,ssl_options=None, **kwargs): self.ip = ip self.port = port #上一个客户端连接ID self._lastClientid = 0 self._idAllocor = IDAllocor() super(CServer, self).__init__( io_loop=io_loop, ssl_options=ssl_options,**kwargs) if io_loop: self.ioloop = io_loop else: self.ioloop = IOLoop.instance() self.cpool = cpool.CConnectionPool.getInstance() self.cpool.connect(CAssignClass.getGSArray()) run() def handle_stream(self, stream, address): #客户端连接了 #todo:加入 C -> GS DICT clientid = self._idAllocor.alloc() ConnectionBase(stream, clientid, address, self._receiveData_from_client,self._clientCconnect,self._clientClose) def _receiveData_from_client(self,connection,body): '''接受到客户(玩家)的数据包''' #转发到GS服务器端 self.cpool.send(connection.clientid,body) def _clientClose(self,connection): '''客户端(玩家)断开连接''' self.cpool.clear(connection.clientid) def run(): global server if not com._cc.ASSIGN_PROCESS_MODE: processFuns.assignGS_2(0) #processFuns.regGS(com._cc.CurrIp,com._cc.CurrPort) #监听game端口 print 'map server started,listen on %s' % \ (self.port) server = TcpServer(transport) if os.name == 'nt': server.listen(com._cc.CurrPort) else: import tornado.netutil import tornado.process sockets = tornado.netutil.bind_sockets(self.port) tornado.process.fork_processes(0) server.add_sockets(sockets) #server.io_loop.add_timeout(time.time() + com._cc.CLEAR_INTERVAL_TIME ,clearOnline) self.ioloop.start() def send_message(message): stream.write((message + '\n').encode('utf-8'))