@@ -15,7 +15,7 @@ namespace GameFrameX.Network.Runtime
1515{
1616 public sealed partial class NetworkManager
1717 {
18- public sealed class RpcState : IDisposable
18+ public partial class RpcState : IDisposable
1919 {
2020 private readonly ConcurrentDictionary < long , RpcMessageData > m_HandlingObjects = new ConcurrentDictionary < long , RpcMessageData > ( ) ;
2121 private readonly HashSet < long > m_HandlingObjectIds = new HashSet < long > ( ) ;
@@ -48,8 +48,15 @@ public bool Reply(MessageObject message)
4848 if ( m_HandlingObjects . TryRemove ( message . UniqueId , out var messageActorObject ) )
4949 {
5050 messageActorObject . Reply ( message as IResponseMessage ) ;
51- m_RpcEndHandler ? . Invoke ( this , message ) ;
52- return true ;
51+ try
52+ {
53+ m_RpcEndHandler ? . Invoke ( this , message ) ;
54+ return true ;
55+ }
56+ catch ( Exception e )
57+ {
58+ Log . Fatal ( e ) ;
59+ }
5360 }
5461 }
5562
@@ -70,90 +77,16 @@ public Task<IResponseMessage> Call(MessageObject messageObject)
7077
7178 var defaultMessageActorObject = RpcMessageData . Create ( messageObject as IRequestMessage ) ;
7279 m_HandlingObjects . TryAdd ( messageObject . UniqueId , defaultMessageActorObject ) ;
73- m_RpcStartHandler ? . Invoke ( this , messageObject ) ;
74- return defaultMessageActorObject . Task ;
75- }
76-
77- class RpcMessageData
78- {
79- /// <summary>
80- /// 消息的唯一ID
81- /// </summary>
82- public long UniqueId { get ; }
83-
84- /// <summary>
85- /// 创建时间
86- /// </summary>
87- public long CreatedTime { get ; }
88-
89- /// <summary>
90- /// 消耗的时间
91- /// </summary>
92- public long ElapseTime { get ; private set ; }
93-
94- /// <summary>
95- /// 请求消息
96- /// </summary>
97- public IRequestMessage RequestMessage { get ; protected set ; }
98-
99- /// <summary>
100- /// 超时时间。单位毫秒
101- /// </summary>
102- public int Timeout { get ; }
103-
104- /// <summary>
105- /// 响应消息
106- /// </summary>
107- public IResponseMessage ResponseMessage { get ; protected set ; }
108-
109- /// <summary>
110- /// 设置等待的返回结果
111- /// </summary>
112- /// <param name="responseMessage"></param>
113- public void Reply ( IResponseMessage responseMessage )
80+ try
11481 {
115- ResponseMessage = responseMessage ;
116- m_Tcs . SetResult ( responseMessage ) ;
82+ m_RpcStartHandler ? . Invoke ( this , messageObject ) ;
11783 }
118-
119- /// <summary>
120- /// 增加时间。如果超时返回true
121- /// </summary>
122- /// <param name="time"></param>
123- /// <returns></returns>
124- internal bool IncrementalElapseTime ( long time )
125- {
126- ElapseTime += time ;
127- if ( ElapseTime >= Timeout )
128- {
129- m_Tcs . TrySetException ( new TimeoutException ( "Rpc call timeout! Message is :" + RequestMessage ) ) ;
130- return true ;
131- }
132-
133- return false ;
134- }
135-
136- internal static RpcMessageData Create ( IRequestMessage actorRequestMessage , int timeout = 5000 )
84+ catch ( Exception e )
13785 {
138- var defaultMessageActorObject = new RpcMessageData ( actorRequestMessage , timeout ) ;
139- return defaultMessageActorObject ;
86+ Log . Fatal ( e ) ;
14087 }
14188
142- private RpcMessageData ( IRequestMessage requestMessage , int timeout )
143- {
144- CreatedTime = GameTimeHelper . UnixTimeMilliseconds ( ) ;
145- RequestMessage = requestMessage ;
146- Timeout = timeout ;
147- UniqueId = ( ( MessageObject ) requestMessage ) . UniqueId ;
148- m_Tcs = new TaskCompletionSource < IResponseMessage > ( ) ;
149- }
150-
151- private readonly TaskCompletionSource < IResponseMessage > m_Tcs ;
152-
153- public Task < IResponseMessage > Task
154- {
155- get { return m_Tcs . Task ; }
156- }
89+ return defaultMessageActorObject . Task ;
15790 }
15891
15992 public void Update ( float elapseSeconds , float realElapseSeconds )
@@ -167,8 +100,15 @@ public void Update(float elapseSeconds, float realElapseSeconds)
167100 bool isTimeout = handlingObject . Value . IncrementalElapseTime ( elapseSecondsTime ) ;
168101 if ( isTimeout )
169102 {
170- m_RpcErrorHandler ? . Invoke ( this , handlingObject . Value . RequestMessage as MessageObject ) ;
171103 m_HandlingObjectIds . Add ( handlingObject . Key ) ;
104+ try
105+ {
106+ m_RpcErrorHandler ? . Invoke ( this , handlingObject . Value . RequestMessage as MessageObject ) ;
107+ }
108+ catch ( Exception e )
109+ {
110+ Log . Fatal ( e ) ;
111+ }
172112 }
173113 }
174114 }
0 commit comments