/*******************************************************************************
 * 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.api.core.websocket.impl;

import org.eclipse.che.api.core.websocket.commons.WebSocketMessageReceiver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;

/**
 * Duplex WEB SOCKET endpoint, handles messages, errors, session open/close events.
 *
 * @author Dmitry Kuleshov
 */
public class BasicWebSocketEndpoint {
    private static final Logger LOG = LoggerFactory.getLogger(BasicWebSocketEndpoint.class);

    private final WebSocketSessionRegistry registry;
    private final MessagesReSender         reSender;
    private final WebSocketMessageReceiver receiver;


    public BasicWebSocketEndpoint(WebSocketSessionRegistry registry,
                                  MessagesReSender reSender,
                                  WebSocketMessageReceiver receiver) {

        this.registry = registry;
        this.reSender = reSender;
        this.receiver = receiver;
    }

    @OnOpen
    public void onOpen(Session session, @PathParam("endpoint-id") String endpointId) {
        LOG.info("Web socket session opened");
        LOG.info("Endpoint: {}", endpointId);

        session.setMaxIdleTimeout(0);

        registry.add(endpointId, session);
        reSender.resend(endpointId);
    }

    @OnMessage
    public void onMessage(String message, @PathParam("endpoint-id") String endpointId) {
        LOG.debug("Receiving a web socket message.");
        LOG.debug("Endpoint: {}", endpointId);
        LOG.debug("Message: {}", message);

        receiver.receive(endpointId, message);
    }

    @OnClose
    public void onClose(CloseReason closeReason, @PathParam("endpoint-id") String endpointId) {
        LOG.info("Web socket session closed");
        LOG.debug("Endpoint: {}", endpointId);
        LOG.debug("Close reason: {}:{}", closeReason.getReasonPhrase(), closeReason.getCloseCode());

        registry.remove(endpointId);
    }

    @OnError
    public void onError(Throwable t, @PathParam("endpoint-id") String endpointId) {
        LOG.info("Web socket session error");
        LOG.debug("Endpoint: {}", endpointId);
        LOG.debug("Error: {}", t);
    }
}

@@ -1767,36 +1767,37 @@
 ) %7B%0A        LOG.
-info
+debug
 (%22Web socket ses
@@ -1823,20 +1823,21 @@
     LOG.
-info
+debug
 (%22Endpoi
@@ -2401,36 +2401,37 @@
 ) %7B%0A        LOG.
-info
+debug
 (%22Web socket ses
@@ -2751,12 +2751,13 @@
 LOG.
-info
+debug
 (%22We

Set debug level for some messages (#5155)