Added the meta field to Packet to support Packet's metadata
This commit is contained in:
+6
-6
@@ -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));
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user