Program Listing for File PocoWebSocket.h

Return to documentation for file (axr.sdk/net/PocoWebSocket.h)

// Copyright (C) AcceleratXR, Inc. All rights reserved.
#pragma once

#ifdef USE_POCO

#include "IWebSocket.h"
#include "../Configuration.h"

#include <Poco/Net/HTTPClientSession.h>
#include <Poco/Net/WebSocket.h>

namespace axr {
namespace sdk {
namespace net {

class PocoWebSocket : public IWebSocket
{
public:
    PocoWebSocket(std::shared_ptr<Configuration> config);
    ~PocoWebSocket();

    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 pplx::task<void> Send(std::shared_ptr<IWebSocketMessage> message) override;

private:
    std::shared_ptr<Configuration> m_Config;
    std::vector<CloseCallback> m_CloseCallbacks;
    std::vector<MessageCallback> m_MessageCallbacks;
    Poco::Net::HTTPClientSession m_Session;
    std::shared_ptr<Poco::Net::WebSocket> m_Socket;
};

} // namespace net
} // namespace sdk
} // namespace axr

#endif // USE_POCO