Mesen-S/Core/NetMessage.h

58 lines
1 KiB
C++

#pragma once
#include "stdafx.h"
#include "MessageType.h"
#include "SaveStateManager.h"
#include "../Utilities/Socket.h"
#include "../Utilities/Serializer.h"
class NetMessage
{
protected:
MessageType _type;
stringstream _receivedData;
NetMessage(MessageType type)
{
_type = type;
}
NetMessage(void* buffer, uint32_t length)
{
_type = (MessageType)((uint8_t*)buffer)[0];
_receivedData.write((char*)buffer + 1, length - 1);
}
public:
virtual ~NetMessage()
{
}
void Initialize()
{
Serializer s(_receivedData, SaveStateManager::FileFormatVersion);
Serialize(s);
}
MessageType GetType()
{
return _type;
}
void Send(Socket &socket)
{
Serializer s(SaveStateManager::FileFormatVersion);
Serialize(s);
stringstream out;
s.Save(out);
string data = out.str();
uint32_t messageLength = (uint32_t)data.size() + 1;
data = string((char*)&messageLength, 4) + (char)_type + data;
socket.Send((char*)data.c_str(), (int)data.size(), 0);
}
protected:
virtual void Serialize(Serializer &s) = 0;
};