package ru.semiot.services.tsdbservice; import static ru.semiot.services.tsdbservice.ServiceConfig.CONFIG; import org.eclipse.jetty.server.Server; import org.glassfish.jersey.jetty.JettyHttpContainerFactory; import org.glassfish.jersey.server.ResourceConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.semiot.services.tsdbservice.rest.ApplicationConfig; import ru.semiot.services.tsdbservice.wamp.NewDeviceListener; import ru.semiot.services.tsdbservice.wamp.WAMPClient; import ws.wamp.jawampa.WampClient; import java.io.IOException; import java.net.URI; import javax.ws.rs.core.UriBuilder; public class Launcher { private static final Logger logger = LoggerFactory.getLogger(Launcher.class); private static final long TIMEOUT = 5000; public static void main(String[] args) { Launcher launcher = new Launcher(); launcher.run(); } private void run() { boolean isConnected = false; while (!isConnected) { try { TSDBClient.getInstance().init(); logger.info("Connected to the tsdb"); isConnected = true; } catch (Exception e) { logger.warn(e.getMessage()); logger.warn("Can't connect to the tsdb! Retry in {}ms", TIMEOUT); try { Thread.sleep(TIMEOUT); } catch (InterruptedException ex) { logger.error(ex.getMessage()); } } } try { WAMPClient.getInstance().init().subscribe((WampClient.State newState) -> { if (newState instanceof WampClient.ConnectedState) { logger.info("Connected to {}", CONFIG.wampUri()); try { NewDeviceListener newDeviceListener = new NewDeviceListener(); WAMPClient.getInstance() .subscribe(CONFIG.topicsSubscriber()) .subscribe(newDeviceListener); } catch (Throwable ex) { logger.debug(ex.getMessage(), ex); } } else if (newState instanceof WampClient.DisconnectedState) { logger.info("Disconnected from {}", CONFIG.wampUri()); } else if (newState instanceof WampClient.ConnectingState) { logger.debug("Connecting to {}", CONFIG.wampUri()); } }); URI uri = UriBuilder.fromUri("http://0.0.0.0/").port(8787).build(); ResourceConfig resourceConfig = new ApplicationConfig(); Server jettyServer = JettyHttpContainerFactory.createServer(uri, resourceConfig); try { jettyServer.start(); jettyServer.join(); } finally { jettyServer.destroy(); } } catch (Exception e) { logger.error(e.getMessage(), e); } finally { try { TSDBClient.getInstance().stop(); WAMPClient.getInstance().close(); } catch (IOException ex) { logger.error(ex.getMessage(), ex); } } } }