From cdb4f45b507e52f67c235b6d4b7307ec194f02a1 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 01 Feb 2023 09:51:43 +0800
Subject: [PATCH] 1

---
 src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java |   61 +++++++++++++++++++++++++++---
 1 files changed, 54 insertions(+), 7 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java b/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java
index 732ec34..deacdd9 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java
@@ -3,9 +3,12 @@
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.mall.chain.enums.ChainEnum;
 import cc.mrbird.febs.mall.chain.enums.EthService;
+import cn.hutool.core.util.ObjectUtil;
 import io.reactivex.Flowable;
 import io.reactivex.disposables.Disposable;
 import lombok.extern.slf4j.Slf4j;
+import org.java_websocket.WebSocket;
+import org.java_websocket.exceptions.WebsocketNotConnectedException;
 import org.web3j.crypto.Credentials;
 import org.web3j.protocol.Web3j;
 import org.web3j.protocol.core.DefaultBlockParameter;
@@ -18,7 +21,9 @@
 import org.web3j.tx.gas.StaticGasProvider;
 
 import java.math.BigInteger;
+import java.net.ConnectException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -78,23 +83,65 @@
         WebSocketService ws = null;
         WebSocketClient webSocketClient = null;
         Web3j web3j = null;
+        ChainEnum chain = ChainEnum.getValueByName(type);
+
+//        try {
+//            webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"));
+//            ws = new WebSocketService(webSocketClient, true);
+//            ws.connect();
+//        } catch (Exception e) {
+//            try {
+//                ws.close();
+//                //TODO
+//                if(ObjectUtil.isEmpty(webSocketClient)){
+//                    webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"));
+//                    ws = new WebSocketService(webSocketClient, true);
+//                    ws.connect();
+//                }
+//                WebSocket.READYSTATE readyState = webSocketClient.getReadyState();
+//                if((WebSocket.READYSTATE.OPEN != readyState
+//                        && WebSocket.READYSTATE.CONNECTING != readyState)){
+//                    webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"));
+//                    ws = new WebSocketService(webSocketClient, true);
+//                    ws.connect();
+//                }
+//            } catch (Exception connectException) {
+//                connectException.printStackTrace();
+//            }
+//        }
+
 
         try {
             webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"));
             ws = new WebSocketService(webSocketClient, true);
             ws.connect();
             web3j = Web3j.build(ws);
-            ChainEnum chain = ChainEnum.getValueByName(type);
+
             assert chain != null;
+            try{
+                EthUsdtContract ethUsdtContract = wssContract(chain.getPrivateKey(), chain.getContractAddress(), web3j);
+                EthFilter filter = getFilter(startBlock, startBlock, chain.getContractAddress());
+                Flowable<EthUsdtContract.TransferEventResponse> eventFlowable = ethUsdtContract.transferEventFlowable(filter);
+                Disposable subscribe = eventFlowable.subscribe(event::compile, error -> {
+                    log.error("币安监听异常", error);
 
-            EthUsdtContract ethUsdtContract = wssContract(chain.getPrivateKey(), chain.getContractAddress(), web3j);
-            EthFilter filter = getFilter(startBlock, startBlock, chain.getContractAddress());
+                });
+            }catch(WebsocketNotConnectedException e){
+                ws.close();
+                webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"));
+                ws = new WebSocketService(webSocketClient, true);
+                ws.connect();
+                web3j = Web3j.build(ws);
+                assert chain != null;
+                EthUsdtContract ethUsdtContract = wssContract(chain.getPrivateKey(), chain.getContractAddress(), web3j);
+                EthFilter filter = getFilter(startBlock, startBlock, chain.getContractAddress());
+                Flowable<EthUsdtContract.TransferEventResponse> eventFlowable = ethUsdtContract.transferEventFlowable(filter);
+                Disposable subscribe = eventFlowable.subscribe(event::compile, error -> {
+                    log.error("币安监听异常", error);
 
+                });
+            }
 
-            Flowable<EthUsdtContract.TransferEventResponse> eventFlowable = ethUsdtContract.transferEventFlowable(filter);
-            Disposable subscribe = eventFlowable.subscribe(event::compile, error -> {
-                log.error("币安监听异常", error);
-            });
         } catch (Exception e) {
             e.printStackTrace();
         }

--
Gitblit v1.9.1