Changeset 8e540f4 in network-game for server


Ignore:
Timestamp:
Nov 27, 2012, 4:03:52 PM (12 years ago)
Author:
dportnoy <dmp1488@…>
Branches:
master
Children:
36082e8
Parents:
2318fff
Message:

Created a separate function for processing error messages, began capitalizing class names and class-related file names, and fixed the include guard in message,h

Location:
server
Files:
2 edited
2 moved

Legend:

Unmodified
Added
Removed
  • server/Player.cpp

    r2318fff r8e540f4  
    1 #include "player.h"
     1#include "Player.h"
    22
    33#include <iostream>
     
    66using namespace std;
    77
    8 player::player(string name, sockaddr_in addr)
     8Player::Player(string name, sockaddr_in addr)
    99{
    1010   this->name = name;
     
    1414}
    1515
    16 player::~player()
     16Player::~Player()
    1717{
    1818}
    1919
    2020// was meant for the find find function. Currently unused
    21 bool player::operator == (const player &p)
     21bool Player::operator == (const Player &p)
    2222{
    2323   bool eq = addr.sin_addr.s_addr == p.addr.sin_addr.s_addr;
  • server/Player.h

    r2318fff r8e540f4  
    77using namespace std;
    88
    9 class player {
     9class Player {
    1010public:
     11   Player(string name, sockaddr_in addr);
     12   ~Player();
     13
     14   bool operator == (const Player &p);
     15
    1116   string name;
    1217   sockaddr_in addr;
    13 
    14    player(string name, sockaddr_in addr);
    15    ~player();
    16 
    17    bool operator == (const player &p);
    1818};
    1919
  • server/makefile

    r2318fff r8e540f4  
    33FLAGS = $(LIB_FLAGS)
    44COMMON_PATH = ../common
    5 DEPENDENCIES = message.o player.o
     5DEPENDENCIES = message.o Player.o
    66
    77server : server.cpp $(DEPENDENCIES)
  • server/server.cpp

    r2318fff r8e540f4  
    2020#include <openssl/err.h>
    2121
    22 #include "player.h"
     22#include "Player.h"
    2323#include "../common/message.h"
    2424
     
    4242using namespace std;
    4343
     44void processMessage(const NETWORK_MSG &clientMsg, const struct sockaddr_in &from, vector<Player> &vctPlayers, int &num, NETWORK_MSG &serverMsg);
     45
    4446// this should probably go somewhere in the common folder
    4547void error(const char *msg)
     
    4951}
    5052
    51 player *findPlayerByName(vector<player> &vec, string name)
    52 {
    53    vector<player>::iterator it;
     53Player *findPlayerByName(vector<Player> &vec, string name)
     54{
     55   vector<Player>::iterator it;
    5456
    5557   for (it = vec.begin(); it != vec.end(); it++)
     
    6466// not sure if we actually need this function
    6567// when I made it, I thought we did
    66 player *findPlayerByAddr(vector<player> &vec, sockaddr_in &addr)
    67 {
    68    vector<player>::iterator it;
     68Player *findPlayerByAddr(vector<Player> &vec, const sockaddr_in &addr)
     69{
     70   vector<Player>::iterator it;
    6971
    7072   for (it = vec.begin(); it != vec.end(); it++)
     
    8486   struct sockaddr_in from; // holds the info on the connected client
    8587   NETWORK_MSG clientMsg, serverMsg;
    86    vector<player> vctPlayers;
     88   vector<Player> vctPlayers;
    8789
    8890   srand(time(NULL));
     
    115117      if (n < 0)
    116118         error("recieveMessage");
    117       cout << "ip address: " << inet_ntoa(from.sin_addr) << endl;
    118       cout << "port: " << from.sin_port << endl;
    119       cout << "MSG: type: " << clientMsg.type << endl;
    120       cout << "MSG contents: " << clientMsg.buffer << endl;
    121 
    122       // Check that if an invalid message is sent, the client will corectly
    123       // receive and display the response. Maybe make a special error msg type
    124       switch(clientMsg.type)
    125       {
    126          case MSG_TYPE_LOGIN:
    127          {
    128             string name(clientMsg.buffer);
    129             cout << "Player logging in: " << name << endl;
    130 
    131             player *p = findPlayerByName(vctPlayers, name);
    132 
    133             if (p == NULL)
    134             {
    135                vctPlayers.push_back(player(name, from));
    136                strcpy(serverMsg.buffer, "I'm thinking of a number between 1 and 1000. Guess what it is.");
    137             }
    138             else
    139             {
    140                strcpy(serverMsg.buffer, "Player has already logged in.");
    141             }
    142 
    143             serverMsg.type = MSG_TYPE_LOGIN;
    144 
    145             break;
    146          }
    147          case MSG_TYPE_LOGOUT:
    148          {
    149             string name(clientMsg.buffer);
    150             cout << "Player logging out: " << name << endl;
    151 
    152             player *p = findPlayerByName(vctPlayers, name);
    153 
    154             if (p == NULL)
    155             {
    156                strcpy(serverMsg.buffer, "That player is not logged in. This is either a bug, or you're trying to hack the server.");
    157             }
    158             else if( p->addr.sin_addr.s_addr != from.sin_addr.s_addr ||
    159                      p->addr.sin_port != from.sin_port )
    160             {
    161                strcpy(serverMsg.buffer, "That player is logged in using a differemt connection. This is either a bug, or you're trying to hack the server.");
    162             }
    163             else
    164             {
    165                vctPlayers.erase((vector<player>::iterator)p);
    166                strcpy(serverMsg.buffer, "You have successfully logged out. You may quit the game.");
    167             }
    168 
    169             break;
    170          }
    171          case MSG_TYPE_CHAT:
    172          {
    173             player *p = findPlayerByAddr(vctPlayers, from);
    174 
    175             if (p == NULL)
    176             {
    177                strcpy(serverMsg.buffer, "No player is logged in using this connection. This is either a bug, or you're trying to hack the server.");
    178             }
    179             else
    180             {
    181                int guess = atoi(clientMsg.buffer);
    182 
    183                cout << "guess: " << guess << endl;
    184 
    185                if (guess < 1 || guess > 1000) {
    186                   strcpy(serverMsg.buffer, "You must guess a number between 1 and 1000");
    187                }else if(guess > num)
    188                   strcpy(serverMsg.buffer, "The number I'm thinking of is less than that.");
    189                else if(guess < num)
    190                   strcpy(serverMsg.buffer, "The number I'm thinking of is greater than that.");
    191                else if(guess == num) {
    192                   strcpy(serverMsg.buffer, "Congratulations! I will now think of a new number.");
    193                   num = (rand() % 1000) + 1;
    194                }
    195             }   
    196 
    197             serverMsg.type = MSG_TYPE_CHAT;
    198 
    199             break;
    200          }
    201          default:
    202          {
    203             strcpy(serverMsg.buffer, "Server error occured. Report this please.");
    204 
    205             serverMsg.type = MSG_TYPE_CHAT;
    206 
    207             break;
    208          }
    209       }
     119
     120      processMessage(clientMsg, from, vctPlayers, num, serverMsg);
    210121
    211122      cout << "msg: " << serverMsg.buffer << endl;
     
    216127   }
    217128   return 0;
     129}
     130
     131void processMessage(const NETWORK_MSG &clientMsg, const struct sockaddr_in &from, vector<Player> &vctPlayers, int &num, NETWORK_MSG &serverMsg)
     132{
     133   cout << "ip address: " << inet_ntoa(from.sin_addr) << endl;
     134   cout << "port: " << from.sin_port << endl;
     135   cout << "MSG: type: " << clientMsg.type << endl;
     136   cout << "MSG contents: " << clientMsg.buffer << endl;
     137
     138   // Check that if an invalid message is sent, the client will correctly
     139   // receive and display the response. Maybe make a special error msg type
     140   switch(clientMsg.type)
     141   {
     142      case MSG_TYPE_REGISTER:
     143      {
     144         string username(clientMsg.buffer);
     145         string password(strchr(clientMsg.buffer, '\0')+1);
     146
     147         cout << "username: " << username << endl;
     148         cout << "password: " << password << endl;
     149
     150         strcpy(serverMsg.buffer, "Registration test");
     151
     152         serverMsg.type = MSG_TYPE_REGISTER;
     153
     154         break;
     155      }
     156      case MSG_TYPE_LOGIN:
     157      {
     158         string username(clientMsg.buffer);
     159         cout << "Player logging in: " << username << endl;
     160
     161         Player *p = findPlayerByName(vctPlayers, username);
     162
     163         if (p == NULL)
     164         {
     165            vctPlayers.push_back(Player(username, from));
     166            strcpy(serverMsg.buffer, "I'm thinking of a number between 1 and 1000. Guess what it is.");
     167         }
     168         else
     169         {
     170            strcpy(serverMsg.buffer, "Player has already logged in.");
     171         }
     172
     173         serverMsg.type = MSG_TYPE_LOGIN;
     174
     175         break;
     176      }
     177      case MSG_TYPE_LOGOUT:
     178      {
     179         string name(clientMsg.buffer);
     180         cout << "Player logging out: " << name << endl;
     181
     182         Player *p = findPlayerByName(vctPlayers, name);
     183
     184         if (p == NULL)
     185         {
     186            strcpy(serverMsg.buffer, "That player is not logged in. This is either a bug, or you're trying to hack the server.");
     187         }
     188         else if( p->addr.sin_addr.s_addr != from.sin_addr.s_addr ||
     189                  p->addr.sin_port != from.sin_port )
     190         {
     191            strcpy(serverMsg.buffer, "That player is logged in using a differemt connection. This is either a bug, or you're trying to hack the server.");
     192         }
     193         else
     194         {
     195            vctPlayers.erase((vector<Player>::iterator)p);
     196            strcpy(serverMsg.buffer, "You have successfully logged out. You may quit the game.");
     197         }
     198
     199         break;
     200      }
     201      case MSG_TYPE_CHAT:
     202      {
     203         Player *p = findPlayerByAddr(vctPlayers, from);
     204
     205         if (p == NULL)
     206         {
     207            strcpy(serverMsg.buffer, "No player is logged in using this connection. This is either a bug, or you're trying to hack the server.");
     208         }
     209         else
     210         {
     211            int guess = atoi(clientMsg.buffer);
     212
     213            cout << "guess: " << guess << endl;
     214
     215            if (guess < 1 || guess > 1000) {
     216               strcpy(serverMsg.buffer, "You must guess a number between 1 and 1000");
     217            }else if(guess > num)
     218               strcpy(serverMsg.buffer, "The number I'm thinking of is less than that.");
     219            else if(guess < num)
     220               strcpy(serverMsg.buffer, "The number I'm thinking of is greater than that.");
     221            else if(guess == num) {
     222               strcpy(serverMsg.buffer, "Congratulations! I will now think of a new number.");
     223               num = (rand() % 1000) + 1;
     224            }
     225         }     
     226
     227         serverMsg.type = MSG_TYPE_CHAT;
     228
     229         break;
     230      }
     231      default:
     232      {
     233         strcpy(serverMsg.buffer, "Server error occured. Report this please.");
     234
     235         serverMsg.type = MSG_TYPE_CHAT;
     236
     237         break;
     238      }
     239   }
    218240}
    219241
Note: See TracChangeset for help on using the changeset viewer.