Exemple #1
0
        /// <summary>
        /// 内部的删除一个Token,原因有:
        /// 1、函数返回了0,远端已经关闭了这个连接
        /// 2、长时间没有收到心跳包
        /// 3、deleteAllToken()
        /// </summary>
        /// <param name="id"></param>
        /// <param name="errorType">错误参数是TokenErrorType</param>
        internal void DeleteToken(int id, TokenErrorType errorType)
        {
            CloseToken(id, errorType);//先关闭
            lock (this._lockDict)
            {
                if (_dictToken.ContainsKey(id))
                {
                    _dictToken.Remove(id);

                    _isDictEqualArr = false;//标记当前字典和数组已经不一致了
                }
                else
                {
                    return;
                }
            }
            if (EventDeleteToken != null)//事件
            {
                try
                {
                    EventDeleteToken(id, errorType);
                }
                catch (Exception e)
                {
                    DxDebug.LogWarning("TokenManager.DeleteToken():执行事件EventDeleteToken异常!" + e.Message);
                }
            }

            DxDebug.LogConsole(String.Format("TokenManager.DeleteToken():关闭了一个客户端. 还有{0}个客户端,原因{1}", _dictToken.Count, errorType.ToString()));
        }
Exemple #2
0
        /// <summary>
        /// 关闭一个token,释放token的资源,但是不会从当前列表中删除这个token
        /// </summary>
        /// <param name="id">Token的id</param>
        /// <param name="type">错误原因</param>
        private void CloseToken(int id, TokenErrorType type)
        {
            Token token = GetToken(id);

            if (token != null)
            {
                token.Dispose();
            }
        }