COMP 4104
Connect Four
Project Report
Date: Sunday December 18, 2011
Professor: Tony White
Name: Kevin Scroggins
Student ID: 100679071
E-Mail: nitro404@gmail.com
Name: Corey Faibish
Student ID: 100764177
E-Mail: cfaibish@connect.carleton.ca
Table of Contents
2.2.3 Connect Four Application
2.4.1 Client to Server Messages
2.4.2 Server to Client Messages
2.4.3 Client to GameSession Messages
2.4.4 GameSession to Client Messages
2.4.5 Determining Connectivity
5.3.1 Database Server Arguments
5.3.2 Matchmaking Server Arguments
Our goal is to create multi-player game of connect four on the Android using a central matchmaking server.
Our project will also implement a database for statistics tracking and user authentication.
Connect four is a two-player game where the players each take turns dropping pieces into the one of the columns of the seven column by six row grid. The pieces fall straight down occupying the next available space. Each player is designated a different color for their pieces (usually red and blue). The goal of the game is to connect four of your pieces either vertically, horizontally or diagonally before your opponent can do so. Our Android implementation uses its touch screen to display an interactive, virtual game board instead of dropping physical pieces into a game board.
Figure 1 - High-Level Architectural View of System
As shown in figure 1, our system is comprised of 3 major components: the database server, the matchmaking server and the actual connect four android application.
Our system makes use of a database for storing user accounts and match results. The database is designed to be a remote object (using RMI), which is used by the matchmaking server to interact with the database. The default database uses SQLite, however, our database also allows for alternative database implementations through its class loader. Alternative databases can be configured through the “dbms.cfg” file which specifies what database management systems are available.
In order for users running our application to be able to connect to each other, we have set up a server to allow them to do so. The matchmaking server handles all communications to and from the players, and updates the database when appropriate. Game sessions between users, credential authentication, stats tracking and other important tasks are managed by the matchmaking server.
The client-side of our system is the actual connect four Android application. This is where users can either play a game of connect for locally (hot-seat) or they can play online with another player (multi-player). Before users are able to play online, they are also required to log in.
The following subsections will describe specific elements of the database in more detail.
This section contains the table representation of our database, as well as description of what each entry’s purpose is.
Note:
UserData | Description |
UserName | User’s unique account name |
Password | User’s password |
LastLogin | Last time user logged in |
JoinDate | Date user created account |
Wins | Number of wins this user has |
Losses | Number of losses this user has |
Draws | Number of draws this user has |
GameHistory | Description |
GameDate | A timestamp of when the game was played |
FirstPlayer | References UserData.UserName |
SecondPlayer | References UserData.UserName |
Outcome | The outcome of the game, stored as an int such that:
Note that when a user leaves a game session before the game is finished, the game is not counted. |
This section contains a complete list of all queries that are executed on the database.
The following subsections will describe the design of our messaging protocol in more detail. Each message type is followed by bulleted points which represent its attributes.
Ping
Pong
Create Account
Login
Find Game
Ping
Pong
Account Created
Account Not Created
Logged In
Not Logged In
Player Stats
Place Piece
Left Session
Start Game
Piece Placed
Move Valid
Move Invalid
Player Won
Draw
Player Left
In order to ascertain connectivity, we have employed a Ping / Pong system to find out if the connection between the client and server is still active. One end will send a Ping signal, then, the other end must respond promptly with a Pong signal. If a Pong signal is not received within a specific amount of time, the connection times out and is terminated. It should be noted that both the server and client are constantly using Ping / Pong to verify their connection.
There are two time intervals relevant to the Ping / Pong system. One is the interval between when you receive a Pong and when you send your next Ping. This is known as the ping interval, and is set to 5 seconds. The second is the period of how long you wait for a response. This is called the connection timeout interval, and is set to 7.5 seconds.
Figure 2 - Sample Ping / Pong Case
Figure 2 displays an example case of the Ping / Pong system. In this example, we see how when a Ping is sent, it has a 7.5 sec interval for the corresponding Pong to be sent. Then, we see the responding Pong received back on the sender’s end. Next, the sender waits the 5-second ping interval, and then sends its next Ping, and the cycle starts again.
If the player does not already have an account on the server, they must first register one. This can be done by clicking the “Create Account” button. A prompt will appear, asking for a user name and password. Once the user enters their credentials, and presses “Ok”, they are forwarded to the server, and the account is created, so long as everything is valid and the account doesn’t already exist. After a response is received from the server, the user must then log into the account (assuming it was created successfully).
A player begins by clicking on the “Log In” button, which then prompts the user for their credentials (user name and password). Once entered, the player selects the “Ok” button, and the credentials are sent to the server for validation. Once the credentials are verified, the user is logged in. The user will be informed of such in a pop-up message, and a text status in the bottom-right corner of the screen, which will update and say in text “Logged In:” followed by the player’s user name.
If the credentials are invalid, a dialogue will appear notifying the user of the failed login, as well, and a text status in the bottom-right corner of the screen, which will update and say in text “Login Failed”.
A player begins by requesting a match by clicking on the “Start Game” button (assuming they are already logged in). A prompt will then appear asking if they would like to play hot-seat or multi-player (online). Assuming the player selects multi-player, the server will either:
Once the game session is full, a random starting player will be chosen, and a message will be sent to each player with appropriate information so that the game can begin.
A player begins by touching the column on the screen within the connect four board that he desires to drop a piece in. This move is then sent to the server for validation. The player is unable to place more pieces until the move is either validated or invalidated (although this should be virtually instantaneous).
The game ends when a player wins by joining 4 pieces in a row either horizontally, vertically or on a diagonal, or if the board becomes full. When this happens, a signal is sent to the players indicating that the game is over, and which player won (if any). A pop-up message will also appear indicating the outcome of the game.
All 3 of our systems are implemented in Java.
All messaging is done using RabbitMQ.
All database interactions are done via RMI using a remote object.
Our implementation of Connect Four on Android is developed using the Android 4.0 (API 14) SDK with Android 2.2 (API 8) as a minimum requirement for the device.
Due to strange issues with the Android SDK, the application may crash or become unstable if the phone changes orientation or goes to sleep, so try to avoid this if possible.
If the application is started while the phone is already asleep, the phone will also exhibit strange behaviour.
We also discovered that Android virtual devices exhibit strange behaviour when two are run on the same computer as well. It somehow results in devices receiving messages destined for a different device, or no messages at all. So, if you wish to test our code, do NOT run two virtual devices on the same computer. It is highly recommended that you run one application on a physical Android device, and another on a virtual device, or else the application will not work.
There is an implementation for determining if the Android application is still connected to the server, but since there are non-deterministic threading issues which cause this not to work on occasion (ie. Android app will say it is disconnected from the server, when it is not), we have disabled this so that functionality will not be hampered.
Our system is set up with hierarchical dependencies on our different programs. In order to run any instance of our Connect Four Android application, you must first run the Database Server, followed by the Matchmaking Server. Once these are both up and running in this order, you may then run the Android application.
A standard install of the Java Development Kit 1.6 or higher is required to run our software, as well as an install of the Android SDK 4.0 (API 14) and Android SDK 2.2 (API 8) in order to deploy the Android application.
Our system requires the RabbitMQ broker server to be running on a dedicated machine in order for the messaging queues to be able to talk to each other. This can be specified via the program arguments for the database server and matchmaking server, should it differ from the default (which is port forwarded and running on Kevin’s personal computer via dyndns - however this computer is not always on). So if an alternative computer is required to run the RabbitMQ broker server, you must run the program with alternate arguments and edit the code for the android app to change the default broker server (as it is hard-coded to the app).
The database server and matchmaking server can be run from Eclipse, or from the pre-compiled jars, which are provided. Since all program arguments are optional, there is no requirement to specify any arguments at runtime.
Figures 3 and 4 (respectively) - Main screen (before login) and account creation prompt.
Figures 5 and 6 (respectively) - Login prompt and main screen (after login).
Note the text at the bottom, which indicates that the user is logged in.
Figure 7 and 8 (respectively) - Prompt to select game mode and finding match dialog.
Figure 9 and 10 (respectively) - Game board on match start, and a sample game ending with red winning.
Figure 11 - Main screen, after a game was played.
Note the text at the bottom left updates with the player’s current stats.
Figure 12 - Database server window, with console selected.
This image contains sample output after playing some games.
Figure 13 - Database server window, with user data tab selected.
This image displays the contents of the user data table.
Figure 14 - Database server window, with the game history tab selected.
This image displays the contents of the game history table.
Figure 15 - Matchmaking server window, with console tab selected.
This image displays some output after some games that were played.
Figure 16 - Matchmaking server window, with the users tab selected.
This image displays all of the users connected to the server and their information.
Figure 17 - Matchmaking server window, with the game sessions tab selected.
This image shows the games sessions which are currently active.
2011-12-18 07:14:58 PM: Connecting to SQL Database: users.sql
2011-12-18 07:14:59 PM: Connected to SQL Database
2011-12-18 07:15:03 PM: Adding database listener
2011-12-18 07:16:08 PM: Added user "Corey" to database
2011-12-18 07:16:44 PM: User "Corey" logged in
2011-12-18 07:16:44 PM: Retrieved stats for user "Corey"
2011-12-18 07:17:51 PM: User "Corey" logged in
2011-12-18 07:17:51 PM: Retrieved stats for user "Corey"
2011-12-18 07:24:54 PM: Added user "nitro" to database
2011-12-18 07:26:25 PM: User "nitro" logged in
2011-12-18 07:26:25 PM: Retrieved stats for user "nitro"
2011-12-18 07:27:43 PM: User "Corey" logged in
2011-12-18 07:27:43 PM: Retrieved stats for user "Corey"
2011-12-18 07:30:16 PM: Added win for "nitro".
2011-12-18 07:30:16 PM: Notified 1 listeners of stats update for "nitro"
2011-12-18 07:30:16 PM: Added loss for "Corey".
2011-12-18 07:30:16 PM: Notified 1 listeners of stats update for "Corey"
2011-12-18 07:30:16 PM: Added match for "nitro" vs. "Corey" with outcome Win
2011-12-18 07:32:27 PM: User "Corey " failed to login with valid credentials
2011-12-18 07:32:37 PM: User "Corey" logged in
2011-12-18 07:32:37 PM: Retrieved stats for user "Corey"
2011-12-18 07:33:51 PM: User "Corey" logged in
2011-12-18 07:33:51 PM: Retrieved stats for user "Corey"
2011-12-18 07:35:26 PM: Added win for "nitro".
2011-12-18 07:35:26 PM: Notified 1 listeners of stats update for "nitro"
2011-12-18 07:35:26 PM: Added loss for "Corey".
2011-12-18 07:35:26 PM: Notified 1 listeners of stats update for "Corey"
2011-12-18 07:35:26 PM: Added match for "nitro" vs. "Corey" with outcome Win
2011-12-18 07:37:21 PM: Added win for "Corey".
2011-12-18 07:37:21 PM: Notified 1 listeners of stats update for "Corey"
2011-12-18 07:37:21 PM: Added loss for "nitro".
2011-12-18 07:37:21 PM: Notified 1 listeners of stats update for "nitro"
2011-12-18 07:37:21 PM: Added match for "nitro" vs. "Corey" with outcome Loss
2011-12-18 07:38:36 PM: User "Corey" logged in
2011-12-18 07:38:36 PM: Retrieved stats for user "Corey"
2011-12-18 07:40:54 PM: Added draw for "Corey".
2011-12-18 07:40:54 PM: Notified 1 listeners of stats update for "Corey"
2011-12-18 07:40:54 PM: Added draw for "nitro".
2011-12-18 07:40:54 PM: Notified 1 listeners of stats update for "nitro"
2011-12-18 07:40:54 PM: Added match for "Corey" vs. "nitro" with outcome Draw
2011-12-18 07:41:45 PM: Added user "John" to database
2011-12-18 07:42:01 PM: User "John" logged in
2011-12-18 07:42:01 PM: Retrieved stats for user "John"
2011-12-18 07:43:15 PM: Added win for "Corey".
2011-12-18 07:43:15 PM: Notified 1 listeners of stats update for "Corey"
2011-12-18 07:43:15 PM: Added loss for "John".
2011-12-18 07:43:15 PM: Notified 1 listeners of stats update for "John"
2011-12-18 07:43:16 PM: Added match for "John" vs. "Corey" with outcome Loss
2011-12-18 07:46:42 PM: User "nitro" logged in
2011-12-18 07:46:42 PM: Retrieved stats for user "nitro"
2011-12-18 07:47:49 PM: User "nitro" logged in
2011-12-18 07:47:49 PM: Retrieved stats for user "nitro"
2011-12-18 07:56:13 PM: Added user "Walrus" to database
2011-12-18 07:56:43 PM: User "Walrus" logged in
2011-12-18 07:56:43 PM: Retrieved stats for user "Walrus"
2011-12-18 07:58:46 PM: Added win for "Corey".
2011-12-18 07:58:46 PM: Notified 1 listeners of stats update for "Corey"
2011-12-18 07:58:46 PM: Added loss for "nitro".
2011-12-18 07:58:46 PM: Notified 1 listeners of stats update for "nitro"
2011-12-18 07:58:46 PM: Added match for "nitro" vs. "Corey" with outcome Loss
2011-12-18 07:58:59 PM: Added win for "John".
2011-12-18 07:58:59 PM: Notified 1 listeners of stats update for "John"
2011-12-18 07:58:59 PM: Added loss for "Walrus".
2011-12-18 07:58:59 PM: Notified 1 listeners of stats update for "Walrus"
2011-12-18 07:58:59 PM: Added match for "John" vs. "Walrus" with outcome Win
2011-12-18 08:03:55 PM: Removing database listener
2011-12-18 07:16:08 PM: Created account for user: "Corey"
2011-12-18 07:16:44 PM: User "Corey" logged in
2011-12-18 07:16:44 PM: Sending stats to user "Corey"
2011-12-18 07:17:12 PM: User "Corey" timed out.
2011-12-18 07:17:51 PM: User "Corey" logged in
2011-12-18 07:17:51 PM: Sending stats to user "Corey"
2011-12-18 07:18:27 PM: Client with queue name "9774d56d682e549c Queue" timed out.
2011-12-18 07:24:29 PM: User "Corey" timed out.
2011-12-18 07:24:54 PM: Created account for user: "nitro"
2011-12-18 07:26:25 PM: User "nitro" logged in
2011-12-18 07:26:25 PM: Sending stats to user "nitro"
2011-12-18 07:27:27 PM: User "nitro" is requesting a match
2011-12-18 07:27:27 PM: Created session #1 for user "nitro"
2011-12-18 07:27:43 PM: User "Corey" logged in
2011-12-18 07:27:43 PM: Sending stats to user "Corey"
2011-12-18 07:28:06 PM: User "Corey" is requesting a match
2011-12-18 07:28:06 PM: User "Corey" added to session #1
2011-12-18 07:28:06 PM: Starting session #1
2011-12-18 07:29:16 PM: Player "nitro" placed piece at location: (2, 5)
2011-12-18 07:29:18 PM: Player "Corey" placed piece at location: (3, 5)
2011-12-18 07:29:19 PM: Player "nitro" placed piece at location: (3, 4)
2011-12-18 07:29:23 PM: Player "Corey" placed piece at location: (4, 5)
2011-12-18 07:29:25 PM: Player "nitro" placed piece at location: (5, 5)
2011-12-18 07:29:28 PM: Player "Corey" placed piece at location: (2, 4)
2011-12-18 07:29:29 PM: Player "nitro" placed piece at location: (4, 4)
2011-12-18 07:29:39 PM: Player "Corey" placed piece at location: (3, 3)
2011-12-18 07:29:41 PM: Player "nitro" placed piece at location: (1, 5)
2011-12-18 07:29:45 PM: Player "Corey" placed piece at location: (2, 3)
2011-12-18 07:29:47 PM: Player "nitro" placed piece at location: (4, 3)
2011-12-18 07:29:50 PM: Player "Corey" placed piece at location: (4, 2)
2011-12-18 07:29:53 PM: Player "nitro" placed piece at location: (3, 2)
2011-12-18 07:29:55 PM: Player "Corey" placed piece at location: (5, 4)
2011-12-18 07:30:06 PM: Player "nitro" placed piece at location: (2, 2)
2011-12-18 07:30:12 PM: Player "Corey" placed piece at location: (5, 3)
2011-12-18 07:30:16 PM: Player "nitro" placed piece at location: (5, 2)
2011-12-18 07:30:16 PM: Sending updated stats to user "nitro"
2011-12-18 07:30:16 PM: Sending updated stats to user "Corey"
2011-12-18 07:30:16 PM: Removing finished session #1
2011-12-18 07:30:16 PM: Player "nitro" won the game in session #1!
2011-12-18 07:32:10 PM: User "Corey" timed out.
2011-12-18 07:32:26 PM: User "nitro" is requesting a match
2011-12-18 07:32:27 PM: Created session #2 for user "nitro"
2011-12-18 07:32:27 PM: User "Corey " failed to log in with valid credentials
2011-12-18 07:32:37 PM: User "Corey" logged in
2011-12-18 07:32:37 PM: Sending stats to user "Corey"
2011-12-18 07:32:38 PM: Player "nitro" left session #2
2011-12-18 07:32:38 PM: Removing session #2
2011-12-18 07:32:43 PM: User "Corey" is requesting a match
2011-12-18 07:32:43 PM: Created session #3 for user "Corey"
2011-12-18 07:32:51 PM: User "nitro" is requesting a match
2011-12-18 07:32:51 PM: User "nitro" added to session #3
2011-12-18 07:32:51 PM: Starting session #3
2011-12-18 07:33:01 PM: Player "nitro" placed piece at location: (1, 5)
2011-12-18 07:33:03 PM: Player "Corey" placed piece at location: (3, 5)
2011-12-18 07:33:06 PM: Player "nitro" placed piece at location: (2, 5)
2011-12-18 07:33:09 PM: Player "Corey" placed piece at location: (4, 5)
2011-12-18 07:33:11 PM: Player "nitro" placed piece at location: (5, 5)
2011-12-18 07:33:12 PM: Player "Corey" placed piece at location: (4, 4)
2011-12-18 07:33:13 PM: Player "Corey" left session #3
2011-12-18 07:33:13 PM: Removing session #3
2011-12-18 07:33:21 PM: User "nitro" is requesting a match
2011-12-18 07:33:21 PM: Created session #4 for user "nitro"
2011-12-18 07:33:51 PM: User "Corey" logged in
2011-12-18 07:33:51 PM: Sending stats to user "Corey"
2011-12-18 07:33:54 PM: User "Corey" is requesting a match
2011-12-18 07:33:54 PM: User "Corey" added to session #4
2011-12-18 07:33:54 PM: Starting session #4
2011-12-18 07:33:57 PM: Player "Corey" placed piece at location: (4, 5)
2011-12-18 07:33:58 PM: Player "nitro" placed piece at location: (4, 4)
2011-12-18 07:34:00 PM: Player "nitro" left session #4
2011-12-18 07:34:00 PM: Removing session #4
2011-12-18 07:34:11 PM: User "nitro" is requesting a match
2011-12-18 07:34:11 PM: Created session #5 for user "nitro"
2011-12-18 07:34:11 PM: User "Corey" is requesting a match
2011-12-18 07:34:11 PM: User "Corey" added to session #5
2011-12-18 07:34:11 PM: Starting session #5
2011-12-18 07:34:25 PM: Player "Corey" placed piece at location: (3, 5)
2011-12-18 07:34:26 PM: Player "nitro" placed piece at location: (3, 4)
2011-12-18 07:34:27 PM: Player "Corey" placed piece at location: (3, 3)
2011-12-18 07:34:27 PM: Player "nitro" placed piece at location: (3, 2)
2011-12-18 07:34:28 PM: Player "Corey" placed piece at location: (3, 1)
2011-12-18 07:34:29 PM: Player "nitro" placed piece at location: (3, 0)
2011-12-18 07:34:33 PM: Player "Corey" attempted an invalid move in column: 3
2011-12-18 07:34:34 PM: Player "Corey" attempted an invalid move in column: 3
2011-12-18 07:34:35 PM: Player "Corey" placed piece at location: (4, 5)
2011-12-18 07:34:36 PM: Player "nitro" placed piece at location: (4, 4)
2011-12-18 07:34:38 PM: Player "Corey" placed piece at location: (4, 3)
2011-12-18 07:34:39 PM: Player "nitro" placed piece at location: (4, 2)
2011-12-18 07:34:39 PM: Player "Corey" placed piece at location: (4, 1)
2011-12-18 07:34:40 PM: Player "nitro" placed piece at location: (4, 0)
2011-12-18 07:34:44 PM: Player "Corey" attempted an invalid move in column: 4
2011-12-18 07:34:47 PM: Player "Corey" placed piece at location: (2, 5)
2011-12-18 07:34:48 PM: Player "nitro" placed piece at location: (2, 4)
2011-12-18 07:34:49 PM: Player "Corey" placed piece at location: (2, 3)
2011-12-18 07:34:49 PM: Player "nitro" placed piece at location: (2, 2)
2011-12-18 07:34:50 PM: Player "Corey" placed piece at location: (2, 1)
2011-12-18 07:34:57 PM: Player "nitro" placed piece at location: (1, 5)
2011-12-18 07:34:59 PM: Player "Corey" placed piece at location: (1, 4)
2011-12-18 07:35:01 PM: Player "nitro" placed piece at location: (5, 5)
2011-12-18 07:35:02 PM: Player "Corey" placed piece at location: (5, 4)
2011-12-18 07:35:03 PM: Player "nitro" placed piece at location: (5, 3)
2011-12-18 07:35:04 PM: Player "Corey" placed piece at location: (5, 2)
2011-12-18 07:35:05 PM: Player "nitro" placed piece at location: (5, 1)
2011-12-18 07:35:06 PM: Player "Corey" placed piece at location: (5, 0)
2011-12-18 07:35:07 PM: Player "nitro" placed piece at location: (6, 5)
2011-12-18 07:35:09 PM: Player "Corey" placed piece at location: (6, 4)
2011-12-18 07:35:10 PM: Player "nitro" placed piece at location: (6, 3)
2011-12-18 07:35:10 PM: Player "Corey" placed piece at location: (6, 2)
2011-12-18 07:35:11 PM: Player "nitro" placed piece at location: (6, 1)
2011-12-18 07:35:12 PM: Player "Corey" placed piece at location: (6, 0)
2011-12-18 07:35:14 PM: Player "nitro" placed piece at location: (1, 3)
2011-12-18 07:35:16 PM: Player "Corey" placed piece at location: (1, 2)
2011-12-18 07:35:17 PM: Player "nitro" placed piece at location: (1, 1)
2011-12-18 07:35:18 PM: Player "Corey" placed piece at location: (1, 0)
2011-12-18 07:35:20 PM: Player "nitro" placed piece at location: (2, 0)
2011-12-18 07:35:23 PM: Player "Corey" placed piece at location: (0, 5)
2011-12-18 07:35:24 PM: Player "nitro" placed piece at location: (0, 4)
2011-12-18 07:35:25 PM: Player "Corey" placed piece at location: (0, 3)
2011-12-18 07:35:26 PM: Player "nitro" placed piece at location: (0, 2)
2011-12-18 07:35:26 PM: Removing finished session #5
2011-12-18 07:35:26 PM: Sending updated stats to user "nitro"
2011-12-18 07:35:26 PM: Sending updated stats to user "Corey"
2011-12-18 07:35:26 PM: Player "nitro" won the game in session #5!
2011-12-18 07:36:31 PM: User "nitro" is requesting a match
2011-12-18 07:36:31 PM: Created session #6 for user "nitro"
2011-12-18 07:36:32 PM: User "Corey" is requesting a match
2011-12-18 07:36:32 PM: User "Corey" added to session #6
2011-12-18 07:36:32 PM: Starting session #6
2011-12-18 07:36:35 PM: Player "nitro" placed piece at location: (3, 5)
2011-12-18 07:36:36 PM: Player "Corey" placed piece at location: (3, 4)
2011-12-18 07:36:37 PM: Player "nitro" placed piece at location: (3, 3)
2011-12-18 07:36:37 PM: Player "Corey" placed piece at location: (3, 2)
2011-12-18 07:36:38 PM: Player "nitro" placed piece at location: (3, 1)
2011-12-18 07:36:38 PM: Player "Corey" placed piece at location: (3, 0)
2011-12-18 07:36:40 PM: Player "nitro" attempted an invalid move in column: 3
2011-12-18 07:36:41 PM: Player "nitro" placed piece at location: (2, 5)
2011-12-18 07:36:42 PM: Player "Corey" placed piece at location: (2, 4)
2011-12-18 07:36:43 PM: Player "nitro" placed piece at location: (2, 3)
2011-12-18 07:36:44 PM: Player "Corey" placed piece at location: (2, 2)
2011-12-18 07:36:44 PM: Player "nitro" placed piece at location: (2, 1)
2011-12-18 07:36:45 PM: Player "Corey" placed piece at location: (2, 0)
2011-12-18 07:36:46 PM: Player "nitro" placed piece at location: (4, 5)
2011-12-18 07:36:47 PM: Player "Corey" placed piece at location: (4, 4)
2011-12-18 07:36:48 PM: Player "nitro" placed piece at location: (4, 3)
2011-12-18 07:36:49 PM: Player "Corey" placed piece at location: (4, 2)
2011-12-18 07:36:50 PM: Player "nitro" placed piece at location: (4, 1)
2011-12-18 07:36:51 PM: Player "Corey" placed piece at location: (4, 0)
2011-12-18 07:36:58 PM: Player "nitro" placed piece at location: (0, 5)
2011-12-18 07:37:00 PM: Player "Corey" placed piece at location: (1, 5)
2011-12-18 07:37:03 PM: Player "nitro" placed piece at location: (1, 4)
2011-12-18 07:37:04 PM: Player "Corey" placed piece at location: (5, 5)
2011-12-18 07:37:07 PM: Player "nitro" placed piece at location: (5, 4)
2011-12-18 07:37:09 PM: Player "Corey" placed piece at location: (5, 3)
2011-12-18 07:37:10 PM: Player "nitro" placed piece at location: (5, 2)
2011-12-18 07:37:10 PM: Player "Corey" placed piece at location: (5, 1)
2011-12-18 07:37:11 PM: Player "nitro" placed piece at location: (5, 0)
2011-12-18 07:37:13 PM: Player "Corey" placed piece at location: (1, 3)
2011-12-18 07:37:14 PM: Player "nitro" placed piece at location: (1, 2)
2011-12-18 07:37:15 PM: Player "Corey" placed piece at location: (1, 1)
2011-12-18 07:37:16 PM: Player "nitro" placed piece at location: (1, 0)
2011-12-18 07:37:19 PM: Player "Corey" placed piece at location: (0, 4)
2011-12-18 07:37:20 PM: Player "nitro" placed piece at location: (0, 3)
2011-12-18 07:37:21 PM: Player "Corey" placed piece at location: (0, 2)
2011-12-18 07:37:21 PM: Removing finished session #6
2011-12-18 07:37:21 PM: Sending updated stats to user "Corey"
2011-12-18 07:37:21 PM: Sending updated stats to user "nitro"
2011-12-18 07:37:21 PM: Player "Corey" won the game in session #6!
2011-12-18 07:37:28 PM: User "nitro" is requesting a match
2011-12-18 07:37:28 PM: Created session #7 for user "nitro"
2011-12-18 07:37:34 PM: User "Corey" is requesting a match
2011-12-18 07:37:34 PM: User "Corey" added to session #7
2011-12-18 07:37:34 PM: Starting session #7
2011-12-18 07:37:50 PM: Player "nitro" left session #7
2011-12-18 07:37:50 PM: Removing finished session #7
2011-12-18 07:38:19 PM: User "Corey" timed out.
2011-12-18 07:38:36 PM: User "Corey" logged in
2011-12-18 07:38:36 PM: Sending stats to user "Corey"
2011-12-18 07:38:48 PM: User "Corey" is requesting a match
2011-12-18 07:38:48 PM: Created session #8 for user "Corey"
2011-12-18 07:38:49 PM: User "nitro" is requesting a match
2011-12-18 07:38:49 PM: User "nitro" added to session #8
2011-12-18 07:38:49 PM: Starting session #8
2011-12-18 07:38:52 PM: Player "nitro" placed piece at location: (3, 5)
2011-12-18 07:38:55 PM: Player "Corey" placed piece at location: (3, 4)
2011-12-18 07:38:56 PM: Player "nitro" placed piece at location: (3, 3)
2011-12-18 07:38:57 PM: Player "Corey" placed piece at location: (3, 2)
2011-12-18 07:38:58 PM: Player "nitro" placed piece at location: (3, 1)
2011-12-18 07:38:58 PM: Player "Corey" placed piece at location: (3, 0)
2011-12-18 07:39:00 PM: Player "nitro" placed piece at location: (4, 5)
2011-12-18 07:39:01 PM: Player "Corey" placed piece at location: (4, 4)
2011-12-18 07:39:01 PM: Player "nitro" placed piece at location: (4, 3)
2011-12-18 07:39:02 PM: Player "Corey" placed piece at location: (4, 2)
2011-12-18 07:39:10 PM: Player "nitro" placed piece at location: (4, 1)
2011-12-18 07:39:13 PM: Player "Corey" placed piece at location: (5, 5)
2011-12-18 07:39:16 PM: Player "nitro" placed piece at location: (5, 4)
2011-12-18 07:39:17 PM: Player "Corey" placed piece at location: (5, 3)
2011-12-18 07:39:18 PM: Player "nitro" placed piece at location: (5, 2)
2011-12-18 07:39:19 PM: Player "Corey" placed piece at location: (4, 0)
2011-12-18 07:39:23 PM: Player "nitro" placed piece at location: (2, 5)
2011-12-18 07:39:25 PM: Player "Corey" placed piece at location: (5, 1)
2011-12-18 07:39:27 PM: Player "nitro" placed piece at location: (5, 0)
2011-12-18 07:39:29 PM: Player "Corey" placed piece at location: (2, 4)
2011-12-18 07:39:31 PM: Player "nitro" placed piece at location: (2, 3)
2011-12-18 07:39:32 PM: Player "Corey" placed piece at location: (2, 2)
2011-12-18 07:39:33 PM: Player "nitro" placed piece at location: (2, 1)
2011-12-18 07:39:34 PM: Player "Corey" placed piece at location: (2, 0)
2011-12-18 07:39:53 PM: Player "nitro" placed piece at location: (0, 5)
2011-12-18 07:39:55 PM: Player "Corey" placed piece at location: (1, 5)
2011-12-18 07:40:00 PM: Player "nitro" placed piece at location: (1, 4)
2011-12-18 07:40:02 PM: Player "Corey" placed piece at location: (1, 3)
2011-12-18 07:40:03 PM: Player "nitro" placed piece at location: (1, 2)
2011-12-18 07:40:04 PM: Player "Corey" placed piece at location: (1, 1)
2011-12-18 07:40:08 PM: Player "nitro" placed piece at location: (1, 0)
2011-12-18 07:40:18 PM: Player "Corey" placed piece at location: (0, 4)
2011-12-18 07:40:28 PM: Player "nitro" placed piece at location: (0, 3)
2011-12-18 07:40:31 PM: Player "Corey" placed piece at location: (6, 5)
2011-12-18 07:40:32 PM: Player "nitro" placed piece at location: (6, 4)
2011-12-18 07:40:34 PM: Player "Corey" placed piece at location: (6, 3)
2011-12-18 07:40:35 PM: Player "nitro" placed piece at location: (6, 2)
2011-12-18 07:40:36 PM: Player "Corey" placed piece at location: (6, 1)
2011-12-18 07:40:43 PM: Player "nitro" placed piece at location: (0, 2)
2011-12-18 07:40:51 PM: Player "Corey" placed piece at location: (0, 1)
2011-12-18 07:40:52 PM: Player "nitro" placed piece at location: (6, 0)
2011-12-18 07:40:54 PM: Player "Corey" placed piece at location: (0, 0)
2011-12-18 07:40:54 PM: Sending updated stats to user "Corey"
2011-12-18 07:40:54 PM: Sending updated stats to user "nitro"
2011-12-18 07:40:54 PM: Session #8 ended in a draw.
2011-12-18 07:40:54 PM: Removing session #8
2011-12-18 07:41:21 PM: User "nitro" timed out.
2011-12-18 07:41:45 PM: Created account for user: "John"
2011-12-18 07:42:01 PM: User "John" logged in
2011-12-18 07:42:01 PM: Sending stats to user "John"
2011-12-18 07:42:07 PM: User "John" is requesting a match
2011-12-18 07:42:07 PM: Created session #9 for user "John"
2011-12-18 07:42:08 PM: User "Corey" is requesting a match
2011-12-18 07:42:08 PM: User "Corey" added to session #9
2011-12-18 07:42:08 PM: Starting session #9
2011-12-18 07:42:12 PM: Player "Corey" placed piece at location: (3, 5)
2011-12-18 07:42:14 PM: Player "John" placed piece at location: (6, 5)
2011-12-18 07:42:16 PM: Player "Corey" placed piece at location: (6, 4)
2011-12-18 07:42:17 PM: Player "John" placed piece at location: (5, 5)
2011-12-18 07:42:18 PM: Player "Corey" placed piece at location: (5, 4)
2011-12-18 07:42:21 PM: Player "John" placed piece at location: (3, 4)
2011-12-18 07:42:23 PM: Player "Corey" placed piece at location: (3, 3)
2011-12-18 07:42:25 PM: Player "John" placed piece at location: (3, 2)
2011-12-18 07:42:29 PM: Player "Corey" placed piece at location: (5, 3)
2011-12-18 07:42:33 PM: Player "John" placed piece at location: (0, 5)
2011-12-18 07:42:35 PM: Player "Corey" placed piece at location: (5, 2)
2011-12-18 07:42:37 PM: Player "John" placed piece at location: (5, 1)
2011-12-18 07:42:41 PM: Player "Corey" placed piece at location: (3, 1)
2011-12-18 07:42:42 PM: Player "John" placed piece at location: (4, 5)
2011-12-18 07:42:44 PM: Player "Corey" placed piece at location: (3, 0)
2011-12-18 07:42:47 PM: Player "John" placed piece at location: (2, 5)
2011-12-18 07:42:53 PM: Player "Corey" placed piece at location: (5, 0)
2011-12-18 07:42:55 PM: Player "John" placed piece at location: (1, 5)
2011-12-18 07:42:57 PM: Player "Corey" placed piece at location: (4, 4)
2011-12-18 07:42:58 PM: Player "John" placed piece at location: (1, 4)
2011-12-18 07:43:08 PM: Player "Corey" placed piece at location: (0, 4)
2011-12-18 07:43:09 PM: Player "John" placed piece at location: (4, 3)
2011-12-18 07:43:15 PM: Player "Corey" placed piece at location: (4, 2)
2011-12-18 07:43:15 PM: Sending updated stats to user "Corey"
2011-12-18 07:43:15 PM: Sending updated stats to user "John"
2011-12-18 07:43:16 PM: Removing finished session #9
2011-12-18 07:43:16 PM: Player "Corey" won the game in session #9!
2011-12-18 07:46:42 PM: User "nitro" logged in
2011-12-18 07:46:42 PM: Sending stats to user "nitro"
2011-12-18 07:47:36 PM: User "nitro" timed out.
2011-12-18 07:47:49 PM: User "nitro" logged in
2011-12-18 07:47:49 PM: Sending stats to user "nitro"
2011-12-18 07:56:13 PM: Created account for user: "Walrus"
2011-12-18 07:56:37 PM: User "John" is requesting a match
2011-12-18 07:56:37 PM: Created session #10 for user "John"
2011-12-18 07:56:43 PM: User "Walrus" logged in
2011-12-18 07:56:43 PM: Sending stats to user "Walrus"
2011-12-18 07:56:47 PM: User "Walrus" is requesting a match
2011-12-18 07:56:47 PM: User "Walrus" added to session #10
2011-12-18 07:56:47 PM: Starting session #10
2011-12-18 07:57:04 PM: Player "John" placed piece at location: (1, 5)
2011-12-18 07:57:05 PM: Player "Walrus" placed piece at location: (3, 5)
2011-12-18 07:57:06 PM: Player "John" placed piece at location: (5, 5)
2011-12-18 07:57:08 PM: Player "Walrus" placed piece at location: (3, 4)
2011-12-18 07:57:09 PM: Player "John" placed piece at location: (3, 3)
2011-12-18 07:57:16 PM: User "nitro" is requesting a match
2011-12-18 07:57:16 PM: Created session #11 for user "nitro"
2011-12-18 07:57:18 PM: User "Corey" is requesting a match
2011-12-18 07:57:19 PM: User "Corey" added to session #11
2011-12-18 07:57:19 PM: Starting session #11
2011-12-18 07:57:21 PM: Player "Corey" placed piece at location: (3, 5)
2011-12-18 07:57:23 PM: Player "nitro" placed piece at location: (5, 5)
2011-12-18 07:57:24 PM: Player "Corey" placed piece at location: (3, 4)
2011-12-18 07:57:26 PM: Player "nitro" placed piece at location: (0, 5)
2011-12-18 07:57:31 PM: Player "Walrus" placed piece at location: (4, 5)
2011-12-18 07:57:33 PM: Player "John" placed piece at location: (0, 5)
2011-12-18 07:57:35 PM: Player "Walrus" placed piece at location: (6, 5)
2011-12-18 07:57:38 PM: Player "Corey" placed piece at location: (0, 4)
2011-12-18 07:57:39 PM: Player "nitro" placed piece at location: (6, 5)
2011-12-18 07:57:40 PM: Player "Corey" placed piece at location: (6, 4)
2011-12-18 07:57:41 PM: Player "nitro" placed piece at location: (0, 3)
2011-12-18 07:58:44 PM: Player "Corey" placed piece at location: (3, 3)
2011-12-18 07:58:45 PM: Player "nitro" placed piece at location: (5, 4)
2011-12-18 07:58:46 PM: Player "Corey" placed piece at location: (3, 2)
2011-12-18 07:58:46 PM: Removing finished session #11
2011-12-18 07:58:46 PM: Sending updated stats to user "Corey"
2011-12-18 07:58:46 PM: Sending updated stats to user "nitro"
2011-12-18 07:58:46 PM: Player "Corey" won the game in session #11!
2011-12-18 07:58:53 PM: Player "John" placed piece at location: (4, 4)
2011-12-18 07:58:56 PM: Player "Walrus" placed piece at location: (2, 5)
2011-12-18 07:58:56 PM: Player "John" placed piece at location: (2, 4)
2011-12-18 07:58:58 PM: Player "Walrus" placed piece at location: (2, 3)
2011-12-18 07:58:58 PM: Player "John" placed piece at location: (2, 2)
2011-12-18 07:58:59 PM: Sending updated stats to user "John"
2011-12-18 07:58:59 PM: Removing finished session #10
2011-12-18 07:58:59 PM: Sending updated stats to user "Walrus"
2011-12-18 07:58:59 PM: Player "John" won the game in session #10!
2011-12-18 08:01:00 PM: User "nitro" timed out.
2011-12-18 08:01:06 PM: User "Walrus" timed out.
2011-12-18 08:01:07 PM: User "John" timed out.
2011-12-18 08:01:12 PM: User "Corey" timed out.