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 Java bindings, so those are available to use to base your Node work from.
 
Requirements

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

1.  A Node implementation that can be used to communicate via the rtRemote API.  
2.  A good set of at least 3 examples that can be used to properly test the application.  Please ensure you cover this functionality:
  1. 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.

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

    Note that using the Node code to function as a server is out of scope for this challenge.  That will be implemented in a subsequent challenge.

Existing code

Existing Java code can be found here:  https://github.com/topcoderinc/pxCore/tree/_rtRemote_Java.   This challenge will port this to Node.  Please follow the same code structure.

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.  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

The current Java implementation is in 'remote/java' . Please add the Node implementation in 'remote/js'.  Please follow the same class structure detailed in the Java implementation as much as possible.  We don't need quite the same abstract class and interface structure, but the general properties available and class naming should be similar.  If you have questions on specifics, please post in the forum.

Documentation

At this point in the project, documentation is limited, but the steps for Java should work.  It will be up to you to get the code up and running and debug issues.  Note that the existing code has not been fully tested and there are definitely bugs in the implementation.  Existing bugs will need to be reported and smaller bugs are expected to be fixed.  If you run into something that is a large issue, please bring it up in the forum right away so we can discuss proper steps moving forward.

You are expected to bring the documentation up to our standard, including deployment guide, README, and validation guide.

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 91bd92ee5b032c120da42b4c8216e0d7f7ba9bb4 or later in the _rtRemote_Java branch is fine, as is just the code.  If you provide just the code, you need your deployment documentation to be very clear.
* README describing the code, setup, and deployment / compilation details
* Validation document describing the examples and how they can run

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: 30063297