Skip to content

Commit f50f845

Browse files
committed
feat(网络): 为RPC调用添加忽略错误码选项
在INetworkChannel接口和实现中新增isIgnoreErrorCode参数,用于控制是否忽略RPC调用的错误码。当设置为true时,不会抛出异常且会忽略错误码回调。
1 parent 34b1985 commit f50f845

File tree

4 files changed

+23
-13
lines changed

4 files changed

+23
-13
lines changed

Runtime/Network/Interface/INetworkChannel.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,9 @@ public interface INetworkChannel
235235
/// <summary>
236236
/// 向远程主机发送消息包
237237
/// </summary>
238-
/// <param name="messageObject"></param>
239-
/// <typeparam name="T">发送的消息类型</typeparam>
240-
/// <typeparam name="TResult">返回的消息类型</typeparam>
241-
Task<TResult> Call<TResult>(MessageObject messageObject) where TResult : MessageObject, IResponseMessage;
238+
/// <param name="messageObject">要发送的消息包。</param>
239+
/// <param name="isIgnoreErrorCode">是否忽略错误码,默认值为 false。如果为 true,则在调用时不会抛出异常。和RPC的错误码回调也会忽略错误码。</param>
240+
/// <typeparam name="TResult"></typeparam>
241+
Task<TResult> Call<TResult>(MessageObject messageObject, bool isIgnoreErrorCode = false) where TResult : MessageObject, IResponseMessage;
242242
}
243243
}

Runtime/Network/Network/NetworkManager.NetworkChannelBase.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -758,14 +758,15 @@ public virtual void Close(string reason, ushort code = 0)
758758
/// <summary>
759759
/// 向远程主机发送消息包
760760
/// </summary>
761-
/// <param name="messageObject"></param>
761+
/// <param name="messageObject">要发送的消息包。</param>
762+
/// <param name="isIgnoreErrorCode">是否忽略错误码,默认值为 false。如果为 true,则在调用时不会抛出异常。和RPC的错误码回调也会忽略错误码。</param>
762763
/// <typeparam name="TResult"></typeparam>
763764
[UnityEngine.Scripting.Preserve]
764-
public async Task<TResult> Call<TResult>(MessageObject messageObject) where TResult : MessageObject, IResponseMessage
765+
public async Task<TResult> Call<TResult>(MessageObject messageObject, bool isIgnoreErrorCode = false) where TResult : MessageObject, IResponseMessage
765766
{
766767
GameFrameworkGuard.NotNull(messageObject, nameof(messageObject));
767768
Send(messageObject);
768-
var result = await PRpcState.Call(messageObject);
769+
var result = await PRpcState.Call(messageObject, isIgnoreErrorCode);
769770
return result as TResult;
770771
}
771772

Runtime/Network/Network/NetworkManager.RpcState.RpcMessageData.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ internal sealed class RpcMessageData : IDisposable
2626
/// </summary>
2727
public long ElapseTime { get; private set; }
2828

29+
/// <summary>
30+
/// 是否忽略错误码
31+
/// </summary>
32+
public bool IsIgnoreErrorCode { get; private set; }
33+
2934
/// <summary>
3035
/// 请求消息
3136
/// </summary>
@@ -73,23 +78,26 @@ internal bool IncrementalElapseTime(long time)
7378
/// </summary>
7479
/// <param name="actorRequestMessage"></param>
7580
/// <param name="timeout"></param>
81+
/// <param name="isIgnoreErrorCode"></param>
7682
/// <returns></returns>
7783
[UnityEngine.Scripting.Preserve]
78-
internal static RpcMessageData Create(IRequestMessage actorRequestMessage, int timeout = 5000)
84+
internal static RpcMessageData Create(IRequestMessage actorRequestMessage, int timeout = 5000, bool isIgnoreErrorCode = false)
7985
{
80-
var defaultMessageActorObject = new RpcMessageData(actorRequestMessage, timeout);
86+
var defaultMessageActorObject = new RpcMessageData(actorRequestMessage, timeout, isIgnoreErrorCode);
8187
return defaultMessageActorObject;
8288
}
8389

84-
private RpcMessageData(IRequestMessage requestMessage, int timeout)
90+
private RpcMessageData(IRequestMessage requestMessage, int timeout, bool isIgnoreErrorCode)
8591
{
8692
CreatedTime = TimerHelper.UnixTimeMilliseconds();
8793
RequestMessage = requestMessage;
8894
Timeout = timeout;
95+
IsIgnoreErrorCode = isIgnoreErrorCode;
8996
UniqueId = ((MessageObject)requestMessage).UniqueId;
9097
m_Tcs = new TaskCompletionSource<IResponseMessage>();
9198
}
9299

100+
93101
private readonly TaskCompletionSource<IResponseMessage> m_Tcs;
94102

95103
public Task<IResponseMessage> Task

Runtime/Network/Network/NetworkManager.RpcState.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public bool TryReply(MessageObject message)
9797
var responseMessage = message as IResponseMessage;
9898
messageActorObject.Reply(responseMessage);
9999
_rpcEndHandler?.Invoke(this, message);
100-
if (responseMessage?.ErrorCode != 0)
100+
if (responseMessage?.ErrorCode != 0 && !messageActorObject.IsIgnoreErrorCode)
101101
{
102102
_rpcErrorCodeHandler?.Invoke(this, message);
103103
}
@@ -120,15 +120,16 @@ public bool TryReply(MessageObject message)
120120
/// 可能会引发超时异常。
121121
/// </summary>
122122
/// <param name="messageObject">要发送的消息对象,必须实现IRequestMessage接口。</param>
123+
/// <param name="isIgnoreErrorCode"></param>
123124
/// <returns>返回一个任务,该任务在收到响应时完成,并返回IResponseMessage。</returns>
124-
public Task<IResponseMessage> Call(MessageObject messageObject)
125+
public Task<IResponseMessage> Call(MessageObject messageObject, bool isIgnoreErrorCode)
125126
{
126127
if (_waitingReplyHandlingObjects.TryGetValue(messageObject.UniqueId, out var messageActorObject))
127128
{
128129
return messageActorObject.Task;
129130
}
130131

131-
var defaultMessageActorObject = RpcMessageData.Create(messageObject as IRequestMessage, _rpcTimeout);
132+
var defaultMessageActorObject = RpcMessageData.Create(messageObject as IRequestMessage, _rpcTimeout, isIgnoreErrorCode);
132133
_waitingReplyHandlingObjects.TryAdd(messageObject.UniqueId, defaultMessageActorObject);
133134
try
134135
{

0 commit comments

Comments
 (0)