/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.websocket.impl; import org.eclipse.che.ide.util.loging.Log; import javax.inject.Inject; import javax.inject.Singleton; /** * Responsible for keeping connection alive and reconnecting if needed. * If connection is closed and sustainer is active it tries to reconnect * according to its properties. Default values are: * <ul> * <li>reconnection delay: 500 milliseconds</li> * <li>reconnection limit: 5 attempts</li> * </ul> * * @author Dmitry Kuleshov */ @Singleton public class WebSocketConnectionSustainer { private static final int RECONNECTION_DELAY = 1_000; private static final int RECONNECTION_LIMIT = 5; private final WebSocketConnectionManager connectionManager; private final WebSocketPropertyManager propertyManager; @Inject public WebSocketConnectionSustainer(WebSocketConnectionManager connectionManager, WebSocketPropertyManager propertyManager) { this.connectionManager = connectionManager; this.propertyManager = propertyManager; } public void reset(String url) { final int attempts = propertyManager.getReConnectionAttempts(url); Log.debug(getClass(), "Resetting number of reconnection attempt number. Previous was: " + attempts); propertyManager.setReConnectionAttempts(url, 0); } public void sustain(String url) { final int reConnectionAttempts = propertyManager.getReConnectionAttempts(url); if (reConnectionAttempts + 1 > RECONNECTION_LIMIT) { Log.debug(getClass(), "Exceeding reconnection limit."); propertyManager.disableSustainer(url); } if (propertyManager.sustainerEnabled(url)) { Log.debug(getClass(), "Sustaining connection. Current attempt number: " + reConnectionAttempts); propertyManager.setReConnectionAttempts(url, reConnectionAttempts + 1); propertyManager.setConnectionDelay(url, RECONNECTION_DELAY); connectionManager.establishConnection(url); } } }