2013-11-21 14:49:30 +01:00
|
|
|
#ifndef NETWORK_DEPENDENCIES_PROTOCOLS_H
|
|
|
|
#define NETWORK_DEPENDENCIES_PROTOCOLS_H
|
|
|
|
|
2013-11-29 09:18:58 +01:00
|
|
|
//////////////////////////////////////
|
|
|
|
// Created by Sam Svensson 2013
|
|
|
|
// Holder structs for our protocols
|
|
|
|
// with the use of union.
|
|
|
|
// each packagetyp
|
|
|
|
// is linked to a protocol
|
|
|
|
//////////////////////////////////////
|
2013-11-25 11:39:38 +01:00
|
|
|
|
2013-11-21 14:49:30 +01:00
|
|
|
#include <string>
|
2013-11-21 13:40:52 +01:00
|
|
|
|
|
|
|
namespace Oyster
|
|
|
|
{
|
|
|
|
namespace Network
|
|
|
|
{
|
|
|
|
namespace Protocols
|
|
|
|
{
|
|
|
|
enum PackageType
|
|
|
|
{
|
2013-11-28 08:40:08 +01:00
|
|
|
PackageType_header,
|
|
|
|
PackageType_test,
|
|
|
|
PackageType_input,
|
2013-12-03 11:46:46 +01:00
|
|
|
PackageType_player_pos,
|
2013-11-21 13:40:52 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
struct ProtocolHeader
|
|
|
|
{
|
|
|
|
int size;
|
|
|
|
int packageType;
|
|
|
|
int clientID;
|
|
|
|
|
2013-11-28 08:51:21 +01:00
|
|
|
ProtocolHeader() { this->packageType = PackageType_header; }
|
2013-11-25 19:00:33 +01:00
|
|
|
virtual ~ProtocolHeader() { }
|
2013-11-21 13:40:52 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
struct ProtocolTest : public ProtocolHeader
|
|
|
|
{
|
|
|
|
std::string textMessage;
|
2013-11-25 19:00:33 +01:00
|
|
|
unsigned int numOfFloats;
|
|
|
|
float *f;
|
|
|
|
|
2013-11-28 08:51:21 +01:00
|
|
|
ProtocolTest() { this->packageType = PackageType_test; }
|
2013-11-25 19:00:33 +01:00
|
|
|
virtual ~ProtocolTest() { delete[] f; }
|
2013-11-21 13:40:52 +01:00
|
|
|
};
|
2013-11-22 11:40:55 +01:00
|
|
|
|
2013-12-03 11:46:46 +01:00
|
|
|
struct ProtocolPlayerPos : public ProtocolHeader
|
|
|
|
{
|
|
|
|
int ID;
|
|
|
|
unsigned int nrOfFloats;
|
|
|
|
float *matrix;
|
|
|
|
|
|
|
|
ProtocolPlayerPos() { this->packageType = PackageType_player_pos; }
|
|
|
|
virtual ~ProtocolPlayerPos() { delete[] matrix; }
|
|
|
|
};
|
|
|
|
|
2013-11-29 09:11:30 +01:00
|
|
|
|
|
|
|
//Holding every protocol in an union.
|
|
|
|
//Used because we now don't have to type case our protocol when we recieve them.
|
2013-11-22 11:40:55 +01:00
|
|
|
class ProtocolSet
|
2013-11-22 09:17:07 +01:00
|
|
|
{
|
2013-11-22 11:40:55 +01:00
|
|
|
public:
|
2013-11-25 19:00:33 +01:00
|
|
|
PackageType type;
|
2013-11-22 11:40:55 +01:00
|
|
|
union
|
|
|
|
{
|
|
|
|
ProtocolHeader* pHeader;
|
|
|
|
ProtocolTest *pTest;
|
2013-12-03 11:46:46 +01:00
|
|
|
ProtocolPlayerPos *pPlayerPos;
|
2013-11-22 11:40:55 +01:00
|
|
|
|
|
|
|
}Protocol;
|
|
|
|
|
|
|
|
void Release()
|
2013-11-22 09:17:07 +01:00
|
|
|
{
|
2013-11-25 19:00:33 +01:00
|
|
|
switch(type)
|
2013-11-22 11:40:55 +01:00
|
|
|
{
|
2013-11-28 08:51:21 +01:00
|
|
|
case PackageType_header:
|
2013-11-22 11:40:55 +01:00
|
|
|
if(Protocol.pHeader)
|
|
|
|
{
|
|
|
|
delete Protocol.pHeader;
|
|
|
|
}
|
|
|
|
break;
|
2013-11-28 08:51:21 +01:00
|
|
|
case PackageType_test:
|
2013-11-22 11:40:55 +01:00
|
|
|
if(Protocol.pTest)
|
|
|
|
{
|
|
|
|
delete Protocol.pTest;
|
|
|
|
}
|
|
|
|
break;
|
2013-12-03 11:46:46 +01:00
|
|
|
case PackageType_player_pos:
|
|
|
|
if(Protocol.pPlayerPos)
|
|
|
|
{
|
|
|
|
delete Protocol.pPlayerPos;
|
|
|
|
}
|
|
|
|
break;
|
2013-11-22 11:40:55 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
2013-11-21 13:40:52 +01:00
|
|
|
}
|
|
|
|
}
|
2013-11-21 14:49:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|