public void OnUserLost(uint nsId)
        {
            this._userTokenListByNsId.Remove(nsId);

            GSToCS.UserOffLine sUserOffLineToCs = new GSToCS.UserOffLine();
            sUserOffLineToCs.Usernetid = ( int )nsId;
            byte[] data = sUserOffLineToCs.ToByteArray();
            GS.instance.TranMsgToSession(SessionType.ClientG2C, data, 0, data.Length, ( int )GSToCS.MsgID.EMsgToCsfromGsUserOffLine, 0, 0);
        }
        private ErrorCode OnMsgToCsfromGsUserOffLine(byte[] data, int offset, int size, int transID, int msgID, uint gcNetID)
        {
            GSToCS.UserOffLine sMsp = new GSToCS.UserOffLine();
            sMsp.MergeFrom(data, offset, size);

            CSGSInfo csgsInfo = CS.instance.GetGSInfoByNSID(this.id);
            CSUser   pUser    = CS.instance.userMgr.GetUser(csgsInfo, ( uint )sMsp.Usernetid);

            if (null != pUser)
            {
                //todo
                //if ( pUser.GetUserBattleInfoEx().GetBattleState() == eBattleState_Free )
                CS.instance.userMgr.RemoveUser(pUser);
                pUser.OnOffline();
            }
            return(ErrorCode.Success);
        }