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
}
}