diff --git a/src/main/tjava/com/fanitas/evelyn/core/Evelyn.tjava b/src/main/tjava/com/fanitas/evelyn/core/Evelyn.tjava index 70f4e7b..9730a8c 100644 --- a/src/main/tjava/com/fanitas/evelyn/core/Evelyn.tjava +++ b/src/main/tjava/com/fanitas/evelyn/core/Evelyn.tjava @@ -1,5 +1,9 @@ package com.fanitas.evelyn.core; +import org.jetbrains.annotations.NotNull; + public interface Evelyn { void executeService() throws Exception; + + @NotNull String getStatusReport(); } diff --git a/src/main/tjava/com/fanitas/evelyn/core/impl/ref/EvelynImpl.tjava b/src/main/tjava/com/fanitas/evelyn/core/impl/ref/EvelynImpl.tjava index 7e2cb53..70a1d22 100644 --- a/src/main/tjava/com/fanitas/evelyn/core/impl/ref/EvelynImpl.tjava +++ b/src/main/tjava/com/fanitas/evelyn/core/impl/ref/EvelynImpl.tjava @@ -13,6 +13,7 @@ import com.r35157.libs.solana.SolanaConstants; import com.r35157.libs.valuetypes.basic.AssetPrice; import com.r35157.libs.valuetypes.basic.MoneyAmount; import com.r35157.libs.valuetypes.basic.TradingPair; +import org.jetbrains.annotations.NotNull; import java.math.BigDecimal; import java.util.*; @@ -27,7 +28,7 @@ import static com.r35157.libs.solana.valuetypes.economic.SolanaSPLTokenProgram.T public class EvelynImpl implements Evelyn { - public EvelynImpl( + /*public EvelynImpl( State state, DesiredPositionCalculator desiredPositionCalculator, Raydium raydium, @@ -37,13 +38,21 @@ public class EvelynImpl implements Evelyn { this.desiredPositionCalculator = desiredPositionCalculator; this.raydium = raydium; this.solanaChain = solanaChain; + }*/ + public EvelynImpl() { } @Override public void executeService() throws Exception { - handleRebalancingProposal(); + //handleRebalancingProposal(); } + @Override + public @NotNull String getStatusReport() { + return "Hello World!"; + } + + /* private SPLTokenHolding getSPLHolding(ΩSolanaAddressΩ ownerAddress, ΩSPLMintAddressΩ splMintAddress) throws Exception { Map<ΩSPLMintAddressΩ, SPLTokenHolding> holdings = new HashMap<>(); @@ -263,4 +272,5 @@ public class EvelynImpl implements Evelyn { private final DesiredPositionCalculator desiredPositionCalculator; private final Raydium raydium; private final SolanaBlockChain solanaChain; + */ } diff --git a/src/main/tjava/com/fanitas/evelyn/core/impl/ref/Main.tjava b/src/main/tjava/com/fanitas/evelyn/core/impl/ref/Main.tjava deleted file mode 100644 index 8e41d9a..0000000 --- a/src/main/tjava/com/fanitas/evelyn/core/impl/ref/Main.tjava +++ /dev/null @@ -1,51 +0,0 @@ -package com.fanitas.evelyn.core.impl.ref; - -import com.fanitas.evelyn.core.Evelyn; -import com.fanitas.evelyn.core.DesiredPositionCalculator; -import com.fanitas.evelyn.core.State; -import com.r35157.libs.raydium.*; -import com.r35157.libs.raydium.impl.ref.RaydiumImpl; -import com.r35157.libs.solana.SPLTokenHolding; -import com.r35157.libs.solana.SPLTokenSupply; -import com.r35157.libs.solana.SolanaAccountInfo; -import com.r35157.libs.solana.SolanaBlockChain; -import com.r35157.libs.solana.impl.ref.SolanaBlockChainImpl; -import com.r35157.libs.solana.valuetypes.SolanaProgramDerivedAddress; -import com.r35157.libs.solana.valuetypes.economic.SolanaSPLTokenProgram; -import com.r35157.libs.valuetypes.basic.Range; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.Set; - -public class Main { - - static void main() throws Exception { - log.info("Initializing Evelyn..."); - SolanaBlockChain solanaChain = new SolanaBlockChainImpl(); - Raydium raydium = new RaydiumImpl(solanaChain); - System.out.println(" Done."); - - State state = new StateImpl(raydium); - DesiredPositionCalculator desiredPositionCalculator = new DesiredPositionCalculatorImpl( - state.getCurveWidth(), - state.getLiquidityPositions() - ); - - Evelyn evelyn = new EvelynImpl( - state, - desiredPositionCalculator, - raydium, - solanaChain - ); - - evelyn.executeService(); - } - - private static final Logger log = LoggerFactory.getLogger(Main.class); -} \ No newline at end of file diff --git a/src/main/tjava/com/r35157/evelyn/emc/impl/ref/EvelynMissionControlImpl.tjava b/src/main/tjava/com/r35157/evelyn/emc/impl/ref/EvelynMissionControlImpl.tjava index a0af80d..7c6b42f 100644 --- a/src/main/tjava/com/r35157/evelyn/emc/impl/ref/EvelynMissionControlImpl.tjava +++ b/src/main/tjava/com/r35157/evelyn/emc/impl/ref/EvelynMissionControlImpl.tjava @@ -1,13 +1,11 @@ package com.r35157.evelyn.emc.impl.ref; import com.r35157.evelyn.emc.EvelynMissionControl; -import javafx.application.Platform; +import com.r35157.libs.javafx.JavaFxRuntime; import javafx.scene.Scene; import javafx.scene.control.TextArea; import javafx.stage.Stage; -import java.util.Objects; - public final class EvelynMissionControlImpl/**/ implements EvelynMissionControl { public EvelynMissionControlImpl(/*T evelyn*/) { @@ -16,20 +14,22 @@ public final class EvelynMissionControlImpl/**/ implements EvelynMissionContr @Override public void start() { - Platform.startup(() -> { - TextArea text = new TextArea(""" - Evelyn Mission Control + JavaFxRuntime.runLater(this::showWindow); + } - Evelyn is running. - Connected to: %s - """.formatted("Test123"/*evelyn.getClass().getName())*/)); - text.setEditable(false); + private void showWindow() { + TextArea text = new TextArea(""" + Evelyn Mission Control - Stage window = new Stage(); - window.setTitle("Evelyn Mission Control"); - window.setScene(new Scene(text, 600, 400)); - window.show(); - }); + Evelyn is running. + Connected to: %s + """.formatted("Test123"/*evelyn.getClass().getName())*/)); + text.setEditable(false); + + Stage window = new Stage(); + window.setTitle("Evelyn Mission Control"); + window.setScene(new Scene(text, 600, 400)); + window.show(); } //private final T evelyn; diff --git a/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/TriggerConfiguration.java b/src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/TriggerConfiguration.tjava similarity index 100% rename from src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/TriggerConfiguration.java rename to src/main/tjava/com/r35157/jupiterperpsalarm/impl/ref/TriggerConfiguration.tjava diff --git a/src/main/tjava/com/r35157/libs/javafx/JavaFxRuntime.tjava b/src/main/tjava/com/r35157/libs/javafx/JavaFxRuntime.tjava new file mode 100644 index 0000000..18286db --- /dev/null +++ b/src/main/tjava/com/r35157/libs/javafx/JavaFxRuntime.tjava @@ -0,0 +1,25 @@ +package com.r35157.libs.javafx; + +import javafx.application.Platform; + +public final class JavaFxRuntime { + + public static void runLater(Runnable runnable) { + initialize(); + Platform.runLater(runnable); + } + + private static synchronized void initialize() { + if (initialized) { + return; + } + + Platform.startup(() -> Platform.setImplicitExit(false)); + initialized = true; + } + + private JavaFxRuntime() { + } + + private static boolean initialized; +} diff --git a/src/main/tjava/com/r35157/nenjim/composer/NenjimComposer.tjava b/src/main/tjava/com/r35157/nenjim/composer/NenjimComposer.tjava new file mode 100644 index 0000000..ed90163 --- /dev/null +++ b/src/main/tjava/com/r35157/nenjim/composer/NenjimComposer.tjava @@ -0,0 +1,5 @@ +package com.r35157.nenjim.composer; + +public interface NenjimComposer { + void start(); +} diff --git a/src/main/tjava/com/r35157/nenjim/composer/impl/ref/NenjimComposerImpl.tjava b/src/main/tjava/com/r35157/nenjim/composer/impl/ref/NenjimComposerImpl.tjava new file mode 100644 index 0000000..f126979 --- /dev/null +++ b/src/main/tjava/com/r35157/nenjim/composer/impl/ref/NenjimComposerImpl.tjava @@ -0,0 +1,20 @@ +package com.r35157.nenjim.composer.impl.ref; + +import com.r35157.libs.javafx.JavaFxRuntime; +import com.r35157.nenjim.composer.NenjimComposer; +import javafx.stage.Stage; + +public final class NenjimComposerImpl implements NenjimComposer { + + @Override + public void start() { + JavaFxRuntime.runLater(this::showWindow); + } + + private void showWindow() { + + var window = new Stage(); + window.setTitle("Nenjim Composer"); + window.show(); + } +} 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 8498731..1b98b44 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 @@ -3,8 +3,12 @@ package com.r35157.nenjim.hubd.impl.ref; import com.r35157.evelyn.emc.EvelynMissionControl; import com.r35157.evelyn.emc.impl.ref.EvelynMissionControlImpl; import com.r35157.jupiterperpsalarm.impl.ref.JupiterPerpsAlarmImpl; +import com.r35157.nenjim.composer.NenjimComposer; +import com.r35157.nenjim.composer.impl.ref.NenjimComposerImpl; import com.r35157.nenjim.hubd.NenjimHub; import com.r35157.nenjim.hubd.journal.Journal; +import com.r35157.nenjim.npm.NenjimProcessManager; +import com.r35157.nenjim.npm.impl.ref.NenjimProcessManagerImpl; import crypto.r35157.nenjim.NenjimProcess; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,6 +52,8 @@ public class NenjimHubImpl implements NenjimHub { private void startAutoRunProcesses() throws Exception { startJupiterPerpsAlarm(); // TODO: Hardcoded/hacky way to auto-start but good enough for now. startEvelynMissionControl(); + startNenjimComposer(); + startNenjimProcessManager(); // TODO: Old but more correct way to auto start plugins - but it is currently broken. /* @@ -138,6 +144,36 @@ public class NenjimHubImpl implements NenjimHub { } + private void startNenjimComposer() { + Thread thread = new Thread(() -> { + try { + NenjimComposer nc = new NenjimComposerImpl(); + nc.start(); + } catch (Throwable throwable) { + throwable.printStackTrace(); + } + }, "Nenjim Plugin - Nenjim Composer"); + + thread.setDaemon(false); + thread.start(); + + } + + private void startNenjimProcessManager() { + Thread thread = new Thread(() -> { + try { + NenjimProcessManager npm = new NenjimProcessManagerImpl(); + npm.start(); + } catch (Throwable throwable) { + throwable.printStackTrace(); + } + }, "Nenjim Plugin - Nenjim Process Manager"); + + thread.setDaemon(false); + thread.start(); + + } + private static final Logger log = LoggerFactory.getLogger(NenjimHubImpl.class); private final CountDownLatch shutdownLatch = new CountDownLatch(1); diff --git a/src/main/tjava/com/r35157/nenjim/npm/NenjimProcessManager.tjava b/src/main/tjava/com/r35157/nenjim/npm/NenjimProcessManager.tjava new file mode 100644 index 0000000..00090b8 --- /dev/null +++ b/src/main/tjava/com/r35157/nenjim/npm/NenjimProcessManager.tjava @@ -0,0 +1,5 @@ +package com.r35157.nenjim.npm; + +public interface NenjimProcessManager { + void start(); +} diff --git a/src/main/tjava/com/r35157/nenjim/npm/impl/ref/NenjimProcessManagerImpl.tjava b/src/main/tjava/com/r35157/nenjim/npm/impl/ref/NenjimProcessManagerImpl.tjava new file mode 100644 index 0000000..5b02e11 --- /dev/null +++ b/src/main/tjava/com/r35157/nenjim/npm/impl/ref/NenjimProcessManagerImpl.tjava @@ -0,0 +1,31 @@ +package com.r35157.nenjim.npm.impl.ref; + +import com.r35157.libs.javafx.JavaFxRuntime; +import com.r35157.nenjim.npm.NenjimProcessManager; +import javafx.scene.Scene; +import javafx.scene.control.ListView; +import javafx.scene.control.SelectionMode; +import javafx.stage.Stage; + +public final class NenjimProcessManagerImpl implements NenjimProcessManager { + + @Override + public void start() { + JavaFxRuntime.runLater(this::showWindow); + } + + private void showWindow() { + var processes = new ListView(); + processes.getItems().addAll( + "Nenjim Composer", + "Nenjim Process Manager (this)", + "Evelyn Mission Control" + ); + processes.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + + var window = new Stage(); + window.setTitle("Nenjim Process Manager"); + window.setScene(new Scene(processes, 500, 400)); + window.show(); + } +}