#pragma once

#include "Common.h"
#include "System/Object.h"
#include "System/String.h"
#include "System/SmartPointer.h"
#include "System/Action.h"
#include "System/Net/WebSockets/WebSocket.h"
#include "WebAppCore/Http/HttpContext.h"

namespace DotNetDupe {
    namespace WebAppCore {
        namespace WebSockets {

            class WebSocketContext : public virtual DotNetDupe::System::Object {
            public:
                DOTNETDUPE_API WebSocketContext(DotNetDupe::System::SmartPointer<Http::HttpContext> pContext,
                                                DotNetDupe::System::SmartPointer<DotNetDupe::System::Net::WebSockets::WebSocket> pWebSocket)
                    : m_pContext(pContext), m_pWebSocket(pWebSocket) {}
                DOTNETDUPE_API ~WebSocketContext() override = default;

                DOTNETDUPE_API DotNetDupe::System::SmartPointer<Http::HttpContext> GetHttpContext() const { return m_pContext; }
                DOTNETDUPE_API DotNetDupe::System::SmartPointer<DotNetDupe::System::Net::WebSockets::WebSocket> GetWebSocket() const { return m_pWebSocket; }

            private:
                DotNetDupe::System::SmartPointer<Http::HttpContext> m_pContext;
                DotNetDupe::System::SmartPointer<DotNetDupe::System::Net::WebSockets::WebSocket> m_pWebSocket;
            };

            class IWebSocketHandler : public virtual DotNetDupe::System::Object {
            public:
                DOTNETDUPE_API ~IWebSocketHandler() override = default;
                DOTNETDUPE_API virtual void OnConnected(DotNetDupe::System::SmartPointer<WebSocketContext> pContext) = 0;
                DOTNETDUPE_API virtual void OnMessage(DotNetDupe::System::SmartPointer<WebSocketContext> pContext, const DotNetDupe::System::String& message) = 0;
                DOTNETDUPE_API virtual void OnDisconnected(DotNetDupe::System::SmartPointer<WebSocketContext> pContext) = 0;
            };

        }
    }
}

Generated by OpenCppCoverage (Version: 0.9.9.0)