41 lines
911 B
C++
41 lines
911 B
C++
#pragma once
|
|
#include <base/assert.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
|