/// <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())); }
/// <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(); } }