Rounder Development Update

Rounder (my attempt to build an open source poker client/server/community started last March) development continues at a slow and not so steady pace. I've basically been averaging two (short) coding sessions a month since October thanks to work and my stupid (i.e. awesome) PS3. Going to try to bump that up to a couple times a week and so far so good since overcoming a bit of an unpleasant hurdle I've been screwing around with for literally months. (handling all-in calls/raises)

Basic architecture overview, a core poker engine (objects like players, tables, games, and limits), and a networking layer consisting of a server objects (creates and organizes engine objects) and a client object (bad name as this exists on the server and dispatches events and action prompts to connected clients). The client side program isn't really written yet, everything is currently driven through unit tests.

Status right now, engine is quite functional but even after months of hammering on edge cases and writing any test I could think of to make the thing break (then fixing it), I'm absolutely certain there's still problems in there. Coding poker logic has turned out to be a bit of a challenge, just so many deviations and one off situations, and I've had a lot of trouble coming up with ways to keep the code clean and logical. It's well compartmentalized and objects should have pretty well defined responsibilities, but there's still a lot of if/else cruft in them.

Now that I'm relatively happy with how things behave when you get down to all-in calls and raises, I returned to defining the missing events sent out to all a tables observers whenever something happens. This is pretty far along and most events are now defined, soon it'll be time to write the client to actually listen for them.

Unit tests remain a thing of beauty, no disk/network access compromises (Ran 87 tests in 2.435s) and great effort has been made to keep the code *extremely* testable.

I'm concerned about the decision to use Twisted for the networking layer. It seems awesome for Python but I have this nagging feeling that sooner or later, I'll want to write clients in something other than Python.

Roadmap:

  1. Finish off event notifications.
  2. Return to edge case testing for a few more things.
  3. Write account creation glue.
  4. Complete server code to spawn a single table. (i.e. someone creates a server, friends can connect by IP and play)
  5. Write a really ugly and simple GTK client to actually be playable.
  6. Implement database layer. (sqlalchemy, may have to be bumped up in priority)
  7. Complete server code to manage creation of tables/games.

So still a long way to go. For anyone interested in jumping into the pool the project is written in Python and stored in Git. You can browse source at this location and clone with git-clone http://anongit.dangerouslyinc.com/rounder.

Comments

You might want to consider

You might want to consider http://developers.facebook.com/thrift/

I looked at Twisted, but the community was so fractured I dumped it.

Sounds cool though ... you should talk a little about your AI ... is it all stats based or are there personalities?

-S

Oh man I haven't given much

Oh man I haven't given much thought to AI yet. I was aiming just for network play at first and once that's stabilized seeing what the interest level would be in AI games. With any luck somebody out there who knows what they're doing with it will take an interest.

Thrift looks interesting.

Thrift looks interesting. Going to give that whitepaper a good read, license looks good too.

might want to use xmlrpc in

might want to use xmlrpc in the middle :)

+1 to XMLRPC. With a web api

+1 to XMLRPC. With a web api you can write a WUI and a GUI fairly easily. Plus you get a language agnostic layer.

Yeah XMLRPC and JSON both

Yeah XMLRPC and JSON both spring to mind. Unfortunately Twisted just takes care of so much networking / security / serialization cruft that it's gonna be hard to turn away from. Going to have to think about this one and make a decision while it's still early in the game. I think the right thing to do is to stick with being language agnostic.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
12 + 2 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.