1717import java .security .NoSuchAlgorithmException ;
1818import java .util .Set ;
1919import java .util .concurrent .*;
20+ import java .util .logging .Logger ;
2021
2122public class AfreecaTvChatCrawler {
2223
24+ private static final Logger LOGGER = Logger .getLogger (AfreecaTvChatCrawler .class .getSimpleName ());
25+
2326 private AccClient client ;
2427 private AccHttpRequestResult result ;
2528
@@ -65,9 +68,12 @@ public void connect() {
6568 Executors .newSingleThreadExecutor ().execute (() -> {
6669 try {
6770 // Request AfreecaTv Live Information
68- final AccHttpRequester requester = new AccHttpRequester (url );
69- final CompletableFuture <AccHttpRequestResult > future = requester .request ();
70- this .result = future .get ();
71+ this .result = getLiveBroadcastResult ();
72+
73+ if (result == null ) {
74+ LOGGER .warning ("Unable to find live broadcast information." );
75+ return ;
76+ }
7177
7278 // Create Draft
7379 Draft_6455 draft = new Draft_6455 (Lists .newArrayList (),
@@ -103,9 +109,16 @@ public void connect() {
103109 public void reconnect () {
104110 if (client != null ) {
105111 try {
112+ this .result = getLiveBroadcastResult ();
113+ if (result == null ) {
114+ LOGGER .warning ("Unable to find live broadcast information." );
115+ close ();
116+ return ;
117+ }
118+
106119 client .reconnectBlocking ();
107120 sendPacket ();
108- } catch (InterruptedException e ) {
121+ } catch (InterruptedException | ExecutionException e ) {
109122 e .printStackTrace ();
110123 }
111124 }
@@ -120,6 +133,12 @@ public void close() {
120133 }
121134 }
122135
136+ private @ Nullable AccHttpRequestResult getLiveBroadcastResult () throws ExecutionException , InterruptedException {
137+ final AccHttpRequester requester = new AccHttpRequester (url );
138+ final CompletableFuture <AccHttpRequestResult > future = requester .request ();
139+ return future .get ();
140+ }
141+
123142 private void sendPacket () {
124143 if (client == null ) {
125144 return ;
@@ -136,7 +155,6 @@ private void sendPacket() {
136155 // Repeatedly Sending Ping Packet
137156 scheduler = Executors .newSingleThreadScheduledExecutor ();
138157 scheduler .scheduleAtFixedRate (() -> {
139- System .out .println ("Send Ping Packet" );
140158 client .send (AccConstants .createPingPacket ());
141159 }, AccConstants .PING_PACKET_PERIOD_SECONDS , AccConstants .PING_PACKET_PERIOD_SECONDS , TimeUnit .SECONDS );
142160 }
0 commit comments