Skip to content

Commit b43d777

Browse files
committed
Add DugaStartedEvent and fix TestBot
1 parent 9d88534 commit b43d777

File tree

6 files changed

+103
-8
lines changed

6 files changed

+103
-8
lines changed

duga-core/src/main/java/net/zomis/duga/chat/ChatBot.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package net.zomis.duga.chat;
22

3+
import net.zomis.duga.chat.events.DugaEvent;
4+
import net.zomis.duga.chat.events.DugaStartedEvent;
5+
36
import java.util.List;
47
import java.util.concurrent.Future;
8+
import java.util.function.Consumer;
59

610
public interface ChatBot {
711

@@ -26,4 +30,6 @@ public interface ChatBot {
2630
void start();
2731

2832
void stop();
33+
34+
<E extends DugaEvent> void registerListener(Class<E> eventClass, Consumer<E> handler);
2935
}

duga-core/src/main/java/net/zomis/duga/chat/StackExchangeChatBot.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import java.io.UnsupportedEncodingException;
44
import java.util.*;
55
import java.util.concurrent.*;
6+
import java.util.function.Consumer;
67
import java.util.logging.Level;
78
import java.util.logging.Logger;
89
import java.util.stream.Collectors;
910

11+
import net.zomis.duga.chat.events.DugaEvent;
12+
import net.zomis.duga.chat.events.DugaStartedEvent;
1013
import org.apache.http.HttpRequest;
1114
import org.apache.http.HttpResponse;
1215
import org.apache.http.ProtocolException;
@@ -43,8 +46,9 @@ public class StackExchangeChatBot implements ChatBot {
4346
private String chatFKey;
4447

4548
private String undeployGoodbyeText;
49+
private final Map<Class<?>, List<Consumer<Object>>> handlers = new HashMap<>();
4650

47-
public StackExchangeChatBot(BotConfiguration config) {
51+
public StackExchangeChatBot(BotConfiguration config) {
4852
this.configuration = config;
4953
this.agent = new MechanizeAgent();
5054

@@ -83,6 +87,7 @@ public void start() {
8387
try {
8488
startBackground();
8589
System.out.println("Start draining");
90+
executeEvent(new DugaStartedEvent(this));
8691
drainMessagesQueue();
8792
} catch (Exception ex) {
8893
System.out.println("Error!! " + ex);
@@ -192,7 +197,7 @@ public Future<List<ChatMessageResponse>> postMessages(WebhookParameters params,
192197
return null;
193198
}
194199

195-
private void attemptPostMessageToChat(final ChatMessage message) {
200+
private ChatMessageResponse attemptPostMessageToChat(final ChatMessage message) {
196201
System.out.println("Real message post: " + message);
197202
Objects.requireNonNull(message, "message");
198203
ChatMessageResponse response = postMessageToChat(message);
@@ -209,6 +214,7 @@ private void attemptPostMessageToChat(final ChatMessage message) {
209214
if (response2.hasException()) {
210215
LOGGER.log(Level.SEVERE, "Failed to post message on retry", response2.getException());
211216
}
217+
return response2;
212218
}
213219
if (response.getException() instanceof ProbablyNotLoggedInException) {
214220
System.out.println("Probably not logged in");
@@ -218,7 +224,9 @@ private void attemptPostMessageToChat(final ChatMessage message) {
218224
if (response2.hasException()) {
219225
LOGGER.log(Level.SEVERE, "Failed to post message on retry", response2.getException());
220226
}
227+
return response2;
221228
}
229+
return response;
222230
}
223231

224232
@Override
@@ -244,7 +252,7 @@ public ChatMessageResponse postNowOnce(ChatMessage message) {
244252

245253
@Override
246254
public ChatMessageResponse postNow(ChatMessage message) {
247-
return null;
255+
return attemptPostMessageToChat(message);
248256
}
249257

250258
private ChatMessageResponse postMessageToChat(final ChatMessage message) {
@@ -302,7 +310,18 @@ public void stop() {
302310
this.executorService.shutdown();
303311
}
304312

305-
private void drainMessagesQueue() {
313+
@Override
314+
public <E extends DugaEvent> void registerListener(Class<E> eventClass, Consumer<E> handler) {
315+
handlers.putIfAbsent(eventClass, new ArrayList<>());
316+
handlers.get(eventClass).add(e -> handler.accept((E) e));
317+
}
318+
319+
private void executeEvent(DugaEvent event) {
320+
List<Consumer<Object>> list = handlers.get(event.getClass());
321+
list.forEach(e -> e.accept(event));
322+
}
323+
324+
private void drainMessagesQueue() {
306325
try {
307326
while (true) {
308327
System.out.println("Posting drained messages...");
Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,62 @@
11
package net.zomis.duga.chat;
22

3+
import net.zomis.duga.chat.events.DugaEvent;
4+
35
import java.util.*;
6+
import java.util.concurrent.Future;
7+
import java.util.function.Consumer;
48

59
public class TestBot implements ChatBot {
610

711
Map<WebhookParameters, List<String>> messages = new HashMap<>();
812

913
WebhookParameters debug = WebhookParameters.toRoom("debug");
1014

11-
@Override
15+
@Deprecated
1216
public void postDebug(String message) {
1317
this.postChat(debug, Collections.singletonList(message));
1418
}
1519

1620
@Override
17-
public void postChat(WebhookParameters params, List<String> messages) {
21+
public Future<List<ChatMessageResponse>> postChat(WebhookParameters params, List<String> messages) {
1822
this.messages.putIfAbsent(params, new ArrayList<>());
1923
this.messages.get(params).addAll(messages);
24+
return null;
2025
}
2126

2227
@Override
2328
public void postSingle(WebhookParameters params, String message) {
2429
this.postChat(params, Collections.singletonList(message));
2530
}
2631

32+
@Override
33+
public Future<ChatMessageResponse> postAsync(ChatMessage message) {
34+
return null;
35+
}
36+
37+
@Override
38+
public ChatMessageResponse postNowOnce(ChatMessage message) {
39+
return null;
40+
}
41+
42+
@Override
43+
public ChatMessageResponse postNow(ChatMessage message) {
44+
return null;
45+
}
46+
47+
@Override
48+
public void start() {
49+
50+
}
51+
52+
@Override
53+
public void stop() {
54+
55+
}
56+
57+
@Override
58+
public <E extends DugaEvent> void registerListener(Class<E> eventClass, Consumer<E> handler) {
59+
60+
}
61+
2762
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package net.zomis.duga.chat.events;
2+
3+
import net.zomis.duga.chat.ChatBot;
4+
5+
public class DugaEvent {
6+
7+
private final ChatBot bot;
8+
9+
public DugaEvent(ChatBot bot) {
10+
this.bot = bot;
11+
}
12+
13+
public ChatBot getBot() {
14+
return bot;
15+
}
16+
17+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package net.zomis.duga.chat.events;
2+
3+
import net.zomis.duga.chat.ChatBot;
4+
5+
public class DugaStartedEvent extends DugaEvent {
6+
7+
public DugaStartedEvent(ChatBot bot) {
8+
super(bot);
9+
}
10+
11+
}

duga-core/src/test/java/net/zomis/duga/DugaTest.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import net.zomis.duga.chat.ChatBot;
55
import net.zomis.duga.chat.StackExchangeChatBot;
66
import net.zomis.duga.chat.WebhookParameters;
7+
import net.zomis.duga.chat.events.DugaStartedEvent;
78

89
import java.io.File;
910
import java.io.FileReader;
@@ -37,10 +38,16 @@ public static void main(String[] args) {
3738
config.setChatThrottle(10000);
3839
config.setChatMaxBurst(2);
3940
config.setChatMinimumDelay(500);
40-
Scanner scanner = new Scanner(System.in);
4141
ChatBot bot = new StackExchangeChatBot(config);
42-
System.out.println("Press enter to start bot");
42+
bot.registerListener(DugaStartedEvent.class, DugaTest::interactive);
43+
System.out.println("Starting bot...");
4344
bot.start();
45+
}
46+
47+
private static void interactive(DugaStartedEvent event) {
48+
System.out.println("Bot started and ready.");
49+
Scanner scanner = new Scanner(System.in);
50+
ChatBot bot = event.getBot();
4451
WebhookParameters room = WebhookParameters.toRoom("16134");
4552
while (true) {
4653
String input = scanner.nextLine();

0 commit comments

Comments
 (0)