Skip to content

Commit 5147060

Browse files
perf: skip RAW event allocation when no listeners registered
Add hasListeners() to EventEmitter and guard RawEvent creation behind it, avoiding unnecessary object allocation on every incoming message.
1 parent ae8969f commit 5147060

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

lib/src/main/java/com/github/getcurrentthread/soopapi/decoder/MessageDispatcher.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@ public void dispatchMessage(String message) {
3737
messageProcessor.execute(
3838
() -> {
3939
try {
40-
eventEmitter.emit(
41-
ChatEvent.RAW,
42-
new RawEvent(ChatEvent.RAW, message, System.currentTimeMillis()));
40+
if (eventEmitter.hasListeners(ChatEvent.RAW)) {
41+
eventEmitter.emit(
42+
ChatEvent.RAW,
43+
new RawEvent(
44+
ChatEvent.RAW, message, System.currentTimeMillis()));
45+
}
4346

4447
String[] parts = message.split(SOOPConstants.F);
4548
if (parts.length < 2) {

lib/src/main/java/com/github/getcurrentthread/soopapi/event/EventEmitter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,9 @@ public void clear() {
6868
public void clear(ChatEvent event) {
6969
listeners.remove(event);
7070
}
71+
72+
public boolean hasListeners(ChatEvent event) {
73+
List<EventListener<? extends BaseEvent>> list = listeners.get(event);
74+
return list != null && !list.isEmpty();
75+
}
7176
}

0 commit comments

Comments
 (0)