schangxiang@126.com
2025-11-04 ca398287db3f5ea01f03aac4a85edb13b28100a6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Concurrent;
using System.Linq;
 
namespace Sodao.FastSocket.SocketBase
{
    /// <summary>
    /// socket connection collection
    /// </summary>
    public sealed class ConnectionCollection
    {
        #region Private Members
        /// <summary>
        /// key:ConnectionID
        /// </summary>
        private readonly ConcurrentDictionary<long, IConnection> _dic =
            new ConcurrentDictionary<long, IConnection>();
        #endregion
 
        #region Public Methods
        /// <summary>
        /// add
        /// </summary>
        /// <param name="connection"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">connection is null</exception>
        public bool Add(IConnection connection)
        {
            if (connection == null) throw new ArgumentNullException("connection");
            return this._dic.TryAdd(connection.ConnectionID, connection);
        }
        /// <summary>
        /// remove connection by id.
        /// </summary>
        /// <param name="connectionID"></param>
        /// <returns></returns>
        public bool Remove(long connectionID)
        {
            IConnection connection;
            return this._dic.TryRemove(connectionID, out connection);
        }
        /// <summary>
        /// get by connection id
        /// </summary>
        /// <param name="connectionID"></param>
        /// <returns></returns>
        public IConnection Get(long connectionID)
        {
            IConnection connection;
            this._dic.TryGetValue(connectionID, out connection);
            return connection;
        }
        /// <summary>
        /// to array
        /// </summary>
        /// <returns></returns>
        public IConnection[] ToArray()
        {
            return this._dic.ToArray().Select(c => c.Value).ToArray();
        }
        /// <summary>
        /// count.
        /// </summary>
        /// <returns></returns>
        public int Count()
        {
            return this._dic.Count;
        }
        /// <summary>
        /// 断开所有连接
        /// </summary>
        public void DisconnectAll()
        {
            var connections = this.ToArray();
            foreach (var conn in connections) conn.BeginDisconnect();
        }
        #endregion
    }
}