A.シリアル化できるパケット構造を定義します。
class ISerializable
{
public:
virtual ~ISerializable(){}
virtual void serialize(std::ostream& stream) = 0;
};
class LoginPacket : public ISerializable
{
public:
// Constructor and access functions
virtual void serialize(std::ostream& stream)
{
stream.write((const char*)&packetId, 1);
stream.write((const char*)&accountId, 4);
stream.write(username.c_str(), username.size() + 1);
// Write the unused 6-bytes of zero
int zero(0);
stream.write((const char*)&zero, 4);
stream.write((const char*)&zero, 2);
}
private:
unsigned char packetId;
unsigned int32_t accountId;
std::string username;
};
B.ここで、このパケットクラスを使用するには、次のようにします。
LoginPacket packet;
// Fill details for the packet
std::stringstream data;
packet.serialize(data);
// Send the data to the network
yourSocket.send(data.str().c_str(), data.str().size());