Skip to content

Commit ae2a05a

Browse files
committed
Refactor Addon to avoid cyclic dependency
1 parent 275d49f commit ae2a05a

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

serverside-rpc/src/main/java/com/bookmap/api/rpc/server/addon/ExternalProcessInstance.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,10 @@ public ExternalProcessInstance(File scriptFile, ConcurrentMap<String, State> ali
8080
}, PERIODS_OF_HEALTH_CHECK_SECONDS, PERIODS_OF_HEALTH_CHECK_SECONDS, TimeUnit.SECONDS);
8181
}
8282

83-
public ExternalProcessInstance(File scriptFile, ConcurrentMap<String, State> aliasToState, ConcurrentMap<String, CompletableFuture<?>> aliasToInitializationTask, CompletableFuture<Integer> pythonExitCode, Connector connector) {
83+
public ExternalProcessInstance(File scriptFile, ConcurrentMap<String, State> aliasToState, ConcurrentMap<String, CompletableFuture<?>> aliasToInitializationTask, CompletableFuture<Integer> pythonExitCode, Connector connector, EventLoop eventLoop) {
8484
this(scriptFile, aliasToState, aliasToInitializationTask, pythonExitCode);
8585
this.connector = connector;
86+
this.eventLoop = eventLoop;
8687
}
8788

8889
@Override
@@ -118,7 +119,6 @@ public void run() {
118119
}
119120
Log.info("Processed started");
120121
server.start();
121-
eventLoop = new EventLoop();
122122
IncomeConverterManager incomeConverterManager = DaggerIncomeConverterManagerFactory.create().incomeConverterManager();
123123
OutcomeConverterManager outcomeConverterManager = DaggerOutcomeConverterManagerFactory.create().outcomeConverterManager();
124124
SendingEventToClientHandler sendingEventToClientHandler = new SendingEventToClientHandler(outcomeConverterManager, server);

serverside-rpc/src/main/java/com/bookmap/api/rpc/server/addon/RpcServerAddon.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package com.bookmap.api.rpc.server.addon;
22

33
import com.bookmap.addons.broadcasting.api.view.BroadcasterConsumer;
4+
import com.bookmap.addons.broadcasting.api.view.listeners.ProviderStatusListener;
45
import com.bookmap.addons.broadcasting.implementations.view.BroadcastFactory;
56
import com.bookmap.api.rpc.server.*;
7+
import com.bookmap.api.rpc.server.addon.listeners.broadcasting.RpcProviderStatusListener;
68
import com.bookmap.api.rpc.server.data.outcome.InstrumentDetachedEvent;
79
import com.bookmap.api.rpc.server.data.outcome.InstrumentInfoEvent;
810
import com.bookmap.api.rpc.server.data.outcome.OnIntervalEvent;
911
import com.bookmap.api.rpc.server.data.outcome.ServerOffEvent;
1012
import com.bookmap.api.rpc.server.exceptions.FatalServerException;
1113
import com.bookmap.api.rpc.server.log.PythonStackTraceTracker;
1214
import com.bookmap.api.rpc.server.log.RpcLogger;
15+
import com.bookmap.api.rpc.server.services.ProviderStatusService;
1316
import velox.api.layer1.Layer1ApiProvider;
1417
import velox.api.layer1.annotations.*;
1518
import velox.api.layer1.common.DirectoryResolver;
@@ -122,11 +125,16 @@ public void initialize(String alias, InstrumentInfo instrumentInfo, Api api, Ini
122125
Layer1ApiProvider provider = api.getProvider();
123126

124127
ListenableHelper.addListeners(provider, this);
125-
broadcaster = BroadcastFactory.getBroadcasterConsumer(provider, this.getClass().getSimpleName(), this.getClass());
128+
129+
EventLoop eventLoop = new EventLoop();
130+
ProviderStatusService providerStatusService = new ProviderStatusService(eventLoop);
131+
ProviderStatusListener providerStatusListener = new RpcProviderStatusListener(providerStatusService);
132+
broadcaster = BroadcastFactory.getBroadcasterConsumer(provider, this.getClass().getSimpleName(), this.getClass(), providerStatusListener);
133+
providerStatusService.setBroadcaster(broadcaster);
126134
connector = new Connector(broadcaster);
127135

128136
if (instance == null) {
129-
instance = new ExternalProcessInstance(SCRIPT_FILE, ALIAS_TO_STATE, ALIAS_TO_INITIALIZATION_TASK, pythonExitCode, connector);
137+
instance = new ExternalProcessInstance(SCRIPT_FILE, ALIAS_TO_STATE, ALIAS_TO_INITIALIZATION_TASK, pythonExitCode, connector, eventLoop);
130138
instance.run();
131139
}
132140
this.initialState.instrumentApi.addIntervalListeners(this);

0 commit comments

Comments
 (0)