ico-arrow-big-left

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

Key Information

Register
Submit
The challenge is finished.
Show Deadlines

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

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:127.0.0.1:10004.

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:

https://github.com/topcoderinc/pxCore/pull/107���

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:

https://github.com/topcoderinc/pxCore/tree/_rtRemote/rtRemoteExample

Windows

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.

Examples

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

Reliability Rating and Bonus

For challenges that have a reliability bonus, the bonus depends on the reliability rating at the moment of registration for that project. A participant with no previous projects is considered to have no reliability rating, and therefore gets no bonus. Reliability bonus does not apply to Digital Run winnings. Since reliability rating is based on the past 15 projects, it can only have 15 discrete values.
Read more.

ELIGIBLE EVENTS:

2018 Topcoder(R) Open

REVIEW STYLE:

Final Review:

Community Review Board
?

Approval:

User Sign-Off
?

CHALLENGE LINKS:

Review Scorecard

?