Program Listing for File IConnection.h

Return to documentation for file (axr.sdk/netengine/IConnection.h)

#pragma once

#include "../StringEnum.h"

#include <cpprest/asyncrt_utils.h>
#include <functional>
#include <vector>

namespace axr {
namespace sdk {
namespace netengine {

class SocketMode : public StringEnum<SocketMode>
{
public:
    static const SocketMode* BOTH;
    static const SocketMode* DOWN;
    static const SocketMode* UP;
};

class IConnection
{
public:
    typedef std::function<void(std::shared_ptr<net::IWebSocketMessage> msg)> MessageCallback;

    virtual std::vector<MessageCallback>::const_iterator AddMessageListener(MessageCallback callback) = 0;

    virtual void RemoveMessageListener(std::vector<MessageCallback>::const_iterator iter) = 0;

    virtual pplx::task<void> Connect(utility::string_t url) = 0;

    virtual pplx::task<void> Disconnect() = 0;

    virtual void AddSocket(std::shared_ptr<net::IWebSocket> socket, const SocketMode* mode) = 0;

    virtual pplx::task<void> Send(std::shared_ptr<net::IWebSocketMessage> message) = 0;
};

} // namespace netengine
} // namespace sdk
} // namespace axr