From d02320b1d31017bf34026100ea7b0545195ae45c Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Sat, 15 Aug 2020 16:35:41 +0300
Subject: [PATCH] Webservice ping for keepalive and latency

---
 .gitlab-ci.yml                  |  6 +++---
 web-service/server/src/index.js | 17 ++++++++++++++++-
 web-service/server/src/peer.js  |  2 ++
 3 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 29b3549ac..24ae7f573 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -55,9 +55,9 @@ webserver-deploy:
 
 .build-windows: &build-windows
     - 'call vcvars64.bat'
-    - if not exist "../ftl_build" mkdir "../ftl_build"
-    - cd ../ftl_build
-    - cmake %CMAKE_ARGS% %CMAKE_ARGS_WINDOWS% -DREALSENSE_DIR="C:/Program Files (x86)/Intel RealSense SDK 2.0" -DOPENVR_DIR="C:/Program Files (x86)/OpenVRSDK" -DOPUS_DIR="C:/Program Files (x86)/Opus" ../ftl
+    - mkdir ./build
+    - cd ./build
+    - cmake %CMAKE_ARGS% %CMAKE_ARGS_WINDOWS% -DREALSENSE_DIR="C:/Program Files (x86)/Intel RealSense SDK 2.0" -DOPENVR_DIR="C:/Program Files (x86)/OpenVRSDK" -DOPUS_DIR="C:/Program Files (x86)/Opus" ..
     - devenv ftl.utu.fi.sln /build Release
     - rmdir /q /s "%DEPLOY_DIR%/%CI_COMMIT_REF_SLUG%"
     - mkdir "%DEPLOY_DIR%/%CI_COMMIT_REF_SLUG%"
diff --git a/web-service/server/src/index.js b/web-service/server/src/index.js
index baddc6e5e..da2a904af 100644
--- a/web-service/server/src/index.js
+++ b/web-service/server/src/index.js
@@ -40,6 +40,18 @@ let peer_data = [];
 
 let cfg_to_peer = {};
 
+setInterval(() => {
+	for (x in peer_by_id) {
+		let p = peer_by_id[x];
+		let start = (new Date()).getMilliseconds();
+		p.rpc("__ping__", (ts) => {
+			let end = (new Date()).getMilliseconds();
+			p.latency = (end-start) / 2;
+			console.log("Ping: ", p.latency, ts);
+		});
+	}
+}, 20000);
+
 /**
  * A client stream request object. Each source maintains a list of clients who
  * are wanting frames from that source. Clients can only request N frames at a
@@ -143,7 +155,8 @@ RGBDStream.prototype.pushFrames = function(latency, spacket, packet) {
 	//console.log("Frame = ", packet[0], packet[1]);
 
 	for (let i=0; i < this.clients.length; i++) {
-		this.clients[i].push(this.base_uri, latency, spacket, packet);
+		let l = latency+this.peer.latency+this.clients[i].peer.latency;
+		this.clients[i].push(this.base_uri, Math.ceil(l), spacket, packet);
 	}
 
 	/*let i=0;
@@ -346,6 +359,8 @@ app.ws('/', (ws, req) => {
 		for (let c in cfg_to_peer) {
 			if (cfg_to_peer[c] === p) delete cfg_to_peer[c];
 		}
+
+		// FIXME: Clear peer_data
 	});
 
 	p.bind("new_peer", (id) => {
diff --git a/web-service/server/src/peer.js b/web-service/server/src/peer.js
index f55f522c3..86aa78eec 100644
--- a/web-service/server/src/peer.js
+++ b/web-service/server/src/peer.js
@@ -35,6 +35,8 @@ function Peer(ws) {
 	this.callbacks = {};
 	this.cbid = 0;
 
+	this.latency = 0;
+
 	this.uri = "unknown";
 	this.name = "unknown";
 	this.master = false;
-- 
GitLab