i've been making a client - server architecture and id like to know if the design is ok
There are 2 structs that contain the player information
struct ClientPacket
{
Player p;
};
struct ServerPacket
{
Player players[5];
};
The array Player players[5] contains the information of all the players
The server is basicly this :
class ServerAppFramework
{
public:
ServerAppFramework();
~ServerAppFramework();
bool IsConnected(){return m_bIsConnected;} // returns connection status
void StartListenClient(); // Listen to client
int SendMessagePort( SocketPort ); // Send message to all clients.
int RecClient(SOCKET sRecSocket); // receive message for a particulat socket
private:
bool m_bIsConnected; // true - connected false - not connected
int m_iServerPort;
list<SOCKET> m_vClientList; // All socket connected to client
SOCKET m_SClient;
SOCKET m_SListenClient; // socket listening for client calls
};
Implementation of SendMessagePort( SocketPort ) :
This sends the packet to all clients
int ServerAppFramework::SendMessagePort( SocketPort sp)
{
int iStat = 0,i,j,k;
list<SOCKET>::iterator itl;
if(m_vClientList.size() == 0)
return 0;
for(i=0;i<5;i++)
{
spacket.players.id = player_server_data.id;
spacket.players.x = player_server_data.x;
spacket.players.y = player_server_data.y;
spacket.players.plane = player_server_data.plane;
spacket.players.xvel = player_server_data.xvel;
spacket.players.yvel = player_server_data.yvel;
spacket.players.curhp = player_server_data.curhp;
spacket.players.hp = player_server_data.hp;
spacket.players.level = player_server_data.level;
spacket.players.exp = player_server_data.exp;
spacket.players.stunned = player_server_data.stunned;
spacket.players.slowed = player_server_data.slowed;
}
for(itl = m_vClientList.begin();itl != m_vClientList.end();itl++)
{
iStat = send(*itl,(char const *)&spacket, sizeof(spacket),0);
if(iStat == -1)
m_vClientList.remove(*itl);
}
if(iStat == -1)
return 1;
return 0;
}
The RecClient() functions recieves packets from the client and modifies the Player players[5].
The new Player players[5] is therefor sent to all clients for update.
int AppFramework::RecMessagePort()
{
char com=' ';
int iStat = 0, exit = 0, i;
//iStat = recv(conn,acRetData,4096,0);
iStat = recv(conn,(char *)&spacket,sizeof(spacket),0);
if(iStat == -1)
return 1;
if ( spacket.update == -1 )
{
for(i=0;i<5;i++)
{
players.id = spacket.players.id;
players.x = spacket.players.x;
players.y = spacket.players.y;
players.plane = spacket.players.plane;
players.xvel = spacket.players.xvel;
players.yvel = spacket.players.yvel;
players.curhp = spacket.players.curhp;
players.hp = spacket.players.hp;
players.level = spacket.players.level;
players.exp = spacket.players.exp;
players.stunned = spacket.players.stunned;
players.slowed = spacket.players.slowed;
}
return 0;
}
I'd like to know if the methods im using to send and recieve packets are ok for a game