mirror of
https://github.com/puzzle/lightning-beer-tap.git
synced 2025-12-18 15:44:21 +01:00
Adds reconnect
This commit is contained in:
@@ -1,13 +1,22 @@
|
||||
package ch.puzzle.lnd.websocketbridge;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.DisposableBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
|
||||
import org.springframework.messaging.simp.stomp.StompSession;
|
||||
import org.springframework.messaging.simp.stomp.StompSessionHandler;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.concurrent.ListenableFuture;
|
||||
import org.springframework.web.client.HttpServerErrorException;
|
||||
import org.springframework.web.socket.client.WebSocketClient;
|
||||
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
|
||||
import org.springframework.web.socket.messaging.WebSocketStompClient;
|
||||
@@ -15,82 +24,107 @@ import org.springframework.web.socket.sockjs.client.SockJsClient;
|
||||
import org.springframework.web.socket.sockjs.client.Transport;
|
||||
import org.springframework.web.socket.sockjs.client.WebSocketTransport;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class WebsocketBridge implements Runnable, DisposableBean {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(WebsocketBridgeApplication.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(WebsocketBridgeApplication.class);
|
||||
|
||||
private static String DEFAULT_URL = "wss://ln-self-order-pos-dev.ose3.puzzle.ch/websocket/invoice?access_token=";
|
||||
private static String DEFAULT_TOPIC = "/topic/invoice";
|
||||
private static String DEFAULT_COMMAND = "./dummy_command.sh";
|
||||
private static String DEFAULT_URL = "wss://ln-self-order-pos-dev.ose3.puzzle.ch/websocket/invoice?access_token=";
|
||||
private static String DEFAULT_TOPIC = "/topic/invoice";
|
||||
private static String DEFAULT_COMMAND = "./dummy_command.sh";
|
||||
|
||||
private static String OPTION_ARG_URL = "url";
|
||||
private static String OPTION_ARG_TOPIC = "topic";
|
||||
private static String OPTION_ARG_COMMAND = "command";
|
||||
private static String OPTION_ARG_URL = "url";
|
||||
private static String OPTION_ARG_TOPIC = "topic";
|
||||
private static String OPTION_ARG_COMMAND = "command";
|
||||
|
||||
private String url = DEFAULT_URL;
|
||||
private String topic = DEFAULT_TOPIC;
|
||||
private String command = DEFAULT_COMMAND;
|
||||
|
||||
private final ApplicationArguments args;
|
||||
private Thread thread;
|
||||
|
||||
private Thread thread;
|
||||
private boolean keepRunning = true;
|
||||
|
||||
private boolean keepRunning = true;
|
||||
@Autowired
|
||||
public WebsocketBridge(ApplicationArguments args) {
|
||||
|
||||
@Autowired
|
||||
public WebsocketBridge(ApplicationArguments args) {
|
||||
this.args = args;
|
||||
initArguments(args);
|
||||
|
||||
this.thread = new Thread(this);
|
||||
this.thread.start();
|
||||
}
|
||||
this.thread = new Thread(this);
|
||||
this.thread.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
logger.info("Application started with command-line arguments: {}", Arrays.toString(args.getSourceArgs()));
|
||||
logger.info("NonOptionArgs: {}", args.getNonOptionArgs());
|
||||
logger.info("OptionNames: {}", args.getOptionNames());
|
||||
private void initArguments(ApplicationArguments args) {
|
||||
logger.info("Application started with command-line arguments: {}", Arrays.toString(args.getSourceArgs()));
|
||||
logger.info("NonOptionArgs: {}", args.getNonOptionArgs());
|
||||
logger.info("OptionNames: {}", args.getOptionNames());
|
||||
|
||||
logger.info("Application started with command-line arguments: {}", Arrays.toString(args.getSourceArgs()));
|
||||
logger.info("NonOptionArgs: {}", args.getNonOptionArgs());
|
||||
logger.info("OptionNames: {}", args.getOptionNames());
|
||||
logger.info("Application started with command-line arguments: {}", Arrays.toString(args.getSourceArgs()));
|
||||
logger.info("NonOptionArgs: {}", args.getNonOptionArgs());
|
||||
logger.info("OptionNames: {}", args.getOptionNames());
|
||||
|
||||
String url = DEFAULT_URL;
|
||||
String topic = DEFAULT_TOPIC;
|
||||
String command = DEFAULT_COMMAND;
|
||||
if(args.getOptionValues(OPTION_ARG_URL) != null && !args.getOptionValues(OPTION_ARG_URL).equals("")) {
|
||||
url = args.getOptionValues(OPTION_ARG_URL).get(0);
|
||||
}
|
||||
if (args.getOptionValues(OPTION_ARG_URL) != null && !args.getOptionValues(OPTION_ARG_URL).equals("")) {
|
||||
url = args.getOptionValues(OPTION_ARG_URL).get(0);
|
||||
}
|
||||
|
||||
if(args.getOptionValues(OPTION_ARG_TOPIC) != null && !args.getOptionValues(OPTION_ARG_TOPIC).equals("")) {
|
||||
topic = args.getOptionValues(OPTION_ARG_TOPIC).get(0);
|
||||
}
|
||||
if (args.getOptionValues(OPTION_ARG_TOPIC) != null && !args.getOptionValues(OPTION_ARG_TOPIC).equals("")) {
|
||||
topic = args.getOptionValues(OPTION_ARG_TOPIC).get(0);
|
||||
}
|
||||
|
||||
if(args.getOptionValues(OPTION_ARG_COMMAND) != null && !args.getOptionValues(OPTION_ARG_COMMAND).equals("")) {
|
||||
command = args.getOptionValues(OPTION_ARG_COMMAND).get(0);
|
||||
}
|
||||
if (args.getOptionValues(OPTION_ARG_COMMAND) != null && !args.getOptionValues(OPTION_ARG_COMMAND).equals("")) {
|
||||
command = args.getOptionValues(OPTION_ARG_COMMAND).get(0);
|
||||
}
|
||||
}
|
||||
|
||||
private ListenableFuture<StompSession> connect() throws InterruptedException{
|
||||
List<Transport> transports = new ArrayList<>(1);
|
||||
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
|
||||
WebSocketClient transport = new SockJsClient(transports);
|
||||
WebSocketStompClient stompClient = new WebSocketStompClient(transport);
|
||||
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
|
||||
StompSessionHandler sessionHandler = new MyStompSessionHandler(topic, command);
|
||||
|
||||
ListenableFuture<StompSession> session = null;
|
||||
|
||||
boolean connected = false;
|
||||
|
||||
while(!connected) {
|
||||
try {
|
||||
Thread.sleep(5000);
|
||||
session = stompClient.connect(url, sessionHandler);
|
||||
session.get().isConnected();
|
||||
connected = true;
|
||||
}catch(HttpServerErrorException | ExecutionException e) {
|
||||
logger.info("Connection Error", e);
|
||||
// do try again
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return session;
|
||||
}
|
||||
|
||||
|
||||
|
||||
List<Transport> transports = new ArrayList<>(1);
|
||||
transports.add(new WebSocketTransport( new StandardWebSocketClient()) );
|
||||
WebSocketClient transport = new SockJsClient(transports);
|
||||
WebSocketStompClient stompClient = new WebSocketStompClient(transport);
|
||||
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
|
||||
StompSessionHandler sessionHandler = new MyStompSessionHandler(topic, command);
|
||||
stompClient.connect(url, sessionHandler);
|
||||
@Override
|
||||
public void run() {
|
||||
ListenableFuture<StompSession> session = null;
|
||||
|
||||
while (keepRunning) {
|
||||
try {
|
||||
Thread.sleep(5000);
|
||||
} catch (InterruptedException e) {
|
||||
keepRunning = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (keepRunning) {
|
||||
try {
|
||||
Thread.sleep(5000);
|
||||
if(session == null || !session.get().isConnected()) {
|
||||
logger.info("is not connected! Try reconnect");
|
||||
session = connect();
|
||||
}
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
keepRunning = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() throws Exception {
|
||||
logger.info("Do stuff on destroy here");
|
||||
}
|
||||
@Override
|
||||
public void destroy() throws Exception {
|
||||
logger.info("Do stuff on destroy here");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user