import com.google.common.base.Strings;
import java.io.IOException;
-import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import java.util.Optional;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.eclipse.jetty.websocket.api.CloseException;
import org.eclipse.jetty.websocket.api.RemoteEndpoint;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
-import org.opendaylight.restconf.nb.rfc8040.streams.listeners.BaseListenerInterface;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final byte[] PING_PAYLOAD = "ping".getBytes(Charset.defaultCharset());
private final ScheduledExecutorService executorService;
- private final BaseListenerInterface listener;
+ // FIXME: this really should include formatter etc.
+ private final AbstractStream<?> listener;
private final int maximumFragmentLength;
private final int heartbeatInterval;
* @param heartbeatInterval Interval in milliseconds of sending of ping control frames to remote endpoint
* to keep session up. Ping control frames are disabled if this parameter is set to 0.
*/
- WebSocketSessionHandler(final ScheduledExecutorService executorService, final BaseListenerInterface listener,
+ WebSocketSessionHandler(final ScheduledExecutorService executorService, final AbstractStream<?> listener,
final int maximumFragmentLength, final int heartbeatInterval) {
this.executorService = executorService;
this.listener = listener;
*/
@OnWebSocketError
public synchronized void onWebSocketError(final Throwable error) {
- LOG.warn("An error occurred on web-socket: ", error);
+ if (error instanceof CloseException && error.getCause() instanceof TimeoutException timeout) {
+ // A timeout is expected, do not log the complete stack trace
+ LOG.info("Web-socket closed by timeout: {}", timeout.getMessage());
+ } else {
+ LOG.warn("An error occurred on web-socket: ", error);
+ }
if (session != null) {
- LOG.warn("Trying to close web-socket session {} gracefully after error.", session);
+ LOG.info("Trying to close web-socket session {} gracefully after error.", session);
listener.removeSubscriber(this);
if (session.isOpen()) {
session.close();
return parts;
}
- /**
- * Get remote endpoint address of the current web-socket session.
- *
- * @return If the session exists and is open the {@link InetSocketAddress} wrapped in {@link Optional} is returned.
- * Otherwise, {@link Optional#empty()} is returned.
- */
- // FIXME: remove this method?
- public synchronized Optional<InetSocketAddress> getRemoteEndpointAddress() {
- if (session != null && session.isOpen()) {
- return Optional.of(session.getRemote().getInetSocketAddress());
- } else {
- return Optional.empty();
- }
- }
-
@Override
public synchronized boolean isConnected() {
- if (session != null && session.isOpen()) {
- return true;
- } else {
- return false;
- }
+ return session != null && session.isOpen();
}
}
\ No newline at end of file