API/Autodoc/Files/URuStorePayPurchaseTwoStepExtendEventsNode.cpp.md


Source code

// Copyright Epic Games, Inc. All Rights Reserved.

#include "URuStorePayInvoiceId.h"

using namespace RuStoreSDK;
using namespace RuStoreSDK::Pay;

URuStorePayPurchaseTwoStepExtendEventsNode::URuStorePayPurchaseTwoStepExtendEventsNode(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
}

URuStorePayPurchaseTwoStepExtendEventsNode* URuStorePayPurchaseTwoStepExtendEventsNode::PurchaseTwoStepExtendEventsAsync(
    UObject* worldContextObject,
    URuStorePayClient* target,
    FURuStorePayProductPurchaseParams productPurchaseParams,
    EURuStorePaySdkTheme sdkTheme
)
{
    UObject* outer = worldContextObject ? worldContextObject : GetTransientPackage();

    auto node = NewObject<URuStorePayPurchaseTwoStepExtendEventsNode>(outer);
    node->RegisterWithGameInstance(worldContextObject);

    node->target = target;

    TWeakObjectPtr<URuStorePayPurchaseTwoStepExtendEventsNode> weakNode(node);

    node->purchaseEventListenerImpl = MakeShared<PurchaseEventListenerImpl, ESPMode::ThreadSafe>(
        [weakNode](long requestId, URuStorePayPurchaseId* purchaseId, URuStorePayInvoiceId* invoiceId)
        {
            if (!weakNode.IsValid()) return;
            weakNode->OnPaymentCompleted.Broadcast(FURuStorePayProductPurchaseResult(), FURuStoreError(), FURuStorePayPurchaseEventResult(purchaseId, invoiceId));
        },
        [weakNode](long requestId, URuStorePayPurchaseId* purchaseId, URuStorePayInvoiceId* invoiceId)
        {
            if (!weakNode.IsValid()) return;
            weakNode->OnPaymentFailed.Broadcast(FURuStorePayProductPurchaseResult(), FURuStoreError(), FURuStorePayPurchaseEventResult(purchaseId, invoiceId));
        },
        [weakNode](long requestId, URuStorePayPurchaseId* purchaseId, URuStorePayInvoiceId* invoiceId)
        {
            if (!weakNode.IsValid()) return;
            weakNode->OnPaymentStarted.Broadcast(FURuStorePayProductPurchaseResult(), FURuStoreError(), FURuStorePayPurchaseEventResult(purchaseId, invoiceId));
        },
        [weakNode](long requestId, URuStorePayPurchaseId* purchaseId, URuStorePayInvoiceId* invoiceId)
        {
            if (!weakNode.IsValid()) return;
            weakNode->OnPurchaseCancelled.Broadcast(FURuStorePayProductPurchaseResult(), FURuStoreError(), FURuStorePayPurchaseEventResult(purchaseId, invoiceId));
        },
        [weakNode](long requestId, URuStorePayPurchaseId* purchaseId, URuStorePayInvoiceId* invoiceId)
        {
            if (!weakNode.IsValid()) return;
            weakNode->OnPurchaseCreated.Broadcast(FURuStorePayProductPurchaseResult(), FURuStoreError(), FURuStorePayPurchaseEventResult(purchaseId, invoiceId));
        }
    );

    target->PurchaseTwoStep(
        productPurchaseParams,
        sdkTheme,
        [weakNode](long requestId, TSharedPtr<FURuStorePayProductPurchaseResult, ESPMode::ThreadSafe> response)
        {
            if (!weakNode.IsValid()) return;
            weakNode->Success.Broadcast(*response, FURuStoreError(), FURuStorePayPurchaseEventResult());
        },
        [weakNode](long requestId, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe> error)
        {
            if (!weakNode.IsValid()) return;
            weakNode->Error.Broadcast(FURuStorePayProductPurchaseResult(), *error, FURuStorePayPurchaseEventResult());
        },
        node->purchaseEventListenerImpl
    );

    return node;
}

Назад