11use crate :: synchronizer:: Synchronizer ;
2- use crate :: utils:: { send_message , send_message_to } ;
3- use crate :: { Status , StatusCode , attempt } ;
2+ use crate :: utils:: { send_message_async , send_message_to_async } ;
3+ use crate :: { Status , StatusCode } ;
44use ckb_constant:: sync:: MAX_LOCATOR_SIZE ;
55use ckb_logger:: { debug, info} ;
66use ckb_network:: { CKBProtocolContext , PeerIndex , SupportProtocols } ;
@@ -9,20 +9,21 @@ use ckb_types::{
99 packed:: { self , Byte32 } ,
1010 prelude:: * ,
1111} ;
12+ use std:: sync:: Arc ;
1213
1314pub struct GetHeadersProcess < ' a > {
1415 message : packed:: GetHeadersReader < ' a > ,
1516 synchronizer : & ' a Synchronizer ,
1617 peer : PeerIndex ,
17- nc : & ' a dyn CKBProtocolContext ,
18+ nc : & ' a Arc < dyn CKBProtocolContext + Sync > ,
1819}
1920
2021impl < ' a > GetHeadersProcess < ' a > {
2122 pub fn new (
2223 message : packed:: GetHeadersReader < ' a > ,
2324 synchronizer : & ' a Synchronizer ,
2425 peer : PeerIndex ,
25- nc : & ' a dyn CKBProtocolContext ,
26+ nc : & ' a Arc < dyn CKBProtocolContext + Sync > ,
2627 ) -> Self {
2728 GetHeadersProcess {
2829 message,
@@ -84,8 +85,12 @@ impl<'a> GetHeadersProcess<'a> {
8485 . headers ( headers. into_iter ( ) . map ( |x| x. data ( ) ) . collect :: < Vec < _ > > ( ) )
8586 . build ( ) ;
8687 let message = packed:: SyncMessage :: new_builder ( ) . set ( content) . build ( ) ;
87-
88- attempt ! ( send_message_to( self . nc, self . peer, & message) ) ;
88+ let nc = Arc :: clone ( self . nc ) ;
89+ self . synchronizer
90+ . shared ( )
91+ . shared ( )
92+ . async_handle ( )
93+ . spawn ( async move { send_message_to_async ( & nc, self . peer , & message) . await } ) ;
8994 } else {
9095 return StatusCode :: GetHeadersMissCommonAncestors
9196 . with_context ( format ! ( "{block_locator_hashes:#x?}" ) ) ;
@@ -96,11 +101,16 @@ impl<'a> GetHeadersProcess<'a> {
96101 fn send_in_ibd ( & self ) {
97102 let content = packed:: InIBD :: new_builder ( ) . build ( ) ;
98103 let message = packed:: SyncMessage :: new_builder ( ) . set ( content) . build ( ) ;
99- let _ignore = send_message (
100- SupportProtocols :: Sync . protocol_id ( ) ,
101- self . nc ,
102- self . peer ,
103- & message,
104- ) ;
104+ let nc = Arc :: clone ( self . nc ) ;
105+ let peer = self . peer ;
106+ self . synchronizer
107+ . shared ( )
108+ . shared ( )
109+ . async_handle ( )
110+ . spawn ( async move {
111+ let _ignore =
112+ send_message_async ( SupportProtocols :: Sync . protocol_id ( ) , & nc, peer, & message)
113+ . await ;
114+ } ) ;
105115 }
106116}
0 commit comments