diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..48a844abbbe7ed44f8c9061e8913557665f4251c --- /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 43f7459e0004be946c46a614eb7054c2b8268ee8..f2cd144d831a668fd57ab27ddc7fab074c54625e 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 5bcde2f5d3664457d2e0ddc6cda889d998776140..24944e0cfb9a134e942750240156f6386e732693 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 1315963373f77177ddfa5cfed97bca562d4b131b..664aaabf63d42c3a55bfe86d54a818292aa364a8 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 589ca8a96357ac5c015ce300642bb2b83c6011d7..3f8024d9f4bb9e7ee0a2918f84ebeac65978f224 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 +