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

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. This challenge will investigate the code and provide wrappers for Java that can be used to communicate with the C++ functionality that exists and vice versa. Think Java CORBA bindings, but proprietary.
 
Requirements

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

1.  A Java wrapper that can be used to communicate via the rtRemote API. Note this is NOT to be a JNI wrapper but a pure Java implementation.
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++ rtRemote. 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++ application hosting an rtRemoteObject with one or more methods invoked by a Java application.

  3. Multiple Java threads working on different objects (GET/SET) over the same transport to demonstrate that the internal messaging dispatching can handle concurrent requests.


Existing code

Existing Java code can be found here:  https://github.com/gladish/pxCore/tree/master/remote/javaCurrent interface must be used but can be extended as necessary.

A number of intefaces are already defined, but not completed. A “resolver” or location service is provided so that Java applications and c++ applications can be used (very basic functionality) today.  A TCP transport implementation is provided, but is not 100% tested.
 
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 Java 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 Java to C++ and vice versa.  See the existing small example in the pxCore codebase in rtRemoteExample.  One of your Java examples should be a client and server that implement the same functionality as the existing C++ example.  It's expected that we should be able to run the C++ rtRemoteExample server and use the Java client and vice versa.

Your examples should properly cover the functionality, including the 3 areas defined under "Rquirements" 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.

Documentation

At this point in the project, documentation is limited.  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:

Currently, the C++ rtRemote code will only run in Linux.  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. 

Please use the code in this branch of our pxCore fork:  https://github.com/topcoderinc/pxCore/tree/_rtRemote

Submission requirements

Your submission should include:

* Java wrapper code that meets there requirements above
* 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

SHARE:

ID: 30062547