Mobile Slots: Technical stuff
The long-awaited MIDP 2.0 Java standard came with a few things that really started
to make mobile Java useful. One was the full-fledged "socket" network connection, which
enables phones to connect to servers the same way an ordinary computer does. Networked
mobile Java applications existed prior to this, of course, but they typically
simulated a persistent connection by making repeated HTTP requests. It was a clumsy,
slow and rather costly solution, of interest to only a small group of techno-geeks.
That's not to say that MIDP 2.0 data transfer is particularly fast. Ping times (the
delay between sending a simple message and getting a response) are typically a couple
of seconds or longer on a standard mobile phone network. But that's good enough for
most turn-based games -- and some solo games which are expected to have a noticeable
response time, such as a slot machine, where the reels spin for a while before they stop.
PokerRoom.com had featured a couple of moderately
popular online slot machine games in its casino section. Building a mobile client
application for it seemed like a good way to test the limitations of this technology.
And since the communication might prove to be a bottleneck, I didn't let the phone connect
directly to the game server, but to a machine that used a much slimmer and simpler
Besides hopefully being faster, this "proxy" also saves the user a bit of money, since
mobile carriers typically charge per unit of transmitted data.
User authentication presented another problem. On the web, people use their nickname
and password to log in, but this would be unnecessarily awkward on a phone. Typing it
in would discourage people from playing. So it was decided that the mobile game would use
a 5-digit PIN code instead. The digits are then combined with a session-specific
16-byte random sequence and a user-specific 16-byte string, using the HMAC keyed
hashing algorithm. (By the way -- sending the wrong PIN code five times in a row disables
your copy of the application, on the server side.)