def on_login(self, p, data): [_, cmd, ver1, ver2, game_id, channel_id, session_key] = data if not game_id or not session_key: return self.request_fail(cmd, ERR_DATA_BROKEN) if ver1 != VERSION_MAIN: return self.request_fail(cmd, ERR_VERSION_ERR) if game_id != CONFIG.game_id: return self.request_fail(cmd, ERR_SYSTEM_ERR) info = online_model.get_by_key(session_key) if not info or not info.session_key: return self.request_fail(cmd, ERR_DATA_BROKEN) ugame = user_model.get(info.uid) if not ugame: return self.request_fail(cmd, ERR_SYSTEM_ERR) from gateway import Gateway gw = Gateway.share() old_player = gw.get_player(info.uid) if old_player: # 玩家已在线,直接将旧的socket清掉,并更新游戏数据,注意此时不返回任何数据,直接通过socket发送 p.stop() old_player.send([SERVICE_LOGIN, CMD_LOGIN, ERR_RE_LOGIN]) old_player.close() old_player.stop() old_player.set_socket(p.sock, p.address) old_player.start() old_player.set_ugame(ugame) old_player.send(self.request_ok(cmd, self.make_user_structure(old_player))) else: p.set_ugame(ugame) gw.save_player(p) return self.request_ok(cmd, self.make_user_structure(p))
def main(): utils.log('started with pid %d' % (os.getpid()), log_file) model_base.keep_redis_connect() gw = Gateway.share() gw.set_ports(CONFIG.ports) # 设置端口 gw.set_game_id(CONFIG.game_id) # 服务类型 gw.insert_service(ServiceGame.share()) # 插入游戏服务 gw.insert_service(ServiceLogin.share()) # 插入登陆相关的服务 gw.insert_service(ServiceSystem.share()) # 插入系统相关的服务 gw.insert_service(ServiceControl.share()) # 插入控制服务 gw.start_service() # 启动服务
def before_session_end(self, *args): from gateway import Gateway gw = Gateway.share() gw.on_connection_end(self)
def on_line_received(self, message): print 'line received: ', message from gateway import Gateway gw = Gateway.share() gw.on_line_received(self, message)