Added the meta field to Packet to support Packet's metadata

This commit is contained in:
Kayne Ruse
2013-06-17 18:37:18 +10:00
parent 68ec7323a3
commit 27ed91688a
5 changed files with 38 additions and 26 deletions
+6 -6
View File
@@ -137,15 +137,15 @@ void Lobby::KeyUp(SDL_KeyboardEvent const& key) {
//------------------------- //-------------------------
int Lobby::HandlePacket(Packet p) { int Lobby::HandlePacket(Packet p) {
switch(p.type) { switch(p.meta.type) {
case PacketType::NONE: case PacketType::NONE:
//DO NOTHING //DO NOTHING
return 0; return 0;
break; break;
case PacketType::PING: case PacketType::PING:
//quick pong //quick pong
p.type = PacketType::PONG; p.meta.type = PacketType::PONG;
netUtil->Send(&netUtil->GetInPacket()->address, &p, sizeof(Packet)); netUtil->Send(&p.meta.address, &p, sizeof(Packet));
break; break;
case PacketType::PONG: case PacketType::PONG:
// //
@@ -185,7 +185,7 @@ int Lobby::HandlePacket(Packet p) {
void Lobby::BroadcastNetwork() { void Lobby::BroadcastNetwork() {
Packet p; Packet p;
p.type = PacketType::BROADCAST_REQUEST; p.meta.type = PacketType::BROADCAST_REQUEST;
netUtil->Send("255.255.255.255", configUtil->Int("server.port"), &p, sizeof(Packet)); netUtil->Send("255.255.255.255", configUtil->Int("server.port"), &p, sizeof(Packet));
serverList.clear(); serverList.clear();
} }
@@ -193,7 +193,7 @@ void Lobby::BroadcastNetwork() {
void Lobby::PushServer(BroadcastResponse& bcast) { void Lobby::PushServer(BroadcastResponse& bcast) {
ServerEntry entry; ServerEntry entry;
entry.name = bcast.name; entry.name = bcast.name;
entry.address = netUtil->GetInPacket()->address; entry.address = bcast.meta.address;
serverList.push_back(entry); serverList.push_back(entry);
} }
@@ -203,7 +203,7 @@ void Lobby::ConnectToServer(ServerEntry* server) {
throw(runtime_error("No server received")); throw(runtime_error("No server received"));
} }
Packet p; Packet p;
p.type = PacketType::JOIN_REQUEST; p.meta.type = PacketType::JOIN_REQUEST;
snprintf(p.joinRequest.playerHandle, PACKET_STRING_SIZE, "%s", configUtil->CString("handle")); snprintf(p.joinRequest.playerHandle, PACKET_STRING_SIZE, "%s", configUtil->CString("handle"));
snprintf(p.joinRequest.playerAvatar, PACKET_STRING_SIZE, "%s", configUtil->CString("avatar")); snprintf(p.joinRequest.playerAvatar, PACKET_STRING_SIZE, "%s", configUtil->CString("avatar"));
netUtil->Send(&server->address, reinterpret_cast<void*>(&p), sizeof(Packet)); netUtil->Send(&server->address, reinterpret_cast<void*>(&p), sizeof(Packet));
+1
View File
@@ -22,6 +22,7 @@ static int networkQueue(void*) {
while(netUtil->Receive()) { while(netUtil->Receive()) {
Packet p; Packet p;
memcpy(&p, netUtil->GetInData(), sizeof(Packet)); memcpy(&p, netUtil->GetInData(), sizeof(Packet));
p.meta.address = netUtil->GetInPacket()->address;
queue.push_back(p); queue.push_back(p);
} }
SDL_SemPost(lock); SDL_SemPost(lock);
+24 -13
View File
@@ -3,6 +3,8 @@
#include "vector2.hpp" #include "vector2.hpp"
#include "SDL_net/SDL_net.h"
#define PACKET_STRING_SIZE 100 #define PACKET_STRING_SIZE 100
#pragma pack(push, 0) #pragma pack(push, 0)
@@ -25,66 +27,75 @@ enum class PacketType {
PLAYER_MOVE = 11, PLAYER_MOVE = 11,
}; };
struct Ping { struct Metadata {
PacketType type; PacketType type;
IPaddress address;
};
struct Ping {
Metadata meta;
}; };
struct Pong { struct Pong {
PacketType type; Metadata meta;
}; };
struct BroadcastRequest { struct BroadcastRequest {
PacketType type; Metadata meta;
}; };
struct BroadcastResponse { struct BroadcastResponse {
PacketType type; Metadata meta;
char name[PACKET_STRING_SIZE]; char name[PACKET_STRING_SIZE];
//TODO: version //TODO: version
}; };
struct JoinRequest { struct JoinRequest {
PacketType type; Metadata meta;
char playerHandle[PACKET_STRING_SIZE]; char playerHandle[PACKET_STRING_SIZE];
char playerAvatar[PACKET_STRING_SIZE]; char playerAvatar[PACKET_STRING_SIZE];
//TODO: player data //TODO: player data
}; };
struct JoinResponse { struct JoinResponse {
PacketType type; Metadata meta;
int playerIndex; int playerIndex;
//resource list //resource list
}; };
struct Disconnect { struct Disconnect {
PacketType type; Metadata meta;
}; };
struct Synchronize { struct Synchronize {
PacketType type; Metadata meta;
}; };
struct PlayerNew { struct PlayerNew {
PacketType type; Metadata meta;
int playerIndex; int playerIndex;
//TODO Playerdata //TODO Playerdata
}; };
struct PlayerDelete { struct PlayerDelete {
PacketType type; Metadata meta;
int playerIndex; int playerIndex;
}; };
struct PlayerMove { struct PlayerMove {
PacketType type; Metadata meta;
int playerIndex; int playerIndex;
Vector2 position; Vector2 position;
Vector2 motion; Vector2 motion;
}; };
union Packet { union Packet {
Packet() { type = PacketType::NONE; }; Packet() {
PacketType type; meta.type = PacketType::NONE;
meta.address.host = 0;
meta.address.port = 0;
};
Metadata meta;
Ping ping; Ping ping;
Pong pong; Pong pong;
+5 -5
View File
@@ -112,15 +112,15 @@ void ServerApplication::UpdateWorld(double delta) {
//------------------------- //-------------------------
int ServerApplication::HandlePacket(Packet p) { int ServerApplication::HandlePacket(Packet p) {
switch(p.type) { switch(p.meta.type) {
case PacketType::NONE: case PacketType::NONE:
//DO NOTHING //DO NOTHING
return 0; return 0;
break; break;
case PacketType::PING: case PacketType::PING:
//quick pong //quick pong
p.type = PacketType::PONG; p.meta.type = PacketType::PONG;
netUtil->Send(&netUtil->GetInPacket()->address, &p, sizeof(Packet)); netUtil->Send(&p.meta.address, &p, sizeof(Packet));
break; break;
case PacketType::PONG: case PacketType::PONG:
// //
@@ -161,10 +161,10 @@ int ServerApplication::HandlePacket(Packet p) {
void ServerApplication::Broadcast(BroadcastRequest& bcast) { void ServerApplication::Broadcast(BroadcastRequest& bcast) {
//respond to a broadcast request with the server's data //respond to a broadcast request with the server's data
Packet p; Packet p;
p.type = PacketType::BROADCAST_RESPONSE; p.meta.type = PacketType::BROADCAST_RESPONSE;
snprintf(p.broadcastResponse.name, PACKET_STRING_SIZE, "%s", configUtil->CString("server.name")); snprintf(p.broadcastResponse.name, PACKET_STRING_SIZE, "%s", configUtil->CString("server.name"));
//TODO version information //TODO version information
netUtil->Send(&netUtil->GetInPacket()->address, &p, sizeof(Packet)); netUtil->Send(&bcast.meta.address, &p, sizeof(Packet));
} }
void ServerApplication::HandleConnection(JoinRequest& request) { void ServerApplication::HandleConnection(JoinRequest& request) {
+2 -2
View File
@@ -4,8 +4,8 @@
using namespace std; using namespace std;
int main() { int main(int, char**) {
Packet p; Packet p;
cout << int(p.type) << endl; cout << int(p.meta.type) << endl;
return 0; return 0;
} }