Merge branch 'SocketException' of https://github.com/myplacedk/TelegramBots into myplacedk-SocketException
This commit is contained in:
commit
7d6fdcbf69
@ -69,7 +69,7 @@ public class DefaultBotSession implements BotSession {
|
||||
|
||||
lastReceivedUpdate = 0;
|
||||
|
||||
readerThread = new ReaderThread(updatesSupplier);
|
||||
readerThread = new ReaderThread(updatesSupplier, this);
|
||||
readerThread.setName(callback.getBotUsername() + " Telegram Connection");
|
||||
readerThread.start();
|
||||
|
||||
@ -135,12 +135,14 @@ public class DefaultBotSession implements BotSession {
|
||||
private class ReaderThread extends Thread implements UpdatesReader {
|
||||
|
||||
private final UpdatesSupplier updatesSupplier;
|
||||
private final Object lock;
|
||||
private CloseableHttpClient httpclient;
|
||||
private ExponentialBackOff exponentialBackOff;
|
||||
private RequestConfig requestConfig;
|
||||
|
||||
public ReaderThread(UpdatesSupplier updatesSupplier) {
|
||||
public ReaderThread(UpdatesSupplier updatesSupplier, Object lock) {
|
||||
this.updatesSupplier = Optional.ofNullable(updatesSupplier).orElse(this::getUpdatesFromServer);
|
||||
this.lock = lock;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -183,12 +185,12 @@ public class DefaultBotSession implements BotSession {
|
||||
public void run() {
|
||||
setPriority(Thread.MIN_PRIORITY);
|
||||
while (running) {
|
||||
synchronized (lock) {
|
||||
if (running) {
|
||||
try {
|
||||
List<Update> updates = updatesSupplier.getUpdates();
|
||||
if (updates.isEmpty()) {
|
||||
synchronized (this) {
|
||||
this.wait(500);
|
||||
}
|
||||
lock.wait(500);
|
||||
} else {
|
||||
updates.removeIf(x -> x.getUpdateId() < lastReceivedUpdate);
|
||||
lastReceivedUpdate = updates.parallelStream()
|
||||
@ -207,24 +209,28 @@ public class DefaultBotSession implements BotSession {
|
||||
receivedUpdates.clear();
|
||||
}
|
||||
BotLogger.debug(LOGTAG, e);
|
||||
interrupt();
|
||||
} catch (Exception global) {
|
||||
BotLogger.severe(LOGTAG, global);
|
||||
try {
|
||||
synchronized (this) {
|
||||
this.wait(exponentialBackOff.nextBackOffMillis());
|
||||
synchronized (lock) {
|
||||
lock.wait(exponentialBackOff.nextBackOffMillis());
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
if (!running) {
|
||||
receivedUpdates.clear();
|
||||
}
|
||||
BotLogger.debug(LOGTAG, e);
|
||||
interrupt();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
BotLogger.debug(LOGTAG, "Reader thread has being closed");
|
||||
}
|
||||
|
||||
private List<Update> getUpdatesFromServer() throws InterruptedException, Exception {
|
||||
private List<Update> getUpdatesFromServer() throws IOException {
|
||||
GetUpdates request = new GetUpdates()
|
||||
.setLimit(100)
|
||||
.setTimeout(ApiConstants.GETUPDATES_TIMEOUT)
|
||||
@ -248,8 +254,8 @@ public class DefaultBotSession implements BotSession {
|
||||
|
||||
if (response.getStatusLine().getStatusCode() >= 500) {
|
||||
BotLogger.warn(LOGTAG, responseContent);
|
||||
synchronized (this) {
|
||||
this.wait(500);
|
||||
synchronized (lock) {
|
||||
lock.wait(500);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
@ -260,14 +266,13 @@ public class DefaultBotSession implements BotSession {
|
||||
BotLogger.severe(responseContent, LOGTAG, e);
|
||||
}
|
||||
}
|
||||
} catch (SocketException e) {
|
||||
if (!e.getMessage().equals("Socket Closed")) {
|
||||
} catch (SocketException | InvalidObjectException | TelegramApiRequestException e) {
|
||||
BotLogger.severe(LOGTAG, e);
|
||||
}
|
||||
} catch (SocketTimeoutException e) {
|
||||
BotLogger.fine(LOGTAG, e);
|
||||
} catch (InvalidObjectException | TelegramApiRequestException e) {
|
||||
BotLogger.severe(LOGTAG, e);
|
||||
} catch (InterruptedException e) {
|
||||
BotLogger.fine(LOGTAG, e);
|
||||
interrupt();
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
@ -275,7 +280,7 @@ public class DefaultBotSession implements BotSession {
|
||||
|
||||
public interface UpdatesSupplier {
|
||||
|
||||
List<Update> getUpdates() throws InterruptedException, Exception;
|
||||
List<Update> getUpdates() throws Exception;
|
||||
}
|
||||
|
||||
private List<Update> getUpdateList() {
|
||||
@ -306,6 +311,7 @@ public class DefaultBotSession implements BotSession {
|
||||
callback.onUpdatesReceived(updates);
|
||||
} catch (InterruptedException e) {
|
||||
BotLogger.debug(LOGTAG, e);
|
||||
interrupt();
|
||||
} catch (Exception e) {
|
||||
BotLogger.severe(LOGTAG, e);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user