@@ -15,8 +15,11 @@ public abstract class BaseClientConnection : IDisposable
1515 private static uint s_connectionIdCounter = 0 ;
1616 private static ConcurrentQueue < uint > s_unassignedConnectionIds = new ConcurrentQueue < uint > ( ) ;
1717
18+ private static uint s_requestIdCounter = 0 ;
19+ private static ConcurrentQueue < uint > s_unassignedRequestIds = new ConcurrentQueue < uint > ( ) ;
20+
1821 protected readonly ILogger < BaseClientConnection > _logger ;
19- protected readonly ConcurrentDictionary < Guid , BaseResponseMessage > _pendingResponses = new ConcurrentDictionary < Guid , BaseResponseMessage > ( ) ;
22+ protected readonly ConcurrentDictionary < uint , BaseResponseMessage > _pendingResponses ;
2023 protected bool _disposed ;
2124
2225 public uint ConnectionId { get ; protected set ; }
@@ -31,21 +34,35 @@ public abstract class BaseClientConnection : IDisposable
3134 public BaseClientConnection ( ILogger < BaseClientConnection > logger )
3235 {
3336 _logger = logger ?? throw new ArgumentNullException ( nameof ( logger ) ) ;
37+ _pendingResponses = new ConcurrentDictionary < uint , BaseResponseMessage > ( ) ;
38+ }
39+
40+ private static uint GetNewConnectionId ( )
41+ {
42+ if ( ! s_unassignedConnectionIds . TryDequeue ( out uint connectionId ) )
43+ connectionId = Interlocked . Increment ( ref s_connectionIdCounter ) ;
44+ return connectionId ;
45+ }
46+
47+ private static uint GetNewRequestId ( )
48+ {
49+ if ( ! s_unassignedRequestIds . TryDequeue ( out uint requestId ) )
50+ requestId = Interlocked . Increment ( ref s_requestIdCounter ) ;
51+ return requestId ;
3452 }
3553
3654 public void AssignConnectionId ( )
3755 {
3856 if ( ConnectionId > 0 )
3957 return ;
40- if ( ! s_unassignedConnectionIds . TryDequeue ( out uint connectionId ) )
41- connectionId = Interlocked . Increment ( ref s_connectionIdCounter ) ;
42- ConnectionId = connectionId ;
58+ ConnectionId = GetNewConnectionId ( ) ;
4359 }
4460
4561 public void UnassignConnectionId ( )
4662 {
4763 if ( ConnectionId > 0 )
4864 s_unassignedConnectionIds . Enqueue ( ConnectionId ) ;
65+ ConnectionId = 0 ;
4966 }
5067
5168 public void OnMessageReceived ( byte [ ] message )
@@ -76,7 +93,7 @@ public void OnDisconnected()
7693 internal async UniTask < TResponse > SendRequestAsync < TResponse > ( BaseRequestMessage request )
7794 where TResponse : BaseResponseMessage
7895 {
79- Guid requestId = Guid . NewGuid ( ) ;
96+ uint requestId = GetNewRequestId ( ) ;
8097 request . RequestId = requestId ;
8198 await SendMessageAsync ( request ) ;
8299
@@ -95,6 +112,7 @@ internal async UniTask<TResponse> SendRequestAsync<TResponse>(BaseRequestMessage
95112 timeoutCountDown -= 100 ;
96113 }
97114 while ( ! _pendingResponses . TryRemove ( requestId , out response ) ) ;
115+ s_unassignedRequestIds . Enqueue ( requestId ) ;
98116
99117 if ( response == null )
100118 {
@@ -113,7 +131,8 @@ internal void Responded(BaseResponseMessage? response)
113131 {
114132 if ( response == null )
115133 return ;
116- _pendingResponses . TryAdd ( response . RequestId , response ) ;
134+ uint requestId = response . RequestId ;
135+ _pendingResponses . TryAdd ( requestId , response ) ;
117136 }
118137
119138 /// <summary>
0 commit comments