Added protocols to an enum
Now we don't have to type cast
This commit is contained in:
parent
9e6593abd1
commit
623cffced6
|
@ -10,7 +10,7 @@ namespace Oyster
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual unsigned char* Translate (Protocols::ProtocolHeader &header ) = 0;
|
virtual unsigned char* Translate (Protocols::ProtocolHeader &header ) = 0;
|
||||||
virtual Protocols::ProtocolHeader* Translate ( unsigned char message[] ) = 0;
|
virtual Protocols::ProtocolSet* Translate (Protocols::ProtocolSet* set, unsigned char message[] ) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@ namespace Oyster
|
||||||
package_type_update_position
|
package_type_update_position
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct ProtocolHeader
|
struct ProtocolHeader
|
||||||
{
|
{
|
||||||
int size;
|
int size;
|
||||||
|
@ -32,14 +31,37 @@ namespace Oyster
|
||||||
std::string textMessage;
|
std::string textMessage;
|
||||||
ProtocolTest() { this->packageType = package_type_test; }
|
ProtocolTest() { this->packageType = package_type_test; }
|
||||||
};
|
};
|
||||||
/*struct Prutt
|
|
||||||
|
class ProtocolSet
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
PackageType t;
|
PackageType t;
|
||||||
union PRUTT
|
union
|
||||||
{
|
{
|
||||||
ProtocolTest *ptest,
|
ProtocolHeader* pHeader;
|
||||||
|
ProtocolTest *pTest;
|
||||||
|
|
||||||
|
}Protocol;
|
||||||
|
|
||||||
|
void Release()
|
||||||
|
{
|
||||||
|
switch(t)
|
||||||
|
{
|
||||||
|
case package_type_header:
|
||||||
|
if(Protocol.pHeader)
|
||||||
|
{
|
||||||
|
delete Protocol.pHeader;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case package_type_test:
|
||||||
|
if(Protocol.pTest)
|
||||||
|
{
|
||||||
|
delete Protocol.pTest;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
};*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,26 +25,35 @@ unsigned char* Translator::Translate( ProtocolHeader &header )
|
||||||
return message->GetMsg();
|
return message->GetMsg();
|
||||||
}
|
}
|
||||||
|
|
||||||
ProtocolHeader* Translator::Translate(unsigned char msg[] )
|
ProtocolSet* Translator::Translate(ProtocolSet* set, unsigned char msg[] )
|
||||||
{
|
{
|
||||||
ProtocolHeader *header = new ProtocolHeader();
|
ProtocolHeader *header = new ProtocolHeader();
|
||||||
MessageHeader *message = new MessageHeader();
|
MessageHeader *message = new MessageHeader();
|
||||||
|
|
||||||
message->Translate(msg, *header);
|
message->Translate(msg, *header);
|
||||||
|
delete message;
|
||||||
|
message = NULL;
|
||||||
|
|
||||||
switch(header->packageType)
|
//Switch to the correct package.
|
||||||
|
set->t = (PackageType)header->packageType;
|
||||||
|
switch(set->t)
|
||||||
{
|
{
|
||||||
case package_type_header:
|
case package_type_header:
|
||||||
message = new MessageHeader();
|
message = new MessageHeader();
|
||||||
header = new ProtocolHeader();
|
set->Protocol.pHeader = new ProtocolHeader;
|
||||||
|
message->Translate(msg, *set->Protocol.pHeader);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case package_type_test:
|
case package_type_test:
|
||||||
message = new MessageTest();
|
message = new MessageTest();
|
||||||
header = new ProtocolTest();
|
set->Protocol.pTest = new ProtocolTest;
|
||||||
|
message->Translate(msg, *set->Protocol.pTest);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
message->Translate(msg, *header);
|
if(message)
|
||||||
return header;
|
delete message;
|
||||||
|
delete header;
|
||||||
|
|
||||||
|
return set;
|
||||||
}
|
}
|
|
@ -16,7 +16,10 @@ namespace Oyster
|
||||||
~Translator(){ };
|
~Translator(){ };
|
||||||
|
|
||||||
unsigned char* Translate (Protocols::ProtocolHeader &header );
|
unsigned char* Translate (Protocols::ProtocolHeader &header );
|
||||||
Protocols::ProtocolHeader* Translate (unsigned char msg[] );
|
Protocols::ProtocolSet* Translate (Protocols::ProtocolSet* set, unsigned char msg[] );
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ void chat(Client client)
|
||||||
unsigned char msgRecv[255] = "\0";
|
unsigned char msgRecv[255] = "\0";
|
||||||
string msgSend = "";
|
string msgSend = "";
|
||||||
|
|
||||||
|
ProtocolSet* set = new ProtocolSet;
|
||||||
ProtocolHeader* header;
|
ProtocolHeader* header;
|
||||||
ProtocolTest test;
|
ProtocolTest test;
|
||||||
|
|
||||||
|
@ -72,14 +73,14 @@ void chat(Client client)
|
||||||
{
|
{
|
||||||
client.Recv(msgRecv);
|
client.Recv(msgRecv);
|
||||||
|
|
||||||
header = t->Translate(msgRecv);
|
set = t->Translate(set, msgRecv);
|
||||||
|
|
||||||
switch(header->packageType)
|
switch(set->t)
|
||||||
{
|
{
|
||||||
case package_type_header:
|
case package_type_header:
|
||||||
break;
|
break;
|
||||||
case package_type_test:
|
case package_type_test:
|
||||||
cout <<"Client 2: " <<((ProtocolTest*)header)->textMessage <<endl;
|
cout <<"Client 2: " << set->Protocol.pTest->textMessage <<endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,4 +114,5 @@ void chat(Client client)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete set;
|
||||||
}
|
}
|
|
@ -41,28 +41,32 @@ int main()
|
||||||
cout << "Second client connected." << endl;
|
cout << "Second client connected." << endl;
|
||||||
|
|
||||||
client1.Send((unsigned char*)"Hej");
|
client1.Send((unsigned char*)"Hej");
|
||||||
ProtocolHeader* header = NULL;
|
ProtocolSet* set = new ProtocolSet;
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
client1.Recv(recvBuffer);
|
client1.Recv(recvBuffer);
|
||||||
|
|
||||||
header = t.Translate(recvBuffer);
|
set = t.Translate(set, recvBuffer);
|
||||||
cout << header->clientID << ' ' << header->packageType << ' ' << header->size << endl;
|
cout << set->Protocol.pTest->clientID << ' ' << set->Protocol.pTest->packageType << ' ' << set->Protocol.pTest->size << endl;
|
||||||
cout << "Client1: " << ((ProtocolTest*)header)->textMessage << endl;
|
cout << "Client1: " << set->Protocol.pTest->textMessage << endl;
|
||||||
|
set->Release();
|
||||||
client2.Send(recvBuffer);
|
client2.Send(recvBuffer);
|
||||||
|
|
||||||
|
|
||||||
client2.Recv(recvBuffer);
|
client2.Recv(recvBuffer);
|
||||||
|
|
||||||
header = t.Translate(recvBuffer);
|
set = t.Translate(set, recvBuffer);
|
||||||
cout << header->clientID << ' ' << header->packageType << ' ' << header->size << endl;
|
cout << set->Protocol.pTest->clientID << ' ' << set->Protocol.pTest->packageType << ' ' << set->Protocol.pTest->size << endl;
|
||||||
cout << "Client1: " << ((ProtocolTest*)header)->textMessage << endl;
|
cout << "Client2: " << set->Protocol.pTest->textMessage << endl;
|
||||||
|
set->Release();
|
||||||
client1.Send(recvBuffer);
|
client1.Send(recvBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShutdownSockets();
|
ShutdownSockets();
|
||||||
|
|
||||||
delete[] recvBuffer;
|
delete[] recvBuffer;
|
||||||
|
delete set;
|
||||||
|
|
||||||
system("pause");
|
system("pause");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue