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