#3 change sessions impl
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
package ru.penkrat.stbf.common.command;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import ru.penkrat.stbf.api.BotRequest;
|
||||
import ru.penkrat.stbf.api.BotResponse;
|
||||
import ru.penkrat.stbf.api.CommandChain;
|
||||
import ru.penkrat.stbf.api.SessionProvider;
|
||||
import ru.penkrat.stbf.common.session.SessionAwareBotRequest;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class SessionAwareCommandChain implements CommandChain {
|
||||
|
||||
private final CommandChain delegate;
|
||||
private final SessionProvider sessionProvider;
|
||||
|
||||
@Override
|
||||
public void processCommand(BotRequest botRequest, BotResponse botResponse) {
|
||||
delegate.processCommand(new SessionAwareBotRequest(botRequest, sessionProvider), botResponse);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package ru.penkrat.stbf.common.command;
|
||||
|
||||
import ru.penkrat.stbf.api.BotRequest;
|
||||
import ru.penkrat.stbf.api.BotResponse;
|
||||
import ru.penkrat.stbf.api.CommandChain;
|
||||
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
public class ThreadPolledCommandChain implements CommandChain {
|
||||
|
||||
private final CommandChain delegate;
|
||||
private final ExecutorService executor;
|
||||
|
||||
public ThreadPolledCommandChain(CommandChain delegate) {
|
||||
this(delegate, 4);
|
||||
}
|
||||
|
||||
public ThreadPolledCommandChain(CommandChain delegate, int nThreads) {
|
||||
this.delegate = delegate;
|
||||
this.executor = Executors.newFixedThreadPool(nThreads);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processCommand(BotRequest botRequest, BotResponse botResponse) {
|
||||
executor.execute(() -> {
|
||||
delegate.processCommand(botRequest, botResponse);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package ru.penkrat.stbf.common.session;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import ru.penkrat.stbf.api.BotRequest;
|
||||
import ru.penkrat.stbf.api.BotSession;
|
||||
import ru.penkrat.stbf.api.SessionProvider;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class SessionAwareBotRequest implements BotRequest {
|
||||
|
||||
private final BotRequest delegate;
|
||||
|
||||
private final SessionProvider sessionProvider;
|
||||
|
||||
private BotSession botSession;
|
||||
|
||||
@Override
|
||||
public BotSession getSession() {
|
||||
if (botSession == null) {
|
||||
botSession = sessionProvider.get(getChatId());
|
||||
Objects.requireNonNull(botSession, "Session can not be null");
|
||||
}
|
||||
return botSession;
|
||||
}
|
||||
|
||||
public Optional<String> getMessageText() {
|
||||
return this.delegate.getMessageText();
|
||||
}
|
||||
|
||||
public Optional<String> getPhoneNumber() {
|
||||
return this.delegate.getPhoneNumber();
|
||||
}
|
||||
|
||||
public Optional<String> getCallbackData() {
|
||||
return this.delegate.getCallbackData();
|
||||
}
|
||||
|
||||
public Optional<String> getCallbackMessageText() {
|
||||
return this.delegate.getCallbackMessageText();
|
||||
}
|
||||
|
||||
public Long getChatId() {
|
||||
return this.delegate.getChatId();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user