diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/JupiterPerpsAlarm.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/JupiterPerpsAlarm.tjava new file mode 100644 index 0000000..e1753a8 --- /dev/null +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/JupiterPerpsAlarm.tjava @@ -0,0 +1,4 @@ +package com.r35157.jupiterperpsalarm; + +public class JupiterPerpsAlarm { +} diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/AlarmAction.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmAction.tjava similarity index 71% rename from src/main/tjava/com/r35157/jupiterperpsalarm/AlarmAction.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmAction.tjava index e8cfeb4..7b17cbd 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/AlarmAction.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmAction.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; @FunctionalInterface public interface AlarmAction { diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/AlarmConfigurationParser.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmConfigurationParser.tjava similarity index 99% rename from src/main/tjava/com/r35157/jupiterperpsalarm/AlarmConfigurationParser.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmConfigurationParser.tjava index 0b2c32e..5857cbf 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/AlarmConfigurationParser.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmConfigurationParser.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.io.IOException; import java.math.BigDecimal; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/AlarmTrigger.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmTrigger.tjava similarity index 55% rename from src/main/tjava/com/r35157/jupiterperpsalarm/AlarmTrigger.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmTrigger.tjava index aa8951a..d488d23 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/AlarmTrigger.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AlarmTrigger.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; public enum AlarmTrigger { ONETIME, diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/AssetPriceAlarmMonitor.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AssetPriceAlarmMonitor.tjava similarity index 98% rename from src/main/tjava/com/r35157/jupiterperpsalarm/AssetPriceAlarmMonitor.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AssetPriceAlarmMonitor.tjava index 5d3da9b..6642bba 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/AssetPriceAlarmMonitor.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/AssetPriceAlarmMonitor.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.time.Duration; import java.time.Instant; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/CompositeAlarmAction.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/CompositeAlarmAction.tjava similarity index 92% rename from src/main/tjava/com/r35157/jupiterperpsalarm/CompositeAlarmAction.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/CompositeAlarmAction.tjava index cdd0cec..7e6a24e 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/CompositeAlarmAction.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/CompositeAlarmAction.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.util.List; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/ConsoleAlarmAction.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/ConsoleAlarmAction.tjava similarity index 95% rename from src/main/tjava/com/r35157/jupiterperpsalarm/ConsoleAlarmAction.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/ConsoleAlarmAction.tjava index f58587d..e3fa205 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/ConsoleAlarmAction.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/ConsoleAlarmAction.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; public final class ConsoleAlarmAction implements AlarmAction { @Override diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/DovesAgPriceFeedDecoder.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/DovesAgPriceFeedDecoder.tjava similarity index 98% rename from src/main/tjava/com/r35157/jupiterperpsalarm/DovesAgPriceFeedDecoder.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/DovesAgPriceFeedDecoder.tjava index 3c7b097..d4a8c1a 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/DovesAgPriceFeedDecoder.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/DovesAgPriceFeedDecoder.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.math.BigDecimal; import java.math.BigInteger; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/Main.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/JupiterPerpsAlarmImpl.tjava similarity index 98% rename from src/main/tjava/com/r35157/jupiterperpsalarm/Main.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/JupiterPerpsAlarmImpl.tjava index 1819d30..16e99b8 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/Main.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/JupiterPerpsAlarmImpl.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.net.URI; import java.nio.file.Path; @@ -9,7 +9,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; -public final class Main { +public final class JupiterPerpsAlarmImpl { public static void main(String[] args) throws Exception { Config config; @@ -196,6 +196,6 @@ public final class Main { } } - private Main() { + private JupiterPerpsAlarmImpl() { } } diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/JupiterPerpsAsset.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/JupiterPerpsAsset.tjava similarity index 89% rename from src/main/tjava/com/r35157/jupiterperpsalarm/JupiterPerpsAsset.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/JupiterPerpsAsset.tjava index c17a74e..c9fa111 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/JupiterPerpsAsset.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/JupiterPerpsAsset.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; public enum JupiterPerpsAsset { SOL("FYq2BWQ1V5P1WFBqr3qB2Kb5yHVvSv7upzKodgQE5zXh"), diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/OraclePrice.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/OraclePrice.tjava similarity index 86% rename from src/main/tjava/com/r35157/jupiterperpsalarm/OraclePrice.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/OraclePrice.tjava index 4e1a6f8..f64e654 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/OraclePrice.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/OraclePrice.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.math.BigDecimal; import java.math.BigInteger; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/OracleWebSocketClient.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/OracleWebSocketClient.tjava similarity index 99% rename from src/main/tjava/com/r35157/jupiterperpsalarm/OracleWebSocketClient.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/OracleWebSocketClient.tjava index 0c4330c..e9adaea 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/OracleWebSocketClient.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/OracleWebSocketClient.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.net.URI; import java.net.http.HttpClient; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/PriceAlarm.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarm.tjava similarity index 96% rename from src/main/tjava/com/r35157/jupiterperpsalarm/PriceAlarm.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarm.tjava index e39c0ec..13ad000 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/PriceAlarm.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarm.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; public final class PriceAlarm { diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/PriceAlarmDefinition.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarmDefinition.tjava similarity index 94% rename from src/main/tjava/com/r35157/jupiterperpsalarm/PriceAlarmDefinition.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarmDefinition.tjava index 192ca2f..d89ce33 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/PriceAlarmDefinition.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceAlarmDefinition.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.math.BigDecimal; import java.util.Objects; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/PriceDirection.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceDirection.tjava similarity index 90% rename from src/main/tjava/com/r35157/jupiterperpsalarm/PriceDirection.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceDirection.tjava index 2811f3a..4db7bec 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/PriceDirection.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PriceDirection.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.math.BigDecimal; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/PushoverAlarmAction.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PushoverAlarmAction.tjava similarity index 98% rename from src/main/tjava/com/r35157/jupiterperpsalarm/PushoverAlarmAction.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PushoverAlarmAction.tjava index 78277c2..2b5bd0d 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/PushoverAlarmAction.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/PushoverAlarmAction.tjava @@ -1,4 +1,4 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.net.URI; import java.net.URLEncoder; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/SelfTest.tjava b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/SelfTest.tjava similarity index 98% rename from src/main/tjava/com/r35157/jupiterperpsalarm/SelfTest.tjava rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/SelfTest.tjava index 32c149e..03ba83a 100644 --- a/src/main/tjava/com/r35157/jupiterperpsalarm/SelfTest.tjava +++ b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/SelfTest.tjava @@ -1,7 +1,6 @@ -package com.r35157.jupiterperpsalarm; +package com.r35157.jupiterperpsalarm.impl.ref; import java.math.BigDecimal; -import java.math.BigInteger; import java.time.Instant; import java.util.ArrayList; import java.util.List; diff --git a/src/main/tjava/com/r35157/nenjim/hubd/NenjimHub.tjava b/src/main/tjava/com/r35157/nenjim/hubd/NenjimHub.tjava index 2685456..d3f7bbf 100644 --- a/src/main/tjava/com/r35157/nenjim/hubd/NenjimHub.tjava +++ b/src/main/tjava/com/r35157/nenjim/hubd/NenjimHub.tjava @@ -1,18 +1,30 @@ package com.r35157.nenjim.hubd; import com.r35157.nenjim.hubd.journal.Journal; +import crypto.r35157.nenjim.NenjimProcess; import org.jetbrains.annotations.NotNull; +import java.util.HashMap; + public interface NenjimHub { + /** + * Starts a process based on the provided fully qualified interface name. + * The actual implementation that is run is binded according to the Context. + * + * @param fqInterfaceName the fully qualified interface name of the process to start. The interface must extend the {@code NenjimProcess} interface. + */ + void startProcess(String fqInterfaceName); + + /** + * Provides a map of all running processes managed by the NenjimHub, keyed by the processId. + * + * @return a map of {@code NenjimProcess} running processes + */ + HashMap getRunningProcesses(); + /** * A no-operation (noop). This method is suppoted to do nothing. */ void noop(); - - /** - * - * @param journal - */ - void monitorJournal(@NotNull Journal journal); } diff --git a/src/main/tjava/com/r35157/nenjim/hubd/impl/ref/Main.tjava b/src/main/tjava/com/r35157/nenjim/hubd/impl/ref/Main.tjava index ba1dff8..b34f69f 100644 --- a/src/main/tjava/com/r35157/nenjim/hubd/impl/ref/Main.tjava +++ b/src/main/tjava/com/r35157/nenjim/hubd/impl/ref/Main.tjava @@ -15,12 +15,9 @@ import java.nio.file.Path; public class Main { static void main(String[] args) throws Exception { - new Main(args).start(); - } + NenjimHub nenjimHub = new NenjimHubImpl(); - public Main(String[] args) throws Exception { - log.info("Initializing NenjimHub..."); - try { +/* try { log.info("Auto-starting 2 Nenjim application(s)..."); log.info(" Starting AssetAZCore..."); //com.r35157.; @@ -30,7 +27,7 @@ public class Main { "--config=/home/minimons/projects/com_r35157_nenjim-hubd-impl_ref/conf/alarms.conf" }; com.r35157.jupiterperpsalarm.Main.main(params); - +*/ //hub = new NenjimHubImpl(); /* @@ -60,12 +57,6 @@ public class Main { NenjimKicker kicker = (NenjimKicker)instance; */ //int a = 0; - } finally { - log.info("NenjimHub shutdown!"); - } - } - - private void start() { } private static final Logger log = LoggerFactory.getLogger(Main.class); diff --git a/src/main/tjava/com/r35157/nenjim/hubd/impl/ref/NenjimHubImpl.tjava b/src/main/tjava/com/r35157/nenjim/hubd/impl/ref/NenjimHubImpl.tjava index d1f88a5..8b165e9 100644 --- a/src/main/tjava/com/r35157/nenjim/hubd/impl/ref/NenjimHubImpl.tjava +++ b/src/main/tjava/com/r35157/nenjim/hubd/impl/ref/NenjimHubImpl.tjava @@ -2,20 +2,97 @@ package com.r35157.nenjim.hubd.impl.ref; import com.r35157.nenjim.hubd.NenjimHub; import com.r35157.nenjim.hubd.journal.Journal; +import crypto.r35157.nenjim.NenjimProcess; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.HashMap; + public class NenjimHubImpl implements NenjimHub { - @Override - public void noop() { - log.debug("NOOP executed."); + public NenjimHubImpl() throws Exception { + log.info("Initializing NenjimHub..."); + + nextProcessId = 1; + //processesScope = new StructuredTaskScope.ShutdownOnFailure(); + processes = new HashMap<>(); + + log.info("Starting autorun processes:"); + startAutoRunProcesses(); + waitForAndShutdown(); + } + + private void waitForAndShutdown() { + System.out.println("Done - Now online!"); + + /* + try { + processesScope.join(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + processesScope.close(); + */ + System.out.println("Nenjim is now shutdown (stopped all processes)!"); + } + + private void startAutoRunProcesses() throws Exception { + String[] processesToAutoStart = { + + "crypto.r35157.nenjim.NenjimHubSocketAdminAdapter", + "crypto.r35157.nenjim.NenjimHubRestAdminAdapter", + "crypto.r35157.nenjim.NenjimHubRPCAdminAdapter", + "crypto.r35157.nenjim.SuwimoHub", + "crypto.r35157.nenjim.SodaTaskManager", + "crypto.r35157.assetaz.hub.AssetAZHub" + }; + + for (String processInterfaceName : processesToAutoStart) { + startProcess(processInterfaceName); + } } @Override - public void monitorJournal(@NotNull Journal journal) { - log.warn("monitorJournal IS NOT IMPLEMENTED!"); + public void startProcess(String className) { + ClassLoader loader = ClassLoader.getSystemClassLoader(); + + /*processesScope.fork(() -> { + Class clazz = loader.loadClass(className); + if (!NenjimProcess.class.isAssignableFrom(clazz)) { + throw new IllegalArgumentException("'" + className + "' does NOT implement NenjimProcess"); + } + + NenjimProcess proc = (NenjimProcess) clazz.getDeclaredConstructor().newInstance(); + + processes.put(nextProcessId, proc); + nextProcessId++; + + NenjimContext context = new NenjimContext() { }; + proc.setNenjimProcessContext(context); + proc.setNenjimHub(this); + + Thread.currentThread().setName(proc.getProcessName()); + System.out.println(" Starter Nenjim process '" + proc.getProcessName() + "'"); + proc.run(); + + return null; + });*/ + } + + @Override + public HashMap getRunningProcesses() { + return processes; + } + + @Override + public void noop() { + System.out.println("NenjimHub command: 'noop'"); } private static final Logger log = LoggerFactory.getLogger(NenjimHubImpl.class); + + private HashMap processes; + //private StructuredTaskScope.ShutdownOnFailure processesScope; + private int nextProcessId; }