From 33d245bd6710b7f7b368aec2d7545fe83ac9265e Mon Sep 17 00:00:00 2001
From: Alessandro Ambrosano <a.ambrosano@sssup.it>
Date: Fri, 10 Apr 2015 12:14:37 +0200
Subject: [PATCH] [NRRPLT-1842][NRRLPT-1860] Added the possibility connect to a
 custom remote gzserver

Change-Id: I3f174db3d8a7f76b8059173dfe4b3c4136fa15c1
---
 .gitignore            |  4 ++++
 gzbridge/GZNode.cc    | 31 +++++++++++++++++++++++++++++--
 gzbridge/GZNode.hh    |  4 ++++
 gzbridge/ws_server.js | 17 +++++++++++++++--
 start_gzweb.sh        | 15 ++++++++++++++-
 5 files changed, 66 insertions(+), 5 deletions(-)
 create mode 100644 .gitignore

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..48a844a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+build/
+gzbridge/build/
+http/
+node_modules/
diff --git a/gzbridge/GZNode.cc b/gzbridge/GZNode.cc
index 43f7459..f2cd144 100644
--- a/gzbridge/GZNode.cc
+++ b/gzbridge/GZNode.cc
@@ -32,13 +32,37 @@ GZNode::GZNode()
     return;
   }
 
+  this->ConnectGzServer();
+};
+
+GZNode::GZNode(const v8::Arguments& args) {
+  isGzServerConnected = false;
+
+  if (args.Length() != 2) {
+    ThrowException(Exception::TypeError(
+        String::New("Wrong number of arguments")));
+    return;
+  }
+
+  v8::String::Utf8Value v8host(args[0]->ToString());
+  std::string host = std::string(*v8host);
+  int port = args[1]->IntegerValue();
+
+  if (!gazebo::transport::init(host, port)) {
+    return;
+  }
+
+  this->ConnectGzServer();
+};
+
+void GZNode::ConnectGzServer() {
   isGzServerConnected = true;
   gazebo::transport::run();
 
   this->gzIface = new GazeboInterface();
   this->gzIface->Init();
   this->gzIface->RunThread();
-};
+}
 
 /////////////////////////////////////////////////
 GZNode::~GZNode()
@@ -115,8 +139,11 @@ void GZNode::Init(Handle<Object> exports)
 Handle<Value> GZNode::New(const Arguments& args)
 {
   HandleScope scope;
+  GZNode* obj;
+
+  if (args.Length() == 0) obj = new GZNode();
+  else if (args.Length() == 2) obj = new GZNode(args);
 
-  GZNode* obj = new GZNode();
   obj->Wrap(args.This());
 
   return args.This();
diff --git a/gzbridge/GZNode.hh b/gzbridge/GZNode.hh
index 5bcde2f..24944e0 100644
--- a/gzbridge/GZNode.hh
+++ b/gzbridge/GZNode.hh
@@ -32,6 +32,10 @@ namespace gzweb
 
     private: GZNode();
 
+    private: GZNode(const v8::Arguments& args);
+
+    private: void ConnectGzServer();
+
     private: ~GZNode();
 
     private: static v8::Handle<v8::Value> New(const v8::Arguments& args);
diff --git a/gzbridge/ws_server.js b/gzbridge/ws_server.js
index 1315963..664aaab 100755
--- a/gzbridge/ws_server.js
+++ b/gzbridge/ws_server.js
@@ -1,12 +1,25 @@
 #!/usr/bin/env node
 
+if (process.argv.length != 2 && process.argv.length != 4) {
+  console.error('Server called with wrong parameters: usage ws_server [gzserver_host gzserver_port]')
+  process.exit(1);
+}
+
 var WebSocketServer = require('websocket').server;
 var http = require('http');
 
 var connections = [];
 var materialScriptsMessage = {};
 var addon = require('./build/Debug/gzbridge');
-var gzconnection = new addon.GZNode();
+
+if (process.argv.length == 2) {
+  var gzconnection = new addon.GZNode();
+}
+else {
+  // process.argv[2] is gzserver host, process.argv[3] is gzserver port.
+  var gzconnection = new addon.GZNode(process.argv[2], process.argv[3]);
+}
+
 if (gzconnection.getIsGzServerConnected())
 {
   gzconnection.loadMaterialScripts('../http/client/assets');
@@ -19,7 +32,7 @@ if (gzconnection.getIsGzServerConnected())
       gzconnection.getPoseMsgFilterMinimumAge());
   console.log('  minimum XYZ distance squared between successive messages: ' +
       gzconnection.getPoseMsgFilterMinimumDistanceSquared());
-  console.log('  minimum Quartenion distance squared between successive messages:'
+  console.log('  minimum Quaternion distance squared between successive messages:'
       + ' ' + gzconnection.getPoseMsgFilterMinimumQuaternionSquared());
 }
 else
diff --git a/start_gzweb.sh b/start_gzweb.sh
index 589ca8a..3f8024d 100755
--- a/start_gzweb.sh
+++ b/start_gzweb.sh
@@ -1,5 +1,10 @@
 #!/bin/bash
 
+if [[ $# -ne 0 && $# -ne 2 ]]; then
+    echo "Usage: start_gzweb [gzsever_host gzserver_port]"
+    exit 1
+fi
+
 ulimit -c unlimited
 
 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@@ -17,4 +22,12 @@ fi
 ./node_modules/.bin/http-server http/client &
 
 cd gzbridge
-./ws_server.js &
+
+if [ $# -eq 0 ]; then
+	./ws_server.js &
+fi
+
+if [ $# -eq 2 ]; then
+	./ws_server.js $1 $2 &
+fi
+
-- 
GitLab