All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.kurento.jsonrpc.internal.server.ServerSession Maven / Gradle / Ivy
/*
* (C) Copyright 2013 Kurento (http://kurento.org/)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.kurento.jsonrpc.internal.server;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledFuture;
import org.kurento.commons.PropertiesManager;
import org.kurento.commons.ThreadFactoryCreator;
import org.kurento.jsonrpc.client.Continuation;
import org.kurento.jsonrpc.internal.JsonRpcRequestSenderHelper;
import org.kurento.jsonrpc.internal.client.AbstractSession;
import org.kurento.jsonrpc.message.Request;
import org.kurento.jsonrpc.message.Response;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
public abstract class ServerSession extends AbstractSession {
public static final String SESSION_RECONNECTION_TIME_PROP = "ws.sessionReconnectionTime";
private static final int SESSION_RECONNECTION_TIME_DEFAULT = 10;
private final SessionsManager sessionsManager;
private JsonRpcRequestSenderHelper rsHelper;
private String transportId;
private ScheduledFuture> closeTimerTask;
private ExecutorService sessionExecutor;
private volatile ConcurrentMap attributes;
private long reconnectionTimeoutInMillis = PropertiesManager.getProperty(
SESSION_RECONNECTION_TIME_PROP, SESSION_RECONNECTION_TIME_DEFAULT) * 1000;
private boolean gracefullyClosed;
public ServerSession(String sessionId, Object registerInfo, SessionsManager sessionsManager,
String transportId) {
super(sessionId, registerInfo);
this.transportId = transportId;
this.sessionsManager = sessionsManager;
this.sessionExecutor = Executors.newSingleThreadExecutor(ThreadFactoryCreator
.create("SessionHandler-" + sessionId));
}
public abstract void handleResponse(Response response);
public String getTransportId() {
return transportId;
}
public void setTransportId(String transportId) {
this.transportId = transportId;
}
@Override
public void close() throws IOException {
this.sessionsManager.remove(this.getSessionId());
this.sessionExecutor.shutdownNow();
}
protected void setRsHelper(JsonRpcRequestSenderHelper rsHelper) {
this.rsHelper = rsHelper;
}
@Override
public R sendRequest(String method, Class resultClass) throws IOException {
return rsHelper.sendRequest(method, resultClass);
}
@Override
public R sendRequest(String method, Object params, Class resultClass) throws IOException {
return rsHelper.sendRequest(method, params, resultClass);
}
@Override
public JsonElement sendRequest(String method) throws IOException {
return rsHelper.sendRequest(method);
}
@Override
public JsonElement sendRequest(String method, Object params) throws IOException {
return rsHelper.sendRequest(method, params);
}
@Override
public void sendRequest(String method, JsonObject params, Continuation continuation) {
rsHelper.sendRequest(method, params, continuation);
}
@Override
public void sendNotification(String method, Object params, Continuation continuation)
throws IOException {
rsHelper.sendNotification(method, params, continuation);
}
@Override
public void sendNotification(String method, Object params) throws IOException {
rsHelper.sendNotification(method, params);
}
@Override
public void sendNotification(String method) throws IOException {
rsHelper.sendNotification(method);
}
@Override
public Response sendRequest(Request request) throws IOException {
return rsHelper.sendRequest(request);
}
@Override
public void sendRequest(Request request,
Continuation> continuation) throws IOException {
rsHelper.sendRequest(request, continuation);
}
@Override
public void sendRequestHonorId(Request request,
Continuation> continuation) throws IOException {
rsHelper.sendRequestHonorId(request, continuation);
}
@Override
public Response sendRequestHonorId(Request request) throws IOException {
return rsHelper.sendRequestHonorId(request);
}
public void setCloseTimerTask(ScheduledFuture> closeTimerTask) {
this.closeTimerTask = closeTimerTask;
}
public void setGracefullyClosed() {
this.gracefullyClosed = true;
}
public boolean isGracefullyClosed() {
return gracefullyClosed;
}
public ScheduledFuture> getCloseTimerTask() {
return closeTimerTask;
}
@Override
public void setReconnectionTimeout(long reconnectionTimeoutInMillis) {
this.reconnectionTimeoutInMillis = reconnectionTimeoutInMillis;
}
public long getReconnectionTimeoutInMillis() {
return reconnectionTimeoutInMillis;
}
@Override
public Map getAttributes() {
if (attributes == null) {
synchronized (this) {
if (attributes == null) {
attributes = new ConcurrentHashMap<>();
}
}
}
return attributes;
}
public abstract void closeNativeSession(String reason);
public void processRequest(Runnable task) {
sessionExecutor.execute(task);
}
}