/// <summary>
 /// 广播转发的消息
 /// </summary>
 /// <param name="header"></param>
 /// <param name="by"></param>
 /// <param name="status"></param>
 public void BroadcastProxy(ushort header, ByteArray by, eSessionStatus status)
 {
     foreach (var obj in m_sessions)
     {
         ClientSession session = obj.Value;
         if (session.session_status == status)
         {
             ForClientNetManager.Instance.SendProxy(session.conn_idx, header, by);
         }
     }
 }
 /// <summary>
 /// 广播消息
 /// </summary>
 /// <param name="packet"></param>
 public void Broadcast(PacketBase packet, eSessionStatus status)
 {
     foreach (var obj in m_sessions)
     {
         ClientSession session = obj.Value;
         if (session.session_status == status)
         {
             ForClientNetManager.Instance.Send(session.conn_idx, packet);
         }
     }
 }
        /// <summary>
        /// 主动登出,或异常退出
        /// </summary>
        public void     Logout()
        {
            if (m_session_status == eSessionStatus.LOGOUTING)
            {
                return;
            }
            m_session_status = eSessionStatus.LOGOUTING;

            //发送到ss,登出
            if (m_account_idx > 0)
            {
                gs2ss.LogoutAccount ss_msg = PacketPools.Get(gs2ss.msg.LOGOUT_ACCOUNT) as gs2ss.LogoutAccount;
                ss_msg.account_idx = m_account_idx;
                this.Send2SS(ss_msg);
            }
        }
        /// <summary>
        /// 被踢出
        /// </summary>
        public void Kickout()
        {
            if (m_session_status == eSessionStatus.LOGOUTING)
            {
                return;
            }
            m_session_status = eSessionStatus.LOGOUTING;

            //已经是正式连接的客户端,需要做后续清理工作
            if (m_account_idx > 0)
            {//说明已经登录到ss,需要清理
                gs2ss.KickoutAccount msg = PacketPools.Get(gs2ss.msg.KICK_ACCOUNT) as gs2ss.KickoutAccount;
                msg.account_idx = m_account_idx;
                this.Send2SS(msg);
            }
        }
 /// <summary>
 /// 主动登出,或异常退出
 /// </summary>
 public void     Logout()
 {
     if (m_session_status == eSessionStatus.LOGOUTING)
     {
         return;
     }
     m_session_status = eSessionStatus.LOGOUTING;
     Log.Debug("登出数量:" + ++loginout_count);
     //发送到ss,登出
     if (m_account_idx > 0)
     {
         gs2ss.LogoutAccount ss_msg = PacketPools.Get(gs2ss.msg.LOGOUT_ACCOUNT) as gs2ss.LogoutAccount;
         ss_msg.client_uid  = m_client_uid;
         ss_msg.account_idx = m_account_idx;
         this.Send2SS(ss_msg);
     }
 }
        public void Setup(long conn_idx)
        {
            m_conn_idx    = conn_idx;
            m_account_idx = 0;
            m_spid        = 0;
            m_fs_uid      = 0;
            m_ss_uid      = 0;
            m_db_id.Reset();
            m_client_uid.conn_idx = conn_idx;
            m_client_uid.srv_uid  = ServerNetManager.Instance.srv_uid;

            m_conn_time         = Time.timeSinceStartup;
            m_login_error_count = 0;
            m_last_packet_idx   = 0;

            m_cooldown_verify.Reset();
            m_speed_checker.Reset(m_conn_idx);
            m_session_status = eSessionStatus.CREATED;
        }