1919
2020import io .netty .channel .ChannelFutureListener ;
2121import io .netty .channel .ChannelHandlerContext ;
22- import java .util .Queue ;
23- import java .util .concurrent .ConcurrentLinkedQueue ;
24- import java .util .concurrent .Executors ;
25- import java .util .concurrent .ScheduledExecutorService ;
26- import java .util .concurrent .ScheduledFuture ;
27- import java .util .concurrent .ThreadFactory ;
28- import java .util .concurrent .TimeUnit ;
29- import java .util .concurrent .atomic .AtomicInteger ;
3022import org .slf4j .Logger ;
3123import org .slf4j .LoggerFactory ;
3224import org .springframework .context .annotation .Scope ;
3325import org .springframework .stereotype .Component ;
34- import org .tron .common .overlay .message .DisconnectMessage ;
35- import org . tron . common . overlay . message . Message ;
36- import org . tron . common . overlay . message . PingMessage ;
37- import org . tron . common . overlay . message . ReasonCode ;
38- import org . tron . common . overlay . message . StaticMessages ;
26+ import org .tron .common .overlay .message .* ;
27+
28+ import java . util . Queue ;
29+ import java . util . concurrent .* ;
30+ import java . util . concurrent . atomic . AtomicInteger ;
3931
4032/**
4133 * This class contains the logic for sending messages in a queue
@@ -121,6 +113,8 @@ private void disconnect(DisconnectMessage msg) {
121113
122114 public void receivedMessage (Message msg ) throws InterruptedException {
123115
116+ logger .info ("rcv from peer[{}], size:{} data:{}" , ctx .channel ().remoteAddress (), msg .getSendData ().readableBytes (), msg .toString ());
117+
124118 if (requestQueue .peek () != null ) {
125119 MessageRoundtrip messageRoundtrip = requestQueue .peek ();
126120 Message waitingMessage = messageRoundtrip .getMsg ();
@@ -135,7 +129,7 @@ public void receivedMessage(Message msg) throws InterruptedException {
135129 }
136130
137131 private void removeAnsweredMessage (MessageRoundtrip messageRoundtrip ) {
138- if (messageRoundtrip != null && messageRoundtrip .isAnswered ())
132+ if (messageRoundtrip != null && messageRoundtrip .isAnswered ())
139133 requestQueue .remove ();
140134 }
141135
@@ -149,22 +143,32 @@ private void nudgeQueue() {
149143
150144 private void sendToWire (MessageRoundtrip messageRoundtrip ) {
151145
152- if (messageRoundtrip != null && messageRoundtrip .getRetryTimes () == 0 ) {
153- // TODO: retry logic || messageRoundtrip.hasToRetry()){
146+ if (messageRoundtrip == null ){
147+ return ;
148+ }
149+
150+ if (messageRoundtrip .getRetryTimes () > 0 && !messageRoundtrip .hasToRetry ()){
151+ return ;
152+ }
154153
155- Message msg = messageRoundtrip .getMsg ();
154+ if (messageRoundtrip .getRetryTimes () > 0 ){
155+ logger .info ("send msg timeout. close channel {}." , ctx .channel ().remoteAddress ());
156+ ctx .close ();
157+ return ;
158+ }
156159
157- //TODO#p2p#peerDel : let node know
158- logger .info (msg .toString ());
160+ Message msg = messageRoundtrip .getMsg ();
159161
160- ctx .writeAndFlush (msg .getSendData ())
161- .addListener (ChannelFutureListener .FIRE_EXCEPTION_ON_FAILURE );
162+ ctx .writeAndFlush (msg .getSendData ())
163+ .addListener (ChannelFutureListener .FIRE_EXCEPTION_ON_FAILURE );
162164
163- if (msg .getAnswerMessage () != null ) {
164- messageRoundtrip .incRetryTimes ();
165- messageRoundtrip .saveTime ();
166- }
165+ if (msg .getAnswerMessage () != null ) {
166+ messageRoundtrip .incRetryTimes ();
167+ messageRoundtrip .saveTime ();
167168 }
169+
170+ logger .info ("send to peer[{}] retry[{}], length:{} data:{}" , ctx .channel ().remoteAddress (),
171+ messageRoundtrip .getRetryTimes (), msg .getSendData ().readableBytes (), msg .toString ());
168172 }
169173
170174 public void close () {
0 commit comments