simplify ChatBotSupervisor
This commit is contained in:
parent
0477142233
commit
82f5a125bd
@ -185,18 +185,17 @@ public final class ChatBotSupervisor implements AutoCloseable {
|
||||
*/
|
||||
private class RunningBot implements Runnable {
|
||||
private final @NotNull String name;
|
||||
private final @NotNull BotConfig config;
|
||||
private final @NotNull ChatBotFactory<?> factory;
|
||||
private final @NotNull ChatBot bot;
|
||||
|
||||
private final @NotNull Thread thread;
|
||||
private final @NotNull BlockingQueue<@NotNull PendingPost> queue = new ArrayBlockingQueue<>(MESSAGE_QUEUE_SIZE);
|
||||
private final AtomicBoolean stopped = new AtomicBoolean();
|
||||
private volatile ChatBot bot;
|
||||
private final @NotNull AtomicBoolean stopped = new AtomicBoolean();
|
||||
|
||||
public RunningBot(@NotNull String name, @NotNull BotConfig config) {
|
||||
this.name = name;
|
||||
this.config = config;
|
||||
this.factory = getChatBotFactory(config.getType());
|
||||
|
||||
var factory = getChatBotFactory(config.getType());
|
||||
this.bot = factory.create(config);
|
||||
|
||||
log.info("starting bot {}...", name);
|
||||
ChatBotSupport.register(ChatBotSupervisor.this, name, config);
|
||||
@ -206,26 +205,6 @@ public final class ChatBotSupervisor implements AutoCloseable {
|
||||
@Override
|
||||
public void run() {
|
||||
log.info("started bot {}", name);
|
||||
while (!stopped.get()) {
|
||||
var bot = factory.create(config);
|
||||
this.bot = bot;
|
||||
try {
|
||||
loop(bot);
|
||||
} catch (Exception ex) {
|
||||
log.warn("bot {} threw an exception and will be recreated", name, ex);
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
bot.onStop();
|
||||
} catch (Exception ex) {
|
||||
log.warn("bot {} threw an exception during shutdown", name, ex);
|
||||
}
|
||||
}
|
||||
log.info("stopped bot {}", name);
|
||||
}
|
||||
|
||||
private void loop(@NotNull ChatBot bot) {
|
||||
while (!stopped.get()) {
|
||||
try {
|
||||
var post = queue.take();
|
||||
@ -239,8 +218,21 @@ public final class ChatBotSupervisor implements AutoCloseable {
|
||||
bot.onMessage(ChatBotSupervisor.this.socketSupervisor.get(), post.post());
|
||||
}
|
||||
} catch (InterruptedException _) {
|
||||
// ignore
|
||||
} catch (Exception ex) {
|
||||
log.warn("bot {} threw an exception during message handling", name, ex);
|
||||
} catch (Throwable ex) {
|
||||
log.error("bot {} threw an error during message handling", name, ex);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
bot.onStop();
|
||||
} catch (Exception ex) {
|
||||
log.warn("bot {} threw an exception during shutdown", name, ex);
|
||||
}
|
||||
|
||||
log.info("stopped bot {}", name);
|
||||
}
|
||||
|
||||
@NonBlocking
|
||||
@ -269,8 +261,7 @@ public final class ChatBotSupervisor implements AutoCloseable {
|
||||
}
|
||||
|
||||
public @NotNull BotConfig getConfig() {
|
||||
var bot = this.bot;
|
||||
return bot != null ? bot.getConfig() : config;
|
||||
return bot.getConfig();
|
||||
}
|
||||
|
||||
private record PendingPost(@NotNull Message.Post post, @NotNull Instant expiration) {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user