Skip to content

Commit 24479de

Browse files
authored
Merge pull request #21 from BookmapAPI/implement-settings-listener
Implement settings listener
2 parents 850ec0a + 7ff9c05 commit 24479de

13 files changed

Lines changed: 153 additions & 41 deletions

File tree

client-rpc/src/bookmap/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
add_on_position_update_handler,\
3131
add_broadcasting_handler, \
3232
add_broadcasting_provider_status_handler, \
33+
add_broadcasting_settings_handler, \
3334
create_order_book, \
3435
on_depth, \
3536
get_bbo, \

client-rpc/src/bookmap/bookmap.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
BROADCASTING = "29"
5959
REGISTER_BROADCASTING_PROVIDER = "30"
6060
PROVIDERS_STATUS = "31"
61+
BROADCASTING_SETTINGS = "32"
6162
ERROR = "-1"
6263

6364
counter_lock = threading.Lock()
@@ -285,6 +286,8 @@ def _get_parameters_from_msg(type_token: str, msg: str):
285286
return tokens[1], json.loads(tokens[2])
286287
elif type_token == PROVIDERS_STATUS:
287288
return [json.loads(tokens[1])]
289+
elif type_token == BROADCASTING_SETTINGS:
290+
return tokens[1], json.loads(tokens[2])
288291
else:
289292
# default case when there should not be any parameter parsing, but instead the msg should be sent to a server
290293
return type_token, msg
@@ -722,6 +725,13 @@ def add_broadcasting_provider_status_handler(
722725
_add_event_handler(addon, PROVIDERS_STATUS, handler)
723726

724727

728+
def add_broadcasting_settings_handler(
729+
addon: typing.Dict[str, object],
730+
handler: typing.Callable[[str, object], None]
731+
) -> None:
732+
_add_event_handler(addon, BROADCASTING_SETTINGS, handler)
733+
734+
725735
################ Util objects
726736
### Order book
727737
def create_order_book() -> typing.Dict[str, SortedDict]:

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,14 @@ public void subscribeToLiveData(String generatorName, EventLoop eventLoop, Strin
6868

6969
// Trying to subscribe for live events.
7070
// Broadcasting will notify us of a successful subscription through the LiveConnectionListener.
71-
broadcasterConsumer.subscribeToLiveData(providerName, generatorInfo.getGeneratorName(),
72-
Event.class, eventListener, subscriptionListener);
71+
7372
if (doesRequireFiltering) {
74-
broadcasterConsumer.setListenersForGenerator(providerName, generatorName, filterListener, new SettingsListener());
73+
broadcasterConsumer.setListenersForGenerator(providerName, generatorName, filterListener, new SettingsListener(eventLoop, generatorName));
7574
} else {
7675
broadcasterConsumer.setListenersForGenerator(providerName, generatorName, null, null);
7776
}
77+
broadcasterConsumer.subscribeToLiveData(providerName, generatorInfo.getGeneratorName(),
78+
Event.class, eventListener, subscriptionListener);
7879
});
7980
}
8081
}

serverside-rpc/src/main/java/com/bookmap/api/rpc/server/addon/listeners/broadcasting/EventListener.java

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@
33
import com.bookmap.addons.broadcasting.api.view.listeners.LiveEventListener;
44
import com.bookmap.api.rpc.server.EventLoop;
55
import com.bookmap.api.rpc.server.data.outcome.BroadcastingEvent;
6-
import com.google.gson.JsonObject;
7-
8-
import java.lang.reflect.Field;
9-
import java.util.*;
10-
import java.util.concurrent.ConcurrentHashMap;
6+
import com.bookmap.api.rpc.server.utils.JsonUtil;
117

128
/**
139
* The listener that is passed to BrAPI.
@@ -17,7 +13,6 @@ public class EventListener implements LiveEventListener {
1713

1814
private final EventLoop eventLoop;
1915
private final String generatorName;
20-
private final Map<Class<?>, Field[]> classToFields = new ConcurrentHashMap<>();
2116
private final FilterListener filterListener;
2217

2318
public EventListener(EventLoop eventLoop, String generatorName, FilterListener filterListener) {
@@ -34,43 +29,12 @@ public void giveEvent(Object o) {
3429
}
3530
String event;
3631
try {
37-
event = convertEventToJSON(o);
32+
event = JsonUtil.convertObjectToJsonString(o);
3833
}
3934
catch (IllegalAccessException e) {
4035
throw new RuntimeException("Error during parsing event object", e);
4136
}
4237
eventLoop.pushEvent(new BroadcastingEvent(generatorName, event));
4338
}
4439
}
45-
46-
private String convertEventToJSON(Object o) throws IllegalAccessException {
47-
JsonObject jsonObject = new JsonObject();
48-
Class<?> clazz = o.getClass();
49-
if (classToFields.containsKey(clazz)) {
50-
Field[] fields = classToFields.get(clazz);
51-
for (Field field : fields) {
52-
field.setAccessible(true);
53-
String fieldName = field.getName();
54-
Object fieldValue = field.get(o);
55-
jsonObject.addProperty(fieldName, fieldValue.toString());
56-
}
57-
} else {
58-
Field[] fields = clazz.getDeclaredFields();
59-
List<Field> fieldNames = new ArrayList<>();
60-
for (Field field : fields) {
61-
field.setAccessible(true);
62-
63-
String fieldName = field.getName();
64-
if (fieldName.equals("serialVersionUID")) {
65-
continue;
66-
}
67-
fieldNames.add(field);
68-
Object fieldValue = field.get(o);
69-
jsonObject.addProperty(fieldName, fieldValue.toString());
70-
}
71-
classToFields.put(clazz, fieldNames.toArray(new Field[0]));
72-
}
73-
74-
return jsonObject.toString();
75-
}
7640
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,31 @@
11
package com.bookmap.api.rpc.server.addon.listeners.broadcasting;
22

33
import com.bookmap.addons.broadcasting.api.view.listeners.UpdateSettingsListener;
4+
import com.bookmap.api.rpc.server.EventLoop;
5+
import com.bookmap.api.rpc.server.data.outcome.BroadcastingSettingsEvent;
6+
import com.bookmap.api.rpc.server.utils.JsonUtil;
47

58
public class SettingsListener implements UpdateSettingsListener {
9+
10+
private final EventLoop eventLoop;
11+
private final String generatorName;
12+
13+
public SettingsListener(EventLoop eventLoop, String generatorName) {
14+
this.eventLoop = eventLoop;
15+
this.generatorName = generatorName;
16+
}
17+
618
@Override
719
public void reactToSettingsUpdate(Object o) {
20+
if (o != null) {
21+
String event;
22+
try {
23+
event = JsonUtil.convertObjectToJsonString(o);
24+
}
25+
catch (IllegalAccessException e) {
26+
throw new RuntimeException("Error during parsing event object", e);
27+
}
28+
eventLoop.pushEvent(new BroadcastingSettingsEvent(generatorName, event));
29+
}
830
}
931
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.bookmap.api.rpc.server.data.outcome;
2+
3+
import com.bookmap.api.rpc.server.data.utils.AbstractEvent;
4+
import com.bookmap.api.rpc.server.data.utils.Type;
5+
6+
public class BroadcastingSettingsEvent extends AbstractEvent {
7+
8+
public final String event;
9+
public final String generatorName;
10+
11+
public BroadcastingSettingsEvent(String generatorName, String event) {
12+
super(Type.BROADCASTING_SETTINGS);
13+
this.generatorName = generatorName;
14+
this.event = event;
15+
}
16+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.bookmap.api.rpc.server.data.outcome.converters;
2+
3+
import com.bookmap.api.rpc.server.data.outcome.BroadcastingSettingsEvent;
4+
import com.bookmap.api.rpc.server.data.utils.EventConverter;
5+
6+
import javax.inject.Inject;
7+
import javax.inject.Singleton;
8+
9+
@Singleton
10+
public class BroadcastingSettingsConverter implements EventConverter<BroadcastingSettingsEvent, String> {
11+
@Inject
12+
BroadcastingSettingsConverter() {}
13+
14+
@Override
15+
public String convert(BroadcastingSettingsEvent entity) {
16+
return entity.type.code +
17+
FIELDS_DELIMITER +
18+
entity.generatorName +
19+
FIELDS_DELIMITER +
20+
entity.event;
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.bookmap.api.rpc.server.data.outcome.converters.modules;
2+
3+
import com.bookmap.api.rpc.server.data.outcome.converters.BroadcastingSettingsConverter;
4+
import com.bookmap.api.rpc.server.data.utils.AbstractEvent;
5+
import com.bookmap.api.rpc.server.data.utils.EventConverter;
6+
import com.bookmap.api.rpc.server.data.utils.EventTypeMapKey;
7+
import com.bookmap.api.rpc.server.data.utils.Type;
8+
import dagger.Binds;
9+
import dagger.Module;
10+
import dagger.multibindings.IntoMap;
11+
12+
@Module
13+
public abstract class BroadcastingSettingsConverterModule {
14+
15+
@Binds
16+
@IntoMap
17+
@EventTypeMapKey(Type.BROADCASTING_SETTINGS)
18+
abstract EventConverter<? extends AbstractEvent, String> converter(BroadcastingSettingsConverter converter);
19+
}

serverside-rpc/src/main/java/com/bookmap/api/rpc/server/data/utils/Type.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public enum Type {
4242
BROADCASTING(29),
4343
REGISTER_BROADCASTING_PROVIDER(30),
4444
PROVIDERS_STATUS(31),
45+
BROADCASTING_SETTINGS(32),
4546
ERROR(-1),
4647
UNKNOWN(-2147483648);
4748

serverside-rpc/src/main/java/com/bookmap/api/rpc/server/data/utils/modules/OutcomeConverterManagerFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
modules = {
1212
BalanceConverterModule.class,
1313
BroadcastingConverterModule.class,
14+
BroadcastingSettingsConverterModule.class,
1415
DepthDataConverterModule.class,
1516
ErrorEventConverterModule.class,
1617
IndicatorResponseConverterModule.class,

0 commit comments

Comments
 (0)