Challenge Overview
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.
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:
-
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 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 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.
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