diff --git a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultWebhook.java b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultWebhook.java index eec91e57..c8875f8c 100644 --- a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultWebhook.java +++ b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultWebhook.java @@ -1,5 +1,8 @@ package org.telegram.telegrambots.updatesreceivers; +import java.io.Closeable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; import org.glassfish.grizzly.http.server.HttpServer; import org.glassfish.grizzly.ssl.SSLContextConfigurator; import org.glassfish.grizzly.ssl.SSLEngineConfigurator; @@ -19,12 +22,13 @@ import java.net.URI; * @version 1.0 * Webhook to receive updates */ -public class DefaultWebhook implements Webhook { +public class DefaultWebhook implements Webhook, Closeable { private String keystoreServerFile; private String keystoreServerPwd; private String internalUrl; private final RestApi restApi; + private HttpServer grizzlyServer; public DefaultWebhook() { this.restApi = new RestApi(); @@ -67,6 +71,7 @@ public class DefaultWebhook implements Webhook { } try { + this.grizzlyServer = grizzlyServer; grizzlyServer.start(); } catch (IOException e) { throw new TelegramApiException("Error starting webhook server", e); @@ -83,4 +88,16 @@ public class DefaultWebhook implements Webhook { throw new TelegramApiException("Can't find or access server keystore file."); } } + + @Override + public void close() throws IOException { + try { + grizzlyServer.shutdown(1, TimeUnit.MINUTES).get(); + } catch (ExecutionException ex) { + throw new IOException("Failed to stop grizzly server", ex.getCause()); + } catch (InterruptedException e) { + // timeout + } + grizzlyServer.shutdownNow(); + } }