using System; using System.Collections.Concurrent; using System.Linq; namespace Sodao.FastSocket.SocketBase { /// /// socket connection collection /// public sealed class ConnectionCollection { #region Private Members /// /// key:ConnectionID /// private readonly ConcurrentDictionary _dic = new ConcurrentDictionary(); #endregion #region Public Methods /// /// add /// /// /// /// connection is null public bool Add(IConnection connection) { if (connection == null) throw new ArgumentNullException("connection"); return this._dic.TryAdd(connection.ConnectionID, connection); } /// /// remove connection by id. /// /// /// public bool Remove(long connectionID) { IConnection connection; return this._dic.TryRemove(connectionID, out connection); } /// /// get by connection id /// /// /// public IConnection Get(long connectionID) { IConnection connection; this._dic.TryGetValue(connectionID, out connection); return connection; } /// /// to array /// /// public IConnection[] ToArray() { return this._dic.ToArray().Select(c => c.Value).ToArray(); } /// /// count. /// /// public int Count() { return this._dic.Count; } /// /// 断开所有连接 /// public void DisconnectAll() { var connections = this.ToArray(); foreach (var conn in connections) conn.BeginDisconnect(); } #endregion } }