Package com.kurento.kmf.jsonrpcconnector.internal.http

Source Code of com.kurento.kmf.jsonrpcconnector.internal.http.JsonRpcHttpRequestHandler$HttpRequestServerSession

/*
* (C) Copyright 2013 Kurento (http://kurento.org/)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser General Public License
* (LGPL) version 2.1 which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-2.1.html
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*/
package com.kurento.kmf.jsonrpcconnector.internal.http;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.HttpRequestHandler;

import com.google.common.io.CharStreams;
import com.google.gson.JsonElement;
import com.kurento.kmf.jsonrpcconnector.client.Continuation;
import com.kurento.kmf.jsonrpcconnector.internal.JsonRpcRequestSenderHelper;
import com.kurento.kmf.jsonrpcconnector.internal.client.TransactionImpl.ResponseSender;
import com.kurento.kmf.jsonrpcconnector.internal.message.Message;
import com.kurento.kmf.jsonrpcconnector.internal.message.Request;
import com.kurento.kmf.jsonrpcconnector.internal.message.Response;
import com.kurento.kmf.jsonrpcconnector.internal.server.ProtocolManager;
import com.kurento.kmf.jsonrpcconnector.internal.server.ProtocolManager.ServerSessionFactory;
import com.kurento.kmf.jsonrpcconnector.internal.server.ServerSession;
import com.kurento.kmf.jsonrpcconnector.internal.server.SessionsManager;

public class JsonRpcHttpRequestHandler implements HttpRequestHandler {

  private final class HttpRequestServerSession extends ServerSession {

    private HttpRequestServerSession(String sessionId, Object registerInfo,
        SessionsManager sessionsManager, String internalSessionId) {

      super(sessionId, registerInfo, sessionsManager, internalSessionId);

      setRsHelper(new JsonRpcRequestSenderHelper(sessionId) {

        @Override
        protected <P, R> Response<R> internalSendRequest(
            Request<P> request, Class<R> resultClass)
            throws IOException {
          // TODO Poner aquí la cola de mensajes que devolver al
          // cliente cuando haga pooling
          return new Response<>();
        }

        @Override
        protected void internalSendRequest(
            Request<? extends Object> request,
            Class<JsonElement> class1,
            Continuation<Response<JsonElement>> continuation) {
          throw new UnsupportedOperationException(
              "Async client is unavailable");
        }
      });
    }

    @Override
    public void handleResponse(Response<JsonElement> response) {
    }
  }

  private final ProtocolManager protocolManager;

  public JsonRpcHttpRequestHandler(ProtocolManager protocolManager) {
    this.protocolManager = protocolManager;
  }

  @Override
  public void handleRequest(HttpServletRequest servletRequest,
      final HttpServletResponse servletResponse) throws ServletException,
      IOException {

    String messageJson = getBodyAsString(servletRequest);

    ServerSessionFactory factory = new ServerSessionFactory() {
      @Override
      public ServerSession createSession(String sessionId,
          Object registerInfo, SessionsManager sessionsManager) {

        return new HttpRequestServerSession(sessionId, registerInfo,
            sessionsManager, null);
      }
    };

    ResponseSender responseSender = new ResponseSender() {
      @Override
      public void sendResponse(Message message) throws IOException {
        servletResponse.getWriter().println(message);
      }
    };

    String internalSessionId = null;

    HttpSession session = servletRequest.getSession(false);
    if (session != null) {
      internalSessionId = session.getId();
    }

    protocolManager.processMessage(messageJson, factory, responseSender,
        internalSessionId);
  }

  /**
   *
   * @param request
   * @return
   * @throws IOException
   */
  private String getBodyAsString(final HttpServletRequest request)
      throws IOException {
    return CharStreams.toString(request.getReader());
  }

}
TOP

Related Classes of com.kurento.kmf.jsonrpcconnector.internal.http.JsonRpcHttpRequestHandler$HttpRequestServerSession

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.