Program Listing for File WsppWebSocket.h
↰ Return to documentation for file (axr.sdk/net/WsppWebSocket.h
)
// Copyright (C) AcceleratXR, Inc. All rights reserved.
#pragma once
#include "IWebSocket.h"
#include "../Configuration.h"
#include <memory.h>
#include <websocketpp/common/thread.hpp>
#include <websocketpp/config/asio_client.hpp>
#include <websocketpp/client.hpp>
namespace axr {
namespace sdk {
namespace net {
typedef websocketpp::client<websocketpp::config::asio_tls_client> wsclient;
typedef std::shared_ptr<boost::asio::ssl::context> context_ptr;
class WsppWebSocketMessage : public IWebSocketMessage
{
public:
WsppWebSocketMessage(pplx::cancellation_token cts, wsclient::message_ptr msg)
: m_Cts(cts)
, m_Value(msg)
{
}
virtual std::vector<uint8_t> GetData() const override;
virtual utility::string_t GetString() const override;
virtual WebSocketMessageType GetType() const override;
virtual pplx::task<std::vector<uint8_t>> ExtractData() const override;
virtual pplx::task<utility::string_t> ExtractString() const override;
private:
pplx::cancellation_token m_Cts;
wsclient::message_ptr m_Value;
};
class WsppWebSocket : public IWebSocket
{
public:
WsppWebSocket(std::shared_ptr<Configuration> config);
~WsppWebSocket();
virtual std::vector<CloseCallback>::const_iterator AddCloseHandler(CloseCallback callback) override;
virtual void RemoveCloseHandler(std::vector<CloseCallback>::const_iterator iter) override;
virtual std::vector<MessageCallback>::const_iterator AddMessageHandler(MessageCallback callback) override;
virtual void RemoveMessageHandler(std::vector<MessageCallback>::const_iterator iter) override;
virtual pplx::task<void> Connect(utility::string_t uri) override;
virtual pplx::task<void> Close() override;
virtual WebSocketStatus GetStatus() override
{
return m_Status;
}
virtual pplx::task<void> Send(std::shared_ptr<IWebSocketMessage> message) override;
private:
std::vector<CloseCallback> m_CloseCallbacks;
std::shared_ptr<Configuration> m_Config;
wsclient m_Endpoint;
websocketpp::connection_hdl m_Handle;
std::vector<MessageCallback> m_MessageCallbacks;
WebSocketStatus m_Status;
void onClose(websocketpp::connection_hdl hdl);
void onFail(websocketpp::connection_hdl hdl);
void onMessage(websocketpp::connection_hdl hdl, wsclient::message_ptr msg);
void onOpen(websocketpp::connection_hdl hdl);
static context_ptr OnTlsInit();
};
} // namespace net
} // namespace sdk
} // namespace axr