Skip to content

Commit 5c9fd9a

Browse files
committed
feat: change request ID to be uint
1 parent 319a105 commit 5c9fd9a

4 files changed

Lines changed: 31 additions & 12 deletions

File tree

SimpleNetworkManager.NET/Messages/BaseRequestMessage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Insthync.SimpleNetworkManager.NET.Messages
77
/// Base class for all request messages that expect a response.
88
/// Provides correlation ID for matching requests with responses.
99
/// Reserved keys:
10-
/// 0 - RequestId (Guid)
10+
/// 0 - RequestId (uint)
1111
/// </summary>
1212
public abstract class BaseRequestMessage : BaseMessage
1313
{
@@ -16,6 +16,6 @@ public abstract class BaseRequestMessage : BaseMessage
1616
/// Generated automatically when the request is created.
1717
/// </summary>
1818
[Key(0)]
19-
public Guid RequestId { get; internal set; }
19+
public uint RequestId { get; set; }
2020
}
2121
}

SimpleNetworkManager.NET/Messages/BaseRequestMessageHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ public virtual BaseMessage GetResponseMessageInstance()
1919

2020
protected override sealed async UniTask HandleAsync(BaseClientConnection clientConnection, TRequest data)
2121
{
22-
Guid requestId = data.RequestId;
22+
uint requestId = data.RequestId;
2323
var response = await HandleRequestAsync(clientConnection, data);
2424
response.RequestId = requestId;
25-
await clientConnection.SendMessageAsync(data);
25+
await clientConnection.SendMessageAsync(response);
2626
}
2727

2828
protected abstract UniTask<TResponse> HandleRequestAsync(BaseClientConnection clientConnection, TRequest request);

SimpleNetworkManager.NET/Messages/BaseResponseMessage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Insthync.SimpleNetworkManager.NET.Messages
77
/// Base class for all response messages that correspond to a request.
88
/// Provides correlation ID for matching responses with requests.
99
/// Reserved keys:
10-
/// 0 - RequestId (Guid)
10+
/// 0 - RequestId (uint)
1111
/// 1 - Success (bool)
1212
/// 2 - ErrorMessage (string)
1313
/// </summary>
@@ -17,7 +17,7 @@ public abstract class BaseResponseMessage : BaseMessage
1717
/// Correlation ID that matches the original request's RequestId
1818
/// </summary>
1919
[Key(0)]
20-
public Guid RequestId { get; internal set; }
20+
public uint RequestId { get; set; }
2121

2222
/// <summary>
2323
/// Indicates if the request was successful

SimpleNetworkManager.NET/Network/BaseClientConnection.cs

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)