diff --git a/application.sh b/application.sh index 67e746b..6338d90 100755 --- a/application.sh +++ b/application.sh @@ -1,12 +1,7 @@ #!/usr/bin/env bash -# Java call parameters -WEBAPP="wss://localhost/websocket/invoice?access_token=" -OPTS="-Xms128M -Xmx128M -jar" -JARFILE="websocket-bridge-0.0.1-SNAPSHOT.jar" -JARPATH="websocket_bridge/build/libs/" -TOPIC="/topic/invoice" -COMMAND="./gpio_handler/gpio_handler.py" +DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)" +source ${DIR}/configuration.sh usage(){ cat << EOF @@ -27,16 +22,17 @@ EOF # Start all services on the beer tap device app_start(){ + JAR=${BRIDGE_JARPATH}${BRIDGE_JARFILE} # Check if the websocket bridge has been built - if [ ! -f $JARPATH$JARFILE ]; then + if [ ! -f ${JAR} ]; then app_build fi # Start up the dashboard - source dashboard/dashboard.sh + source ${DIR}/dashboard/dashboard.sh # Hide mouse when still #DISPLAY=:0 unclutter -idle 0.01 -root & # Start websocket bridge, fork to background and no output - nohup java $OPTS $JARPATH$JARFILE --url=$WEBAPP --topic=$TOPIC --command=$COMMAND & >/dev/null 2>&1 + nohup java ${BRIDGE_JAVA_OPTS} ${JAR} --url=${WEBSOCKET_URL} --topic=${WEBSOCKET_TOPIC} --command=${GPIO_HANDLER_COMMAND} --prefix=${MEMO_PREFIX} & >/dev/null 2>&1 } # Stop all services @@ -50,10 +46,9 @@ app_stop(){ # Build or rebuild the java lighning node web bridge app_build(){ echo "Building the websocket bridge please wait" - cd websocket_bridge && exec ./gradlew build >/dev/null 2>&1 + cd ${DIR}/websocket_bridge && exec ./gradlew build >/dev/null 2>&1 } - # Argument parsing case $1 in start) diff --git a/configuration.sh b/configuration.sh new file mode 100644 index 0000000..43cfa12 --- /dev/null +++ b/configuration.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)" + +# ---------------------------------------------- +# you probably need to edit the following values +# ---------------------------------------------- + +# the URL where the websocket bridge will connect to to listen for invoices +WEBSOCKET_URL="wss://localhost/websocket/invoice?access_token=" + +# the URL that is opened in the browser to show the GUI on the screen +FRONTEND_URL="https://localhost/#/self-service-landscape/[pos-Identification]" + +# only listen to paid invoices that have the following text at the beginning of their memo +MEMO_PREFIX="beerTap" + +# ---------------------------------------------- +# most likely you don't need to change anything here +# ---------------------------------------------- +BRIDGE_JAVA_OPTS="-Xms128M -Xmx128M -jar" +BRIDGE_JARFILE="websocket-bridge-0.0.1-SNAPSHOT.jar" +BRIDGE_JARPATH="websocket_bridge/build/libs/" +WEBSOCKET_TOPIC="/topic/invoice" +GPIO_HANDLER_COMMAND="${DIR}/gpio_handler/gpio_handler.py" + diff --git a/dashboard/dashboard.sh b/dashboard/dashboard.sh index fa0a002..07930f9 100755 --- a/dashboard/dashboard.sh +++ b/dashboard/dashboard.sh @@ -1,8 +1,10 @@ #!/usr/bin/env bash +DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)" +source $DIR/../configuration.sh + # Arguments -SHOP="https://localhost/#/self-service-landscape/[pos-Identification]" -KIOSK_ARGS="--kiosk --disable-translate --incognito --app=$SHOP" +KIOSK_ARGS="--kiosk --disable-translate --incognito --app=${FRONTEND_URL}" # Don't sleep, don't blank, waste energy! DISPLAY=:0 xset s off diff --git a/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/MyStompSessionHandler.java b/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/MyStompSessionHandler.java index 555244b..1f3990d 100644 --- a/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/MyStompSessionHandler.java +++ b/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/MyStompSessionHandler.java @@ -21,10 +21,12 @@ public class MyStompSessionHandler extends StompSessionHandlerAdapter { private static final Logger logger = LoggerFactory.getLogger(MyStompSessionHandler.class); private String topic; private String command; + private String memoPrefix; - public MyStompSessionHandler(String topic, String command) { + public MyStompSessionHandler(String topic, String command, String memoPrefix) { this.topic = topic; this.command = command; + this.memoPrefix = memoPrefix; } @Override @@ -61,7 +63,7 @@ public class MyStompSessionHandler extends StompSessionHandlerAdapter { String memoArg = "--memo=\"" + invoice.getMemo() + "\""; String productsArg = "--products=" + invoice.getOrderedProducts(); - if(invoice != null && !invoice.getMemo().startsWith("beerTap")) { + if(invoice != null && !invoice.getMemo().startsWith(memoPrefix)) { logger.info("Not a beerTap invoice"); return; } @@ -69,9 +71,7 @@ public class MyStompSessionHandler extends StompSessionHandlerAdapter { logger.info("Command: " + command + ", Args: " + memoArg + ", " + productsArg); ProcessBuilder pb = new ProcessBuilder(command, memoArg, productsArg); - Map env = pb.environment(); - env.put("PUZZLE_POS", "beerTap"); pb.directory(new File("./")); Process p = pb.start(); p.waitFor(); diff --git a/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/WebsocketBridge.java b/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/WebsocketBridge.java index bf117eb..113caee 100644 --- a/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/WebsocketBridge.java +++ b/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/WebsocketBridge.java @@ -32,14 +32,17 @@ public class WebsocketBridge implements Runnable, DisposableBean { private static String DEFAULT_URL = "ws://localhost/websocket/invoice?access_token="; private static String DEFAULT_TOPIC = "/topic/invoice"; private static String DEFAULT_COMMAND = "./dummy_command.sh"; + private static String DEFAULT_MEMO_PREFIX = "beerTap"; 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_MEMO_PREFIX = "prefix"; private String url = DEFAULT_URL; private String topic = DEFAULT_TOPIC; private String command = DEFAULT_COMMAND; + private String memoPrefix = DEFAULT_MEMO_PREFIX; private Thread thread; @@ -74,6 +77,10 @@ public class WebsocketBridge implements Runnable, DisposableBean { 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_MEMO_PREFIX) != null && !args.getOptionValues(OPTION_ARG_MEMO_PREFIX).equals("")) { + memoPrefix = args.getOptionValues(OPTION_ARG_MEMO_PREFIX).get(0); + } } private ListenableFuture connect() throws InterruptedException{ @@ -82,7 +89,7 @@ public class WebsocketBridge implements Runnable, DisposableBean { WebSocketClient transport = new SockJsClient(transports); WebSocketStompClient stompClient = new WebSocketStompClient(transport); stompClient.setMessageConverter(new MappingJackson2MessageConverter()); - StompSessionHandler sessionHandler = new MyStompSessionHandler(topic, command); + StompSessionHandler sessionHandler = new MyStompSessionHandler(topic, command, memoPrefix); ListenableFuture session = null; @@ -100,11 +107,8 @@ public class WebsocketBridge implements Runnable, DisposableBean { } } - return session; } - - @Override public void run() { diff --git a/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/WebsocketBridgeApplication.java b/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/WebsocketBridgeApplication.java index bb4ebcf..2c69f6d 100644 --- a/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/WebsocketBridgeApplication.java +++ b/websocket_bridge/src/main/java/ch/puzzle/lnd/websocketbridge/WebsocketBridgeApplication.java @@ -15,5 +15,4 @@ public class WebsocketBridgeApplication { public static void main(String[] args) { SpringApplication.run(WebsocketBridgeApplication.class, args); } - }