Index: client/.gitignore
===================================================================
--- client/.gitignore	(revision 6475138037f8825ef1e75833efa2789c0ebcabdd)
+++ client/.gitignore	(revision 2488852e451359e9522acfbd77cbb1c85fc0f292)
@@ -4,3 +4,4 @@
 Client.sdf
 Client.opensdf
+client
 allegro.log
Index: common/message.h
===================================================================
--- common/message.h	(revision 6475138037f8825ef1e75833efa2789c0ebcabdd)
+++ common/message.h	(revision 2488852e451359e9522acfbd77cbb1c85fc0f292)
@@ -1,4 +1,4 @@
 #ifndef _MESAGE_H
-#define _MESSAGE__H
+#define _MESSAGE_H
 
 #define MSG_TYPE_SOMETHING 1000
Index: server/.gitignore
===================================================================
--- server/.gitignore	(revision 6475138037f8825ef1e75833efa2789c0ebcabdd)
+++ server/.gitignore	(revision 2488852e451359e9522acfbd77cbb1c85fc0f292)
@@ -1,1 +1,2 @@
 server
+*.o
Index: server/makefile
===================================================================
--- server/makefile	(revision 6475138037f8825ef1e75833efa2789c0ebcabdd)
+++ server/makefile	(revision 2488852e451359e9522acfbd77cbb1c85fc0f292)
@@ -1,2 +1,18 @@
-server : ../common/message.cpp server.cpp
-	g++ -o $@ $? -lssl -lmysqlclient
+CC = g++
+LIB_FLAGS = -lssl -lmysqlclient
+FLAGS = $(LIB_FLAGS)
+COMMON_PATH = ../common
+DEPENDENCIES = message.o player.o
+
+server : server.cpp $(DEPENDENCIES)
+	$(CC) -o $@ $+ $(FLAGS)
+
+message.o : $(COMMON_PATH)/message.cpp
+	$(CC) -c -o $@ $?
+
+%.o : %.cpp
+	$(CC) -c -o $@ $?
+
+clean:
+	rm *.o
+	rm server
Index: server/player.cpp
===================================================================
--- server/player.cpp	(revision 2488852e451359e9522acfbd77cbb1c85fc0f292)
+++ server/player.cpp	(revision 2488852e451359e9522acfbd77cbb1c85fc0f292)
@@ -0,0 +1,25 @@
+#include "player.h"
+
+#include <iostream>
+#include <arpa/inet.h>
+
+using namespace std;
+
+player::player(string name, sockaddr_in addr)
+{
+   this->name = name;
+   this->addr = addr;
+
+   cout << "Created new played: " << this->name << endl;
+}
+
+player::~player()
+{
+}
+
+bool player::operator == (const player &p)
+{
+   bool eq = addr.sin_addr.s_addr == p.addr.sin_addr.s_addr;
+
+   return eq;
+}
Index: server/player.h
===================================================================
--- server/player.h	(revision 2488852e451359e9522acfbd77cbb1c85fc0f292)
+++ server/player.h	(revision 2488852e451359e9522acfbd77cbb1c85fc0f292)
@@ -0,0 +1,22 @@
+#ifndef _PLAYER_H
+#define _PLAYER_H
+
+#include <netinet/in.h>
+#include <string>
+
+using namespace std;
+
+class player {
+private:
+   sockaddr_in addr;
+
+public:
+   string name;
+
+   player(string name, sockaddr_in addr);
+   ~player();
+
+   bool operator == (const player &p);
+};
+
+#endif
Index: server/server.cpp
===================================================================
--- server/server.cpp	(revision 6475138037f8825ef1e75833efa2789c0ebcabdd)
+++ server/server.cpp	(revision 2488852e451359e9522acfbd77cbb1c85fc0f292)
@@ -2,12 +2,14 @@
 
 #include <sys/types.h>
-#include <stdlib.h>
+#include <cstdlib>
 #include <unistd.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
-#include <string.h>
+#include <string>
 #include <netdb.h>
-#include <stdio.h>
+#include <cstdio>
 #include <iostream>
+#include <vector>
+#include <algorithm>
 
 #include <mysql/mysql.h>
@@ -16,6 +18,8 @@
 #include <openssl/ssl.h>
 #include <openssl/err.h>
+
+#include "player.h"
 #include "../common/message.h"
-
+///////////
 using namespace std;
 
@@ -24,4 +28,17 @@
     perror(msg);
     exit(0);
+}
+
+player *findPlayerByName(vector<player> &vec, string name)
+{
+   vector<player>::iterator it;
+
+   for (it = vec.begin(); it != vec.end(); it++)
+   {
+      if ( it->name.compare(name) == 0 )
+         return &(*it);
+   }
+
+   return NULL;
 }
 
@@ -33,4 +50,5 @@
    struct sockaddr_in from;
    NETWORK_MSG clientMsg, serverMsg;
+   vector<player> vctPlayers;
 
    srand(time(NULL));
@@ -53,10 +71,11 @@
    bzero(&server,length);
    server.sin_family=AF_INET;
+   server.sin_port=htons(atoi(argv[1]));
    server.sin_addr.s_addr=INADDR_ANY;
-   server.sin_port=htons(atoi(argv[1]));
-   if (bind(sock,(struct sockaddr *)&server,length)<0) 
+   if ( bind(sock, (struct sockaddr *)&server, length) < 0 ) 
       error("binding");
    fromlen = sizeof(struct sockaddr_in);
    while (true) {
+      // if n == 0, means the client disconnected. may want to check this
       n = receiveMessage(&clientMsg, sock, &from);
       if (n < 0)
@@ -64,7 +83,33 @@
       cout << "msg: " << clientMsg.buffer << endl;
 
+      // Ptoyovol Design
+      //
+      // Client sends a login message
+      // Server replies with client's position in the world and positions of
+      // oall other logged in players
+      // Merver sends player ids along with locations
+      // This means a newly logged in client will need to know which id is
+      // assigned to it
+      // So server needs to send an id message, wait for an ack, and then send
+      // the location messages
+
+      // When a client shuts down, it sends a message to indicate this so the
+      // server can remove it from the list of connected clients
+      // Eventually, there'll need to be a way to detect timeouts from clients
+      // (if they crashed or otherwise failed to send the logout message)
+
       if (strcmp(clientMsg.buffer, "Hello") == 0)
       {
-         strcpy(serverMsg.buffer, "I'm thinking of a number between 1 and 1000. Guess what it is.");
+         player *p = findPlayerByName(vctPlayers, "Boberty");
+
+         if (p == NULL)
+         {
+            vctPlayers.push_back(player("Boberty", from));
+            strcpy(serverMsg.buffer, "I'm thinking of a number between 1 and 1000. Guess what it is.");
+         }
+         else
+         {
+            strcpy(serverMsg.buffer, "Player has already logged in.");
+         }
       }else {
          int guess = atoi(clientMsg.buffer);
