Challenge Overview
Project Overview
Currently, TopCoder Competition Engine used a customized way for communication between the client side (Arena Applet) and the backend listeners. We are planning to implement a Web-based Arena based Web Socket protocol.
Previously, we have run a PoC Assembly - TopCoder Competition Engine - Add Web Sockets Protocol to Main Listener contest, which provides a good solution by using the combination of socket.io (web client) and netty.io (server side).
This contest is going to make improvements and make the solution better structure for incremental development.
Competition Task Overview
This contest is going to improve the previous solution based on socket.io (web client) and netty.io (server side) for web-based arena solution.
Standalone Listener
Previously solution requires the web socket listener to be tied with the Main listener, based on the real implementation, we can see that the web socket listener can be sit in a separate process similar as current listeners.
We are expected to make the changes, and create shell scripts similar as the current scripts for main listener etc.
Refactor WebSocketServer
Currently, if you check the implementation of WebSocketServer class, you can see all the logics are present in the same classes. which makes it hard to manage, when the event listeners are get more and more.
We'd like a better solution to handle this, following are the requirements:
- The WebSocketServer is only dealing with start and stop the services.
- Each event will be in separated classes, and registered to WebSocketServer, or use a configurable way.
KEEP IN MIND, we'd like to add different events in the different contests in parallel, the better way to isolating them without raising performance issue the better.
Reviewer's will judge this as one key point for this contest.
Encrypt the Data Communication
Currently, the approach is send plain text between client and server, this is not safe. We'like to find a way to encrypt the data.
we'd like to use a secure URL for your initial connection, i.e. instead of "http://" use "https://". If the WebSocket transport is chosen, then Socket.IO should automatically use "wss://" (SSL) for the WebSocket connection too.
or
creating the connection using the 'secure' option:
var socket = io.connect('https://localhost', {secure: true});
Please try to use wireshark to prove that your solution is indeed using secure way for data communication.
Arena VM
Before asking your own VM, you need to have a public key on your profile before asking for the VM.
You can find more details on how to generate a key http://apps.topcoder.com/wiki/display/projects/Generate+SSH+Key and how to connect using it http://apps.topcoder.com/wiki/display/projects/Connect+Using+SSH+Key.
To use the Arena VM, please follow http://apps.topcoder.com/wiki/display/docs/Competition+Engine+VM+Setup
Final Submission Guidelines
Submission Deliverables
Below is an overview of the deliverables:
- Code Changes for the solution
- A complete and detailed deployment documented explaining how to deploy the application including configuration information.
Final Submission
For each member, the final submission should be uploaded to the Online Review Tool.