91 lines
3.0 KiB
C++
91 lines
3.0 KiB
C++
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
|
|
#pragma once
|
|
|
|
#include "OculusXRAsyncRequestSystem.h"
|
|
#include "OculusXRAsyncRequest.h"
|
|
#include "OculusXRColocationSession.h"
|
|
#include "OculusXRColocationTypes.h"
|
|
#include "OculusXRColocationUtil.h"
|
|
|
|
DECLARE_DELEGATE_OneParam(FOculusXRColocationSessionFoundDelegate, const FOculusXRColocationSession&);
|
|
|
|
namespace OculusXRColocation
|
|
{
|
|
struct FAsyncResultColocationDiscoverySuccess
|
|
{
|
|
bool operator()(EColocationResult Val) { return OculusXRColocation::IsResultSuccess(Val); }
|
|
};
|
|
|
|
template <typename TDerived, typename TValueType>
|
|
using FAsyncColocationRequest = OculusXR::FAsyncRequest<TDerived, EColocationResult, TValueType, FAsyncResultColocationDiscoverySuccess>;
|
|
|
|
// Discover nearby sessions
|
|
struct OCULUSXRCOLOCATION_API FDiscoverSessionsRequest :
|
|
FAsyncColocationRequest<FDiscoverSessionsRequest, TArray<FOculusXRColocationSession>>
|
|
{
|
|
public:
|
|
FDiscoverSessionsRequest();
|
|
~FDiscoverSessionsRequest();
|
|
|
|
void BindOnSessionFound(const FOculusXRColocationSessionFoundDelegate& OnSessionFound);
|
|
void OnSessionFound(FOculusXRColocationSession&& Session);
|
|
|
|
const TArray<FOculusXRColocationSession>& GetFoundSessions() const { return FoundSessions; }
|
|
|
|
protected:
|
|
virtual void OnInitRequest() override;
|
|
|
|
private:
|
|
static void OnStartComplete(FOculusXRUInt64 RequestId, EColocationResult Result);
|
|
static void OnResultAvailable(FOculusXRUInt64 RequestId, FOculusXRUUID Uuid, const TArray<uint8>& Metadata);
|
|
static void OnDiscoveryComplete(FOculusXRUInt64 RequestId, EColocationResult Result);
|
|
|
|
FDelegateHandle OnStartCompleteHandle;
|
|
FDelegateHandle OnSessionFoundHandle;
|
|
FDelegateHandle OnStopCompleteHandle;
|
|
FDelegateHandle OnDiscoveryCompleteHandle;
|
|
|
|
FOculusXRColocationSessionFoundDelegate OnFoundSessionCallback;
|
|
TArray<FOculusXRColocationSession> FoundSessions;
|
|
};
|
|
|
|
// Start advertisement, creates a session internally
|
|
struct OCULUSXRCOLOCATION_API FStartSessionAdvertisementRequest :
|
|
FAsyncColocationRequest<FStartSessionAdvertisementRequest, FOculusXRColocationSession>
|
|
{
|
|
public:
|
|
FStartSessionAdvertisementRequest(const TArray<uint8>& SessionData);
|
|
~FStartSessionAdvertisementRequest();
|
|
|
|
const TArray<uint8>& GetData() const { return Data; }
|
|
|
|
protected:
|
|
virtual void OnInitRequest() override;
|
|
|
|
private:
|
|
static void OnStartComplete(FOculusXRUInt64 RequestId, FOculusXRUUID Uuid, EColocationResult Result);
|
|
|
|
FDelegateHandle OnStartCompleteHandle;
|
|
TArray<uint8> Data;
|
|
};
|
|
|
|
// Stop advertisement, stops advertising and destroys the internal session
|
|
struct OCULUSXRCOLOCATION_API FStopSessionAdvertisementRequest :
|
|
FAsyncColocationRequest<FStopSessionAdvertisementRequest, FOculusXRColocationSession>
|
|
{
|
|
public:
|
|
FStopSessionAdvertisementRequest();
|
|
~FStopSessionAdvertisementRequest();
|
|
|
|
protected:
|
|
virtual void OnInitRequest() override;
|
|
|
|
private:
|
|
static void OnStopComplete(FOculusXRUInt64 RequestId, EColocationResult Result);
|
|
|
|
FDelegateHandle OnStopCompleteHandle;
|
|
FDelegateHandle OnCompleteHandle;
|
|
};
|
|
} // namespace OculusXRColocation
|