Skip to content

Commit 352481f

Browse files
committed
[增加]1. 增加RPC 超时时间的外部设置
1 parent 6a224a5 commit 352481f

File tree

8 files changed

+41
-13
lines changed

8 files changed

+41
-13
lines changed

Editor/Inspector/NetworkComponentInspector.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ internal sealed class NetworkComponentInspector : ComponentTypeComponentInspecto
1818
{
1919
private SerializedProperty m_IgnoredSendNetworkIds;
2020
private SerializedProperty m_IgnoredReceiveNetworkIds;
21+
private SerializedProperty m_rpcTimeout;
2122

2223
private readonly GUIContent m_IgnoredSendNetworkIdsGUIContent = new GUIContent("忽略发送消息ID的日志打印");
2324
private readonly GUIContent m_IgnoredReceiveNetworkIdsGUIContent = new GUIContent("忽略接收消息ID的日志打印");
25+
private readonly GUIContent m_rpcTimeoutGUIContent = new GUIContent("RPC超时时间,单位:毫秒");
2426

2527
public override void OnInspectorGUI()
2628
{
@@ -29,6 +31,7 @@ public override void OnInspectorGUI()
2931
EditorGUI.BeginDisabledGroup(EditorApplication.isPlayingOrWillChangePlaymode);
3032
{
3133
GUI.enabled = !EditorApplication.isPlaying;
34+
EditorGUILayout.IntSlider(m_rpcTimeout, 3000, 50000, m_rpcTimeoutGUIContent);
3235
EditorGUILayout.PropertyField(m_IgnoredSendNetworkIds, m_IgnoredSendNetworkIdsGUIContent);
3336
EditorGUILayout.PropertyField(m_IgnoredReceiveNetworkIds, m_IgnoredReceiveNetworkIdsGUIContent);
3437
GUI.enabled = false;
@@ -93,6 +96,7 @@ protected override void Enable()
9396
base.Enable();
9497
m_IgnoredSendNetworkIds = serializedObject.FindProperty("m_IgnoredSendNetworkIds");
9598
m_IgnoredReceiveNetworkIds = serializedObject.FindProperty("m_IgnoredReceiveNetworkIds");
99+
m_rpcTimeout = serializedObject.FindProperty("m_rpcTimeout");
96100
}
97101
}
98102
}

Runtime/Network/Interface/INetworkManager.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,9 @@ public interface INetworkManager
7676
/// </summary>
7777
/// <param name="channelName">网络频道名称。</param>
7878
/// <param name="networkChannelHelper">网络频道辅助器。</param>
79+
/// <param name="rpcTimeout">RPC超时时间</param>
7980
/// <returns>要创建的网络频道。</returns>
80-
INetworkChannel CreateNetworkChannel(string channelName, INetworkChannelHelper networkChannelHelper);
81+
INetworkChannel CreateNetworkChannel(string channelName, INetworkChannelHelper networkChannelHelper, int rpcTimeout);
8182

8283
/// <summary>
8384
/// 销毁网络频道。

Runtime/Network/Network/NetworkManager.NetworkChannelBase.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,9 @@ protected bool PActive
9191
/// </summary>
9292
/// <param name="name">网络频道名称。</param>
9393
/// <param name="networkChannelHelper">网络频道辅助器。</param>
94+
/// <param name="rpcTimeout">RPC超时时间</param>
9495
[UnityEngine.Scripting.Preserve]
95-
public NetworkChannelBase(string name, INetworkChannelHelper networkChannelHelper)
96+
public NetworkChannelBase(string name, INetworkChannelHelper networkChannelHelper, int rpcTimeout)
9697
{
9798
Name = name ?? string.Empty;
9899
PSendPacketPool = new Queue<MessageObject>(128);
@@ -105,7 +106,7 @@ public NetworkChannelBase(string name, INetworkChannelHelper networkChannelHelpe
105106
PSendState = new SendState();
106107
PReceiveState = new ReceiveState();
107108
PHeartBeatState = new HeartBeatState();
108-
PRpcState = new RpcState();
109+
PRpcState = new RpcState(rpcTimeout);
109110
PSentPacketCount = 0;
110111
PReceivedPacketCount = 0;
111112
PActive = false;

Runtime/Network/Network/NetworkManager.RpcState.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,18 @@ public partial class RpcState : IDisposable
2222
private EventHandler<MessageObject> m_RpcStartHandler;
2323
private EventHandler<MessageObject> m_RpcEndHandler;
2424
private EventHandler<MessageObject> m_RpcErrorHandler;
25+
private int m_rpcTimeout = 5000;
2526
private bool m_Disposed = false;
2627

28+
public RpcState(int timeout)
29+
{
30+
m_rpcTimeout = timeout;
31+
if (m_rpcTimeout < 3000)
32+
{
33+
throw new ArgumentOutOfRangeException(nameof(timeout), "RPC超时时间不能小于3000毫秒");
34+
}
35+
}
36+
2737
public void Dispose()
2838
{
2939
if (m_Disposed)

Runtime/Network/Network/NetworkManager.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ public sealed partial class NetworkManager : GameFrameworkModule, INetworkManage
2929
/// <summary>
3030
/// 初始化网络管理器的新实例。
3131
/// </summary>
32-
[UnityEngine.Scripting.Preserve] public NetworkManager()
32+
[UnityEngine.Scripting.Preserve]
33+
public NetworkManager()
3334
{
3435
m_NetworkChannels = new Dictionary<string, NetworkChannelBase>(StringComparer.Ordinal);
3536
m_NetworkConnectedEventHandler = null;
@@ -185,8 +186,9 @@ public void GetAllNetworkChannels(List<INetworkChannel> results)
185186
/// </summary>
186187
/// <param name="channelName">网络频道名称。</param>
187188
/// <param name="networkChannelHelper">网络频道辅助器。</param>
189+
/// <param name="rpcTimeout">RPC超时时间</param>
188190
/// <returns>要创建的网络频道。</returns>
189-
public INetworkChannel CreateNetworkChannel(string channelName, INetworkChannelHelper networkChannelHelper)
191+
public INetworkChannel CreateNetworkChannel(string channelName, INetworkChannelHelper networkChannelHelper, int rpcTimeout)
190192
{
191193
GameFrameworkGuard.NotNullOrEmpty(channelName, nameof(channelName));
192194
GameFrameworkGuard.NotNull(networkChannelHelper, nameof(networkChannelHelper));
@@ -196,9 +198,9 @@ public INetworkChannel CreateNetworkChannel(string channelName, INetworkChannelH
196198
throw new GameFrameworkException(Utility.Text.Format("Already exist network channel '{0}'.", channelName ?? string.Empty));
197199
}
198200
#if (ENABLE_GAME_FRAME_X_WEB_SOCKET && UNITY_WEBGL) || FORCE_ENABLE_GAME_FRAME_X_WEB_SOCKET
199-
NetworkChannelBase networkChannel = new WebSocketNetworkChannel(channelName, networkChannelHelper);
201+
NetworkChannelBase networkChannel = new WebSocketNetworkChannel(channelName, networkChannelHelper, rpcTimeout);
200202
#else
201-
NetworkChannelBase networkChannel = new SystemTcpNetworkChannel(channelName, networkChannelHelper);
203+
NetworkChannelBase networkChannel = new SystemTcpNetworkChannel(channelName, networkChannelHelper, rpcTimeout);
202204
#endif
203205
networkChannel.NetworkChannelConnected += OnNetworkChannelConnected;
204206
networkChannel.NetworkChannelClosed += OnNetworkChannelClosed;

Runtime/Network/Network/SystemSocket/NetworkManager.SystemTcpNetworkChannel.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ private sealed class SystemTcpNetworkChannel : NetworkChannelBase
2929
/// </summary>
3030
/// <param name="name">网络频道名称。</param>
3131
/// <param name="networkChannelHelper">网络频道辅助器。</param>
32-
public SystemTcpNetworkChannel(string name, INetworkChannelHelper networkChannelHelper)
33-
: base(name, networkChannelHelper)
32+
/// <param name="rpcTimeout">RPC超时时间</param>
33+
public SystemTcpNetworkChannel(string name, INetworkChannelHelper networkChannelHelper, int rpcTimeout)
34+
: base(name, networkChannelHelper, rpcTimeout)
3435
{
3536
}
3637

Runtime/Network/Network/WebSocket/NetworkManager.WebSocketNetworkChannel.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ private sealed class WebSocketNetworkChannel : NetworkChannelBase
3030
/// </summary>
3131
/// <param name="name">网络频道名称。</param>
3232
/// <param name="networkChannelHelper">网络频道辅助器。</param>
33-
public WebSocketNetworkChannel(string name, INetworkChannelHelper networkChannelHelper)
34-
: base(name, networkChannelHelper)
33+
/// <param name="rpcTimeout">RPC超时时间</param>
34+
public WebSocketNetworkChannel(string name, INetworkChannelHelper networkChannelHelper, ref int rpcTimeout)
35+
: base(name, networkChannelHelper, rpcTimeout)
3536
{
3637
}
3738

Runtime/Network/NetworkComponent.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,18 @@ public sealed class NetworkComponent : GameFrameworkComponent
3333
/// </summary>
3434
[SerializeField] private List<int> m_IgnoredReceiveNetworkIds = new List<int>();
3535

36+
/// <summary>
37+
/// RPC超时时间,以毫秒为单位,默认为5秒
38+
/// </summary>
39+
[SerializeField] private int m_rpcTimeout = 5000;
40+
3641
/// <summary>
3742
/// 获取网络频道数量。
3843
/// </summary>
39-
public int NetworkChannelCount => m_NetworkManager.NetworkChannelCount;
44+
public int NetworkChannelCount
45+
{
46+
get { return m_NetworkManager.NetworkChannelCount; }
47+
}
4048

4149
/// <summary>
4250
/// 游戏框架组件初始化。
@@ -124,7 +132,7 @@ public void GetAllNetworkChannels(List<INetworkChannel> results)
124132
public INetworkChannel CreateNetworkChannel(string channelName, INetworkChannelHelper networkChannelHelper)
125133
{
126134
GameFrameworkGuard.NotNullOrEmpty(channelName, nameof(channelName));
127-
var networkChannel = m_NetworkManager.CreateNetworkChannel(channelName, networkChannelHelper);
135+
var networkChannel = m_NetworkManager.CreateNetworkChannel(channelName, networkChannelHelper, m_rpcTimeout);
128136
networkChannel.SetIgnoreLogNetworkIds(m_IgnoredSendNetworkIds, m_IgnoredReceiveNetworkIds);
129137
return networkChannel;
130138
}

0 commit comments

Comments
 (0)