WebSocketPerformInfo HC_PERFORM_ENV::GetPlatformDefaultWebSocketHandlers()

in Source/Global/perform_env.cpp [103:178]


WebSocketPerformInfo HC_PERFORM_ENV::GetPlatformDefaultWebSocketHandlers()
{
#if HC_UNITTEST_API
    return WebSocketPerformInfo{
        WebSocketConnectAsyncDefault,
        WebSocketSendMessageAsyncDefault,
        WebSocketSendBinaryMessageAsyncDefault,
        WebSocketDisconnectDefault,
        nullptr
    };
#elif HC_PLATFORM == HC_PLATFORM_WIN32
    // Use WinHttp WebSockets if available (Win 8+) and WebSocketpp otherwise
    auto webSocketExports = WinHttpProvider::GetWinHttpWebSocketExports();
    if (webSocketExports.completeUpgrade && webSocketExports.send && webSocketExports.receive &&
        webSocketExports.close && webSocketExports.queryCloseStatus && webSocketExports.shutdown)
    {
        return WebSocketPerformInfo{
            WinHttpProvider::WebSocketConnectAsyncHandler,
            WinHttpProvider::WebSocketSendAsyncHandler,
            WinHttpProvider::WebSocketSendBinaryAsyncHandler,
            WinHttpProvider::WebSocketDisconnectHandler,
            nullptr
        };
    }
    else
    {
        return WebSocketPerformInfo{
            WebSocketppConnectAsync,
            WebSocketppSendMessageAsync,
            WebSocketppSendBinaryMessageAsync,
            WebSocketppDisconnect,
            nullptr
        };
    }
#elif HC_PLATFORM == HC_PLATFORM_GDK
    return WebSocketPerformInfo{
        WinHttpProvider::WebSocketConnectAsyncHandler,
        WinHttpProvider::WebSocketSendAsyncHandler,
        WinHttpProvider::WebSocketSendBinaryAsyncHandler,
        WinHttpProvider::WebSocketDisconnectHandler,
        nullptr
    };
#elif HC_PLATFORM == HC_PLATFORM_UWP || HC_PLATFORM == HC_PLATFORM_XDK
    return WebSocketPerformInfo{
        WinRTWebSocketConnectAsync,
        WinRTWebSocketSendMessageAsync,
        WinRTWebSocketSendBinaryMessageAsync,
        WinRTWebSocketDisconnect,
        nullptr
    };
#elif HC_PLATFORM == HC_PLATFORM_ANDROID
    return WebSocketPerformInfo{
        WebSocketppConnectAsync,
        WebSocketppSendMessageAsync,
        WebSocketppSendBinaryMessageAsync,
        WebSocketppDisconnect,
        nullptr
    };
#elif HC_PLATFORM_IS_APPLE
    return WebSocketPerformInfo{
        WebSocketppConnectAsync,
        WebSocketppSendMessageAsync,
        WebSocketppSendBinaryMessageAsync,
        WebSocketppDisconnect,
        nullptr
    };
#else
    return WebSocketPerformInfo{
        WebSocketConnectAsyncDefault,
        WebSocketSendMessageAsyncDefault,
        WebSocketSendBinaryMessageAsyncDefault,
        WebSocketDisconnectDefault,
        nullptr
    };
#endif
}