SSX3LobbyServer/lib/http/websocket_message.hpp

42 lines
938 B
C++

#pragma once
#include <base/assert.hpp>
#include <base/logger.hpp>
#include <base/types.hpp>
namespace base::http {
struct WebSocketMessage {
enum class Type { Text, Binary };
WebSocketMessage() = default; // for d-construciton
explicit WebSocketMessage(const std::string& str);
explicit WebSocketMessage(const std::vector<u8>& data);
explicit WebSocketMessage(const std::span<u8>& data);
Type GetType() const;
const std::string& AsText() const;
const std::vector<u8>& AsBinary() const;
private:
struct Text {
std::string data;
};
struct Binary {
std::vector<u8> data;
};
// no payload (yet?)
// struct Ping {};
std::variant<Text, Binary> payload;
};
// Helper to more easily build a websocket message object
template <class In>
inline std::shared_ptr<const WebSocketMessage> BuildMessage(const In& in) {
return std::make_shared<WebSocketMessage>(in);
}
} // namespace base::http