From e0496943fad2b19297184fc346c845d5254abe73 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 19 Feb 2020 14:24:16 +0100 Subject: [PATCH] openvidu-ipcameras: create new Session if not exists in OpenVidu Server --- .../io/openvidu/ipcameras/MyRestController.java | 15 +++++++++++++-- .../io/openvidu/ipcameras/SimpleHttpClient.java | 13 +++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/openvidu-ipcameras/src/main/java/io/openvidu/ipcameras/MyRestController.java b/openvidu-ipcameras/src/main/java/io/openvidu/ipcameras/MyRestController.java index d3e3df39..da67c6e2 100644 --- a/openvidu-ipcameras/src/main/java/io/openvidu/ipcameras/MyRestController.java +++ b/openvidu-ipcameras/src/main/java/io/openvidu/ipcameras/MyRestController.java @@ -44,7 +44,8 @@ public class MyRestController { private final SimpleHttpClient httpClient = new SimpleHttpClient(); @RequestMapping(value = "/") - public String subscribe(@RequestParam(name = "credentials", required = false) String credentials, Model model) { + public String subscribe(@RequestParam(name = "credentials", required = false) String credentials, Model model) + throws OpenViduJavaClientException, OpenViduHttpException { if (credentials == null) { return "index"; @@ -70,7 +71,17 @@ public class MyRestController { String token = null; try { token = this.session.generateToken(); - } catch (OpenViduJavaClientException | OpenViduHttpException e) { + } catch (OpenViduHttpException e) { + if (e.getStatus() == 404) { + // Session was closed in openvidu-server. Create it again + createOpenViduSession(); + publishCameras(); + token = this.session.generateToken(); + } else { + return generateError(model, + "Error creating OpenVidu token for session " + SESSION_ID + ": " + e.getMessage()); + } + } catch (OpenViduJavaClientException e) { return generateError(model, "Error creating OpenVidu token for session " + SESSION_ID + ": " + e.getMessage()); } diff --git a/openvidu-ipcameras/src/main/java/io/openvidu/ipcameras/SimpleHttpClient.java b/openvidu-ipcameras/src/main/java/io/openvidu/ipcameras/SimpleHttpClient.java index 48a26d24..6d8f365c 100644 --- a/openvidu-ipcameras/src/main/java/io/openvidu/ipcameras/SimpleHttpClient.java +++ b/openvidu-ipcameras/src/main/java/io/openvidu/ipcameras/SimpleHttpClient.java @@ -22,10 +22,11 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.ssl.TrustStrategy; import org.apache.http.util.EntityUtils; -import org.json.simple.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.gson.JsonObject; + /** * Simple HTTP client able to send REST API requests to insecure servers * (self-signed certificates are accepted). It only implements a single method @@ -71,11 +72,11 @@ public class SimpleHttpClient { HttpPost request = new HttpPost(App.OPENVIDU_URL + "api/sessions/" + sessionId + "/connection"); - JSONObject json = new JSONObject(); - json.put("rtspUri", rtspUri); - json.put("data", cameraName); - json.put("adaptativeBitrate", adaptativeBitrate); - json.put("onlyPlayWithSubscribers", onlyPlayWhenSubscribers); + JsonObject json = new JsonObject(); + json.addProperty("rtspUri", rtspUri); + json.addProperty("data", cameraName); + json.addProperty("adaptativeBitrate", adaptativeBitrate); + json.addProperty("onlyPlayWithSubscribers", onlyPlayWhenSubscribers); StringEntity params = new StringEntity(json.toString()); request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");