Darkcanuck/RRServer

From Robowiki
< Darkcanuck
Revision as of 22:33, 25 September 2008 by Darkcanuck (talk | contribs) (migrated from old wiki)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Experimental RoboRumble Server

I found some time on the weekend and put together a database-backed RoboRumble server. You can try it here: http://darkcanuck.net/rumble/ (warning: still quite alpha)


Why a new server?

Like many others, I was getting frustrated with the weird results appearing on the regular server. There didn't seem to be an easy way to fix the results, except to start over from scratch like ABC did with his new temporary server. It doesn't seem fair to new users that a single misconfiguration will corrupt everyone's results, nor to the Robocode developers where a bug in a new release can cause the same problems.

This effort is not meant to supplant the upcoming Roborumble.org, which will add many great features. But David has taken on a fairly large challenge, and I thought we needed an intermediate step in the meantime which works with the current rumble client and can help evolve the client/server system to become what Roborumble.org will eventually need.


Design Goals

  • Results stored in a relational database, as close to the original format as possible
  • Supports current rumble clients as-is, while allowing for enhanced clients to be created in the future
  • Ability to "roll back" bad data, based on user id, ip address, timestamp or client version (in the near future). So if you goof up your rumble configuration or use the wrong version for a week or two, no data is lost.
  • Extra checks added to ensure valid client configuration
  • Ability to display individual battle data for any pairing (so you can see how much the scores vary)
  • Ability to query more "fun" data, like daily rankings, top submitters, survivalist stats


Current State

The new server is live and has been accepting requests for just under 24hrs. My home test server has been running for several days, so it is stable but there are probably may bugs and still a number of missing features.

What's done:

  • support for OneOnOne competitions (mega, mini, micro, nano)
  • uploading results (1.5.4 client tested)
  • returning ratings file to client
  • removal of participants by client (potentially buggy area)
  • rankings display for OneOnOne
  • average percentage scoring
  • survivalist scoring
  • built-in checks for field size, number of rounds
  • pairings detail incl. detailed battle results **new!**

What's missing:

  • automatic (or semi-auto) rankings rebuild -- planned but not yet coded
  • support for melee, teams, twin duel (but tourney format won't be supported)
  • add check for total survival >= 35 in OneOnOne
  • ELO scoring
  • add check for score > 8000 in OneOnOne

Known bugs:

  • need to work on exception handling & error messages. The rumble client is very picky about brackets in returned results so an error from the server often causes an exception in the client! The returned errors are fairly verbose at the moment for debugging. **DONE!** Very happy with new error handler class, sends short & sweet output to clients, flags for turning on/off debugging. Should no longer cause exceptions if an upload fails unexpectedly
  • an error during processing can cause a client to keep uploading duplicate results. **DONE!** Found the bug causing this, just some bad SQL in a case that wasn't seen until the pairings started to fill out.
  • Will change the server to toss out duplicates with a warning. **update:** not so urgent with above bug fixed.

How to use it

Read the list of known bugs above first! Don't connect unless you're willing to run into the occasional error and hopefully send me a bug report.

Just change the three URLs in your roborumble.txt file to point to http://darkcanuck.net/rumble/... And reduce the number of battles to 50 for good measure.


How you can help

I'd like to make some forks of the latest rumble clients with a few new features. Including the robocode version number in the uploaded results is the top priority.

If there's a feature you want to code and you know PHP/MySQL, let me know!

Feedback is very much appreciated.


Feature wishlist

Will fill this in soon.


Questions/comments?