/// <summary> /// 发送 /// </summary> private void SendTrapMsg() { if (m_need_send && m_session_conn_idx > 0) { //加入队列 CheckItem item = new CheckItem(); item.check_delay_time = MathUtils.RandRange(SHC_MIN_TIME, SHC_MAX_TIME); item.sh_check_sn = MathUtils.RandRange(0, int.MaxValue); item.check_send_time = Time.time; m_send_checks.Add(item); //发给客户端 gs2c.SpeedCheck msg = PacketPools.Get(gs2c.msg.SPEED_CHECK) as gs2c.SpeedCheck; msg.delay_time = item.check_delay_time; msg.check_sn = item.sh_check_sn; ClientSession session = ClientSessionManager.Instance.GetSession(m_session_conn_idx); if (session != null) { session.Send(msg); } m_need_send = false; ++m_total_times; } }
/// <summary> /// ping网络 /// </summary> private void OnPingNet(ClientSession session, PacketBase packet) { c2gs.PingNet msg = packet as c2gs.PingNet; long offset_time = Time.time - msg.tick; Log.Debug("收到第:" + msg.packet_id + " 时间:" + Time.time + " 延迟:" + offset_time); gs2c.PingNet rep_msg = PacketPools.Get(gs2c.msg.PING_NET) as gs2c.PingNet; rep_msg.packet_id = msg.packet_id; rep_msg.tick = msg.tick; rep_msg.flags = msg.flags; session.Send(rep_msg); }
/// <summary> /// 创建角色 /// </summary> private void OnCreateCharacter(PacketBase packet) { ss2gs.CreateCharacter msg = packet as ss2gs.CreateCharacter; ClientSession session = ClientSessionManager.Instance.GetSessionByAccount(msg.account_idx); if (session == null) { return; } gs2c.CreateCharacter rep_msg = PacketPools.Get(gs2c.msg.CREATE_CHARACTER) as gs2c.CreateCharacter; rep_msg.result = msg.result; rep_msg.char_idx = msg.char_idx; session.Send(rep_msg); }
/// <summary> /// 进入游戏 /// </summary> private void OnEnterGame(PacketBase packet) { ss2gs.EnterGame msg = packet as ss2gs.EnterGame; //确定session是否还存在 ClientSession session = ClientSessionManager.Instance.GetSession(msg.client_uid.conn_idx); if (session != null) { session.session_status = eSessionStatus.IN_GAMING; gs2c.EnterGame rep_msg = PacketPools.Get(gs2c.msg.ENTER_GAME) as gs2c.EnterGame; rep_msg.char_idx = msg.char_idx; session.Send(rep_msg); } }
/// <summary> /// 加密 /// </summary> private void OnClientEncrypt(long conn_idx, PacketBase packet) { if (!ClientSessionManager.Instance.HasAcceptSession(conn_idx)) { return; } c2gs.EncryptInfo msg = packet as c2gs.EncryptInfo; //版本验证 byte main_version; byte sub_version; ushort revision_version; GlobalID.SplitVersion(msg.version, out main_version, out sub_version, out revision_version); if (main_version != GlobalID.VERSION_MAIN) { ClientSessionManager.Instance.KickoutSession(conn_idx); return; } GlobalID.SetClientVersion(msg.version); //收到正常的握手协议后,才加入正式session列表 ClientSession session = ClientSessionManager.Instance.AddSession(conn_idx); if (session != null) { ClientSessionManager.Instance.CleanupAcceptSession(conn_idx); session.session_status = eSessionStatus.CREATED; gs2c.EncryptInfo rep_msg = PacketPools.Get(gs2c.msg.ENCRYPT) as gs2c.EncryptInfo; rep_msg.key = PacketEncrypt.Encrypt_Key; rep_msg.flags = 0; session.Send(rep_msg); } else { ClientSessionManager.Instance.KickoutSession(conn_idx); } }
/// <summary> /// 登录 /// </summary> private void OnClientLogin(PacketBase packet) { ws2gs.ClientLogin msg = packet as ws2gs.ClientLogin; ///1.查询完成,确认这个过程中是否已经退出 ClientSession session = ClientSessionManager.Instance.GetSession(msg.client_uid.conn_idx); if (session == null) { return; } ///2.修改状态 if (msg.login_result == eLoginResult.E_SUCCESS) { //更新数据 session.account_idx = msg.account_idx; session.spid = msg.spid; session.ss_uid = msg.ss_uid; session.session_status = eSessionStatus.ALREADY_LOGIN; ClientSessionManager.Instance.AddSessionByAccount(session.account_idx, session.conn_idx); } else { session.session_status = eSessionStatus.LOGIN_FAILED; //是否超过验证次数:是的话直接踢号 session.login_error_count += 1; if (session.login_error_count >= 5) { ClientSessionManager.Instance.KickoutSession(session.conn_idx); return; } } ///3.告诉客户端 gs2c.ClientLogin rep_msg = PacketPools.Get(gs2c.msg.CLIENT_LOGIN) as gs2c.ClientLogin; rep_msg.login_result = msg.login_result; session.Send(rep_msg); }
/// <summary> /// 压力测试 /// </summary> private void OnClientRobotTest(ClientSession session, PacketBase packet) { c2gs.RobotTest msg = packet as c2gs.RobotTest; if (Utils.HasFlag(msg.flags, (uint)eServerType.WORLD)) { gs2ws.RobotTest rep_msg = PacketPools.Get(gs2ws.msg.ROBOT_TEST) as gs2ws.RobotTest; rep_msg.client_uid = session.client_uid; rep_msg.length = msg.length; ServerNetManager.Instance.Send2WS(rep_msg); } if (Utils.HasFlag(msg.flags, (uint)eServerType.SERVER)) { gs2ss.RobotTest rep_msg = PacketPools.Get(gs2ss.msg.ROBOT_TEST) as gs2ss.RobotTest; rep_msg.client_uid = session.client_uid; rep_msg.length = msg.length; session.Send2SS(rep_msg); } if (msg.flags == 0 || Utils.HasFlag(msg.flags, (uint)eServerType.GATE)) { gs2c.RobotTest rep_msg = PacketPools.Get(gs2c.msg.ROBOT_TEST) as gs2c.RobotTest; rep_msg.length = msg.length; session.Send(rep_msg); } }