/// <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);
            }
        }
Esempio n. 6
0
        /// <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);
     }
 }