//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.ApplicationModel.AppService.idl";
import "Windows.Networking.Sockets.idl";
import "Windows.Web.Http.idl";

// Forward Declare
namespace Windows
{
    namespace ApplicationModel
    {
        namespace AppService
        {
            runtimeclass AppServiceConnection;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        runtimeclass Deferral;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Networking
    {
        namespace Sockets
        {
            typedef enum MessageWebSocketReceiveMode MessageWebSocketReceiveMode;

            runtimeclass ServerMessageWebSocket;

            runtimeclass ServerStreamWebSocket;

            typedef enum SocketMessageType SocketMessageType;
        }
    }
}
namespace Windows
{
    namespace Web
    {
        namespace Http
        {
            runtimeclass HttpRequestMessage;

            runtimeclass HttpResponseMessage;
        }
    }
}
namespace Windows
{
    namespace System
    {
        namespace Diagnostics
        {
            namespace DevicePortal
            {
                typedef enum DevicePortalConnectionClosedReason DevicePortalConnectionClosedReason;

                interface IDevicePortalConnection;

                interface IDevicePortalConnectionClosedEventArgs;

                interface IDevicePortalConnectionRequestReceivedEventArgs;

                interface IDevicePortalConnectionStatics;

                interface IDevicePortalWebSocketConnection;

                interface IDevicePortalWebSocketConnectionRequestReceivedEventArgs;

                runtimeclass DevicePortalConnection;

                runtimeclass DevicePortalConnectionClosedEventArgs;

                runtimeclass DevicePortalConnectionRequestReceivedEventArgs;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace System
    {
        namespace Diagnostics
        {
            namespace DevicePortal
            {
                declare
                {
                    interface Windows.Foundation.TypedEventHandler<Windows.System.Diagnostics.DevicePortal.DevicePortalConnection*, Windows.System.Diagnostics.DevicePortal.DevicePortalConnectionClosedEventArgs*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.System.Diagnostics.DevicePortal.DevicePortalConnection*, Windows.System.Diagnostics.DevicePortal.DevicePortalConnectionRequestReceivedEventArgs*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace System
    {
        namespace Diagnostics
        {
            namespace DevicePortal
            {
                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                enum DevicePortalConnectionClosedReason
                {
                    Unknown                = 0,
                    ResourceLimitsExceeded = 1,
                    ProtocolError          = 2,
                    NotAuthorized          = 3,
                    UserNotPresent         = 4,
                    ServiceTerminated      = 5
                };

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.System.Diagnostics.DevicePortal.DevicePortalConnection)]
                [uuid(0F447F51-1198-4DA1-8D54-BDEF393E09B6)]
                interface IDevicePortalConnection : IInspectable
                {
                    [eventadd] HRESULT Closed([in] Windows.Foundation.TypedEventHandler<Windows.System.Diagnostics.DevicePortal.DevicePortalConnection*, Windows.System.Diagnostics.DevicePortal.DevicePortalConnectionClosedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT Closed([in] EventRegistrationToken token);
                    [eventadd] HRESULT RequestReceived([in] Windows.Foundation.TypedEventHandler<Windows.System.Diagnostics.DevicePortal.DevicePortalConnection*, Windows.System.Diagnostics.DevicePortal.DevicePortalConnectionRequestReceivedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT RequestReceived([in] EventRegistrationToken token);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.System.Diagnostics.DevicePortal.DevicePortalConnectionClosedEventArgs)]
                [uuid(FCF70E38-7032-428C-9F50-945C15A9F0CB)]
                interface IDevicePortalConnectionClosedEventArgs : IInspectable
                {
                    [propget] HRESULT Reason([out] [retval] Windows.System.Diagnostics.DevicePortal.DevicePortalConnectionClosedReason* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.System.Diagnostics.DevicePortal.DevicePortalConnectionRequestReceivedEventArgs)]
                [uuid(64DAE045-6FDA-4459-9EBD-ECCE22E38559)]
                interface IDevicePortalConnectionRequestReceivedEventArgs : IInspectable
                {
                    [propget] HRESULT RequestMessage([out] [retval] Windows.Web.Http.HttpRequestMessage** value);
                    [propget] HRESULT ResponseMessage([out] [retval] Windows.Web.Http.HttpResponseMessage** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.System.Diagnostics.DevicePortal.DevicePortalConnection)]
                [uuid(4BBE31E7-E9B9-4645-8FED-A53EEA0EDBD6)]
                interface IDevicePortalConnectionStatics : IInspectable
                {
                    HRESULT GetForAppServiceConnection([in] Windows.ApplicationModel.AppService.AppServiceConnection* appServiceConnection, [out] [retval] Windows.System.Diagnostics.DevicePortal.DevicePortalConnection** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 6.0)]
                [exclusiveto(Windows.System.Diagnostics.DevicePortal.DevicePortalConnection)]
                [uuid(67657920-D65A-42F0-AEF4-787808098B7B)]
                interface IDevicePortalWebSocketConnection : IInspectable
                {
                    [overload("GetServerMessageWebSocketForRequest")] HRESULT GetServerMessageWebSocketForRequest([in] Windows.Web.Http.HttpRequestMessage* request, [out] [retval] Windows.Networking.Sockets.ServerMessageWebSocket** result);
                    [overload("GetServerMessageWebSocketForRequest")] HRESULT GetServerMessageWebSocketForRequest2([in] Windows.Web.Http.HttpRequestMessage* request, [in] Windows.Networking.Sockets.SocketMessageType messageType, [in] HSTRING protocol, [out] [retval] Windows.Networking.Sockets.ServerMessageWebSocket** result);
                    [overload("GetServerMessageWebSocketForRequest")] HRESULT GetServerMessageWebSocketForRequest3([in] Windows.Web.Http.HttpRequestMessage* request, [in] Windows.Networking.Sockets.SocketMessageType messageType, [in] HSTRING protocol, [in] UINT32 outboundBufferSizeInBytes, [in] UINT32 maxMessageSize, [in] Windows.Networking.Sockets.MessageWebSocketReceiveMode receiveMode, [out] [retval] Windows.Networking.Sockets.ServerMessageWebSocket** result);
                    [overload("GetServerStreamWebSocketForRequest")] HRESULT GetServerStreamWebSocketForRequest([in] Windows.Web.Http.HttpRequestMessage* request, [out] [retval] Windows.Networking.Sockets.ServerStreamWebSocket** result);
                    [overload("GetServerStreamWebSocketForRequest")] HRESULT GetServerStreamWebSocketForRequest2([in] Windows.Web.Http.HttpRequestMessage* request, [in] HSTRING protocol, [in] UINT32 outboundBufferSizeInBytes, [in] boolean noDelay, [out] [retval] Windows.Networking.Sockets.ServerStreamWebSocket** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 6.0)]
                [exclusiveto(Windows.System.Diagnostics.DevicePortal.DevicePortalConnectionRequestReceivedEventArgs)]
                [uuid(79FDCABA-175C-4739-9F74-DDA797C35B3F)]
                interface IDevicePortalWebSocketConnectionRequestReceivedEventArgs : IInspectable
                {
                    [propget] HRESULT IsWebSocketUpgradeRequest([out] [retval] boolean* value);
                    [propget] HRESULT WebSocketProtocolsRequested([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
                    HRESULT GetDeferral([out] [retval] Windows.Foundation.Deferral** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [static(Windows.System.Diagnostics.DevicePortal.IDevicePortalConnectionStatics, Windows.Foundation.UniversalApiContract, 4.0)]
                [threading(both)]
                runtimeclass DevicePortalConnection
                {
                    [default] interface Windows.System.Diagnostics.DevicePortal.IDevicePortalConnection;
                    [contract(Windows.Foundation.UniversalApiContract, 6.0)] interface Windows.System.Diagnostics.DevicePortal.IDevicePortalWebSocketConnection;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass DevicePortalConnectionClosedEventArgs
                {
                    [default] interface Windows.System.Diagnostics.DevicePortal.IDevicePortalConnectionClosedEventArgs;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass DevicePortalConnectionRequestReceivedEventArgs
                {
                    [default] interface Windows.System.Diagnostics.DevicePortal.IDevicePortalConnectionRequestReceivedEventArgs;
                    [contract(Windows.Foundation.UniversalApiContract, 6.0)] interface Windows.System.Diagnostics.DevicePortal.IDevicePortalWebSocketConnectionRequestReceivedEventArgs;
                }
            }
        }
    }
}
