Program Listing for File IWebSocket.h
↰ Return to documentation for file (axr.sdk/net/IWebSocket.h
)
// Copyright (C) AcceleratXR, Inc. All rights reserved.
#pragma once
#include <cpprest/asyncrt_utils.h>
#include <variant>
#include <vector>
namespace axr {
namespace sdk {
namespace net {
enum class WebSocketStatus
{
NOT_CONNECTED,
CONNECTING,
CONNECTED,
FAILED
};
enum class WebSocketCloseStatus
{
NORMAL,
FAILURE
};
enum class WebSocketMessageType
{
BINARY,
TEXT
};
class IWebSocketMessage
{
public:
virtual std::vector<uint8_t> GetData() const = 0;
virtual utility::string_t GetString() const = 0;
virtual WebSocketMessageType GetType() const = 0;
virtual pplx::task<std::vector<uint8_t>> ExtractData() const = 0;
virtual pplx::task<utility::string_t> ExtractString() const = 0;
};
class OutgoingWebSocketMessage : public IWebSocketMessage
{
private:
std::variant<utility::string_t, std::vector<uint8_t>> m_Value;
public:
OutgoingWebSocketMessage(std::variant<utility::string_t, std::vector<uint8_t>> value)
: m_Value(value)
{
}
virtual ~OutgoingWebSocketMessage()
{
}
virtual std::vector<uint8_t> GetData() const override
{
return std::get<std::vector<uint8_t>>(m_Value);
}
virtual utility::string_t GetString() const override
{
return std::get<utility::string_t>(m_Value);
}
virtual WebSocketMessageType GetType() const override
{
return m_Value.index() == 0 ? WebSocketMessageType::TEXT : WebSocketMessageType::BINARY;
}
virtual pplx::task<std::vector<uint8_t>> ExtractData() const override
{
return pplx::create_task([=]()
{
return std::get<std::vector<uint8_t>>(m_Value);
});
}
virtual pplx::task<utility::string_t> ExtractString() const override
{
return pplx::create_task([=]()
{
return std::get<utility::string_t>(m_Value);
});
}
};
class IWebSocket
{
public:
typedef std::function<void(WebSocketCloseStatus, const utility::string_t&)> CloseCallback;
typedef std::function<void(std::shared_ptr<IWebSocketMessage>)> MessageCallback;
virtual std::vector<CloseCallback>::const_iterator AddCloseHandler(CloseCallback callback) = 0;
virtual void RemoveCloseHandler(std::vector<CloseCallback>::const_iterator iter) = 0;
virtual std::vector<MessageCallback>::const_iterator AddMessageHandler(MessageCallback callback) = 0;
virtual void RemoveMessageHandler(std::vector<MessageCallback>::const_iterator iter) = 0;
virtual pplx::task<void> Connect(utility::string_t uri) = 0;
virtual pplx::task<void> Close() = 0;
virtual WebSocketStatus GetStatus() = 0;
virtual pplx::task<void> Send(std::shared_ptr<IWebSocketMessage> message) = 0;
};
} // namespace net
} // namespace sdk
} // namespace axr