Challenge Overview


pxCore is a client library that houses a large number of drawing objects and C++ functionality.  You can find it in Github here:   https://github.com/topcoderinc/pxCore/tree/_rtRemote_Java

rtRemote is a separate peer-to-peer RPC wrapper library around rtObject. It has no broker, but includes a location service for object discovery. Applications can communicate using TCP and UNIX Domain sockets, but other transports can be installed or “plugged in”. The API allows read/write on properties and method invocation. The type system supports most of what rtValue supports. rtValue is a VARIANT type. rtRemote currently is being developed, and we have been asked by the client to implement an rtRemote counterpart in pure Java and Node. This challenge will investigate the code and provide an implementation for Node that can be used to communicate with the C++ and Java functionality that exists and vice versa. Think Java CORBA bindings, but proprietary.

We have already completed the Node client portion of the port, and this challenge will finish up the port by ensuring that Node functioning as a server works as well.
 
Requirements

For this challenge, we are going to complete two pieces:

1.  A Node implementation that can be used to communicate via the rtRemote API, functioning as both a client (already implemented) and a server (new for this challenge)
2.  A good set of at least 3 examples that can be used to properly test the application.  Please ensure you cover this functionality:
GET/SET properties of ALL types supported by the current c++ and Java rtRemote implementations. These types can be extracted from rtRemoteValueReader.cpp and rtRemoteValueWriter.cpp as not ALL types supported by rtValue are supported.

Method Invocation.  A Node application hosting an rtRemoteObject with one or more methods invoked by a Java and C++ application.

Existing code

Existing Node code can be found here:  https://github.com/topcoderinc/pxCore/tree/_rtRemote_Node.   See the remote/js folder.  This challenge will complete the Node portion of rtRemote by ensuring that both the client and server are functioning properly, ensuring that the Java and C++ clients can call into a Node based server.

In terms of the C++ code, the goal is to make minimal changes to the existing core rtRemote C++ code, unless there are bugs to be fixed.  If you'd like to refactor something or add something to make the Node wrapper easier to implement, please bring this up in the forum - don't just assume you can make large changes to core C++ code.  You are more than welcome to adjust any code in rtRemoteExamples to further flesh those out since those aren't part of pxCore proper.

Examples

You need to provide 3 examples that show rtRemote working from Node to C++ and Java, and from C++ and Java to the new Node server.  See the existing small example in the pxCore codebase in rtRemoteExample.   It's expected that we should be able to run the C++ or Java rtRemoteExample server and use the Node client.

Your examples should properly cover the functionality, including the areas defined under "Requirements" above.

Please be reasonably creative with your examples and ensure they are properly documented.  These will go a long way towards showing the client what we can do and documenting the library for future challenges.

Code structure

Please extend the Node implementation in 'remote/js'.  Please try to keep the general class and file structure similar to the Java version to make future maintenance easier.  If you have questions on specifics, please post in the forum.

Documentation

You are expected to bring the documentation up to our standard, including deployment guide, README, and validation guide.  Your validation guide should cover testing the Node client and server against Java and C++ client and servers as well.

Target Environment:

We've had good luck with Ubuntu 16.04, and there are instructions for building pxScene in the repository.  Once you've built pxScene, you can easily build the rtRemote examples for testing. 

Submission requirements

Your submission should include:

* Node code that meets there requirements above.  A patch file against commit hash 32e435490d988fc8a4e7be53ac6248133821f720 or later in the _rtRemote_Node branch is required.
* README describing the code, setup, and deployment / compilation details
* Validation document describing the examples and how they can run and details on testing with both the Java and C++ implementations

A video is not required for this challenge


Final Submission Guidelines

Please see above

ELIGIBLE EVENTS:

2018 Topcoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30063546