Hercules C++ rtRemote - Port functionality to Mac / Windows

Key Information

The challenge is finished.

Challenge Overview

pxCore is a client library that houses a large number of drawing objects and C++ functionality.    https://github.com/pxscene/pxCore/tree/master contains the relevant code in https://github.com/pxscene/pxCore/tree/master/remote

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.

For this challenge, we are going to update the existing C++ codebase to be portable to Linux, Mac, and Windows.  Currently the code works fine on Linux, but it does some things that are Linux-specific, making it hard to validate on the Mac and Windows platforms.

Known issues

We have done some preliminary work on the Mac port and ran into these issues:

1.  No /proc on macOS, so it will yield the following warning
rt: WARN rtRemoteServer.cpp:72 -- Thread-759304: failed to open directory /proc.

which means it will fail to clean up stale unit sockets (See cleanupStaleUnixSockets() in rtRemoteServer.cpp).

macOS uses a completely different way to implement the "process" file system, so this part should be re-implement on macOS.

2.  If we run ./sample_server first, then run ./sample_client, the ./sample_client will failed to bind the address
rt:ERROR rtRemoteMulticastResolver.cpp:267 -- Thread-759304: failed to bind multicast socket to inet:

Existing changes:

We have done some preliminary work for the Mac port, to get it to compile and somewhat run.  You can find the changes here:


Our current fork (which is behind the latest code) is found here:  https://github.com/topcoderinc/pxCore/tree/_rtRemote.  That repo contains an example client  and server, along with a simple README that you can use to deploy the code and use as the start of your deployment guide:



You should ideally not add any new dependencies for Windows to work with the existing code.  There are a number of libraries already used for pxCore / pxScene and those can be reused for the rtRemote work.


In our fork, you can find examples here:  https://github.com/topcoderinc/pxCore/tree/_rtRemote/rtRemoteExample.  The goal for this challenge is to be able to run the client or server on one platform (Linux, Mac, or Windows), and have the corresponding server or client running and communicating on a different platform.

For instance, a valid test would be to run the server on Linux, but the client on a Mac.  Or, run the server on Mac and the client on Windows and have them communicate as expected.

Target environment

For this challenge, we want to fix up the codebase and document the deployments for:

* Linux (Ubuntu 16.04)
* Mac 
* Windows 10+

Note that we will base our code off the latest upstream master (linked below).  We will *not* be using the existing TopCoder fork since it has fallen behind the master branch.

Submission requirements

* A git patch file against https://github.com/pxscene/pxCore/tree/master, commit hash b9227f772d5a6f002835bafad5e28595620471fe or later.
* README describing the code, setup, and deployment / compilation details, for each of the 3 target platforms
* Validation document describing the examples and how they can run

A video is not required for this challenge

Final Submission Guidelines

Please see above


2018 Topcoder(R) Open


Final Review:

Community Review Board


User Sign-Off


ID: 30062701