@@ -33,8 +33,7 @@ public class PeerDialer : IPeerDialer
3333{
3434 private readonly IAccountService _accountService ;
3535 private readonly IHandshakeProvider _handshakeProvider ;
36- private KeyCertificatePair _clientKeyCertificatePair ;
37- private IStreamTaskResourcePool _streamTaskResourcePool ;
36+ private readonly IStreamTaskResourcePool _streamTaskResourcePool ;
3837 public ILocalEventBus EventBus { get ; set ; }
3938
4039 public PeerDialer ( IAccountService accountService ,
@@ -46,8 +45,6 @@ public PeerDialer(IAccountService accountService,
4645 EventBus = NullLocalEventBus . Instance ;
4746
4847 Logger = NullLogger < PeerDialer > . Instance ;
49-
50- CreateClientKeyCertificatePair ( ) ;
5148 }
5249
5350 private NetworkOptions NetworkOptions => NetworkOptionsSnapshot . Value ;
@@ -142,7 +139,17 @@ public async Task<GrpcPeer> DialBackPeerByStreamAsync(DnsEndPoint remoteEndpoint
142139 } ;
143140 Logger . LogWarning ( "DialBackPeerByStreamAsync meta={meta}" , meta ) ;
144141 var peer = new GrpcStreamBackPeer ( remoteEndpoint , info , responseStream , _streamTaskResourcePool , meta ) ;
145-
142+ peer . SetStreamSendCallBack ( async ( ex , streamMessage , callTimes ) =>
143+ {
144+ if ( ex == null )
145+ Logger . LogDebug ( "streamRequest write success {times}-{requestId}-{messageType}-{this}-{latency}" , callTimes , streamMessage . RequestId , streamMessage . MessageType , peer ,
146+ CommonHelper . GetRequestLatency ( streamMessage . RequestId ) ) ;
147+ else
148+ {
149+ Logger . LogError ( ex , "streamRequest write fail, {requestId}-{messageType}-{this}" , streamMessage . RequestId , streamMessage . MessageType , peer ) ;
150+ await EventBus . PublishAsync ( new StreamPeerExceptionEvent ( ex , peer ) , false ) ;
151+ }
152+ } ) ;
146153 peer . UpdateLastReceivedHandshake ( handshake ) ;
147154
148155 return peer ;
@@ -191,11 +198,6 @@ public async Task<GrpcPeer> DialBackPeerAsync(DnsEndPoint remoteEndpoint, Handsh
191198 return peer ;
192199 }
193200
194- private void CreateClientKeyCertificatePair ( )
195- {
196- _clientKeyCertificatePair = TlsHelper . GenerateKeyCertificatePair ( ) ;
197- }
198-
199201 /// <summary>
200202 /// Calls the server side DoHandshake RPC method, in order to establish a 2-way connection.
201203 /// </summary>
@@ -245,6 +247,17 @@ private async Task<GrpcStreamPeer> DailStreamPeerAsync(GrpcClient client, DnsEnd
245247 { GrpcConstants . PubkeyMetadataKey , nodePubkey } ,
246248 { GrpcConstants . PeerInfoMetadataKey , connectionInfo . ToString ( ) }
247249 } ) ;
250+ streamPeer . SetStreamSendCallBack ( async ( ex , streamMessage , callTimes ) =>
251+ {
252+ if ( ex == null )
253+ Logger . LogDebug ( "streamRequest write success {times}-{requestId}-{messageType}-{this}-{latency}" , callTimes , streamMessage . RequestId , streamMessage . MessageType , streamPeer ,
254+ CommonHelper . GetRequestLatency ( streamMessage . RequestId ) ) ;
255+ else
256+ {
257+ Logger . LogError ( ex , "streamRequest write fail, {requestId}-{messageType}-{this}" , streamMessage . RequestId , streamMessage . MessageType , streamPeer ) ;
258+ await EventBus . PublishAsync ( new StreamPeerExceptionEvent ( ex , streamPeer ) , false ) ;
259+ }
260+ } ) ;
248261 var success = await BuildStreamForPeerAsync ( streamPeer , call ) ;
249262 return success ? streamPeer : null ;
250263 }
@@ -266,12 +279,17 @@ public async Task<bool> BuildStreamForPeerAsync(GrpcStreamPeer streamPeer, Async
266279 {
267280 try
268281 {
269- await call . ResponseStream . ForEachAsync ( async req => await
270- EventBus . PublishAsync ( new StreamMessageReceivedEvent ( req . ToByteString ( ) , streamPeer . Info . Pubkey ) , false ) ) ;
282+ await call . ResponseStream . ForEachAsync ( async req =>
283+ {
284+ Logger . LogDebug ( "listenReceive request={requestId} {streamType}-{messageType} latency={latency}" , req . RequestId , req . StreamType , req . MessageType , CommonHelper . GetRequestLatency ( req . RequestId ) ) ;
285+ await EventBus . PublishAsync ( new StreamMessageReceivedEvent ( req . ToByteString ( ) , streamPeer . Info . Pubkey , req . RequestId ) , false ) ;
286+ } ) ;
271287 Logger . LogWarning ( "listen end and complete {remoteEndPoint}" , streamPeer . RemoteEndpoint . ToString ( ) ) ;
272288 }
273289 catch ( Exception e )
274290 {
291+ if ( e is RpcException exception )
292+ await EventBus . PublishAsync ( new StreamPeerExceptionEvent ( streamPeer . HandleRpcException ( exception , "listen err {remoteEndPoint}" ) , streamPeer ) ) ;
275293 Logger . LogError ( e , "listen err {remoteEndPoint}" , streamPeer . RemoteEndpoint . ToString ( ) ) ;
276294 }
277295 } , tokenSource . Token ) ;
@@ -329,8 +347,9 @@ private async Task<GrpcClient> CreateClientAsync(DnsEndPoint remoteEndpoint)
329347 return null ;
330348
331349 Logger . LogDebug ( $ "Upgrading connection to TLS: { certificate } .") ;
350+ var clientKeyCertificatePair = TlsHelper . GenerateKeyCertificatePair ( ) ;
332351 ChannelCredentials credentials =
333- new SslCredentials ( TlsHelper . ObjectToPem ( certificate ) , _clientKeyCertificatePair ) ;
352+ new SslCredentials ( TlsHelper . ObjectToPem ( certificate ) , clientKeyCertificatePair ) ;
334353
335354 var channel = new Channel ( remoteEndpoint . ToString ( ) , credentials , new List < ChannelOption >
336355 {
@@ -340,7 +359,7 @@ private async Task<GrpcClient> CreateClientAsync(DnsEndPoint remoteEndpoint)
340359 new ( GrpcConstants . GrpcArgKeepalivePermitWithoutCalls , GrpcConstants . GrpcArgKeepalivePermitWithoutCallsOpen ) ,
341360 new ( GrpcConstants . GrpcArgHttp2MaxPingsWithoutData , GrpcConstants . GrpcArgHttp2MaxPingsWithoutDataVal ) ,
342361 new ( GrpcConstants . GrpcArgKeepaliveTimeoutMs , GrpcConstants . GrpcArgKeepaliveTimeoutMsVal ) ,
343- new ( GrpcConstants . GrpcArgKeepaliveTimeMs , GrpcConstants . GrpcArgKeepaliveTimeMsVal )
362+ new ( GrpcConstants . GrpcArgKeepaliveTimeMs , GrpcConstants . GrpcArgKeepaliveTimeMsVal ) ,
344363 } ) ;
345364
346365 var nodePubkey = AsyncHelper . RunSync ( ( ) => _accountService . GetPublicKeyAsync ( ) ) . ToHex ( ) ;
0 commit comments