Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions docs/docs/01-intro/01-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,49 @@ ctx.procedures.makeRequest().then(
);
```

</TabItem>
<TabItem value="cpp" label="Unreal C++">

An Unreal C++ [client](#client) can call a procedure defined by a Rust or TypeScript module:

```cpp
{
...
// Call the procedure without a callback
Context.Procedures->MakeRequest({});
}

```

A Unreal C++ [client](#client) can also register a callback to run when a procedure call finishes, which will be invoked with that procedure's return value:

```cpp
{
...
FOnMakeRequestComplete Callback;
BIND_DELEGATE_SAFE(Callback, this, AGameManager, OnMakeRequestComplete);
Context.Procedures->MakeRequest(Callback);
}

// Make sure to mark any callback functions as UFUNCTION() or they will not be executed
void AGameManager::OnMakeRequestComplete(const FProcedureEventContext& Context, const FString& Result, bool bSuccess)
{
UE_LOG(LogTemp, Log, TEXT("Procedure `MakeRequest` returned %s"), *Result);
}

```

</TabItem>
<TabItem value="blueprint" label="Unreal Blueprint">

An Unreal C++ [client](#client) can call a procedure defined by a Rust or TypeScript module:

![MakeRequest without callback](/images/unreal/intro/ue-blueprint-makerequest-nocallback.png)

A Unreal C++ [client](#client) can also register a callback to run when a procedure call finishes, which will be invoked with that procedure's return value:

![MakeRequest with callback](/images/unreal/intro/ue-blueprint-makerequest-with-callback.png)

</TabItem>
</Tabs>

Expand Down
60 changes: 59 additions & 1 deletion docs/docs/11-Procedures/01-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,22 @@ Clients can invoke procedures using methods on `ctx.procedures`:
ctx.procedures.insertAValue({ a: 12, b: "Foo" });
```

</TabItem>
<TabItem value="cpp" label="Unreal C++">

Clients can invoke procedures using methods on `ctx.Procedures`:

```cpp
Context.Procedures->InsertAValue(12, TEXT("Foo"), {});
```

</TabItem>
<TabItem value="blueprint" label="Unreal Blueprint">

Clients can invoke procedures using methods on `ctx.Procedures`:

![Calling Procedures](/images/unreal/procedures/ue-blueprint-calling-procedure.png)

</TabItem>
</Tabs>

Expand Down Expand Up @@ -485,7 +501,7 @@ That callback will have access to the return value of the procedure,
or an error if the procedure fails.

```csharp
ctx.Procedures.AddTwoNumbers(12, "Foo", (ctx, result) =>
ctx.Procedures.AddTwoNumbers(1, 2, (ctx, result) =>
{
if (result.IsSuccess)
{
Expand All @@ -509,5 +525,47 @@ ctx.procedures.addTwoNumbers({ lhs: 1, rhs: 2 }).then(
);
```

</TabItem>
<TabItem value="cpp" label="Unreal C++">

A client can also invoke a procedure while registering a callback to run when it completes.
That callback will have access to the return value of the procedure,
or an error if the procedure fails.

```cpp
{
...
FOnAddTwoNumbersComplete ReturnCallback;
BIND_DELEGATE_SAFE(ReturnCallback, this, AGameManager, OnAddTwoNumbersComplete);
Context.Procedures->AddTwoNumbers(1, 2, ReturnCallback);
}

void AGameManager::OnAddTwoNumbersComplete(const FProcedureEventContext& Context, int32 Result, bool bSuccess)
{
if (bSuccess)
{
UE_LOG(LogTemp, Log, TEXT("1 + 2 = %d"), Result);
}
else
{
if (Context.Event.Status.IsInternalError())
{
UE_LOG(LogTemp, Error, TEXT("Error: %s"), *Context.Event.Status.GetAsInternalError());
return;
}
UE_LOG(LogTemp, Error, TEXT("Out of energy!"));
}
}
```

</TabItem>
<TabItem value="blueprint" label="Unreal Blueprint">

A client can also invoke a procedure while registering a callback to run when it completes.
That callback will have access to the return value of the procedure,
or an error if the procedure fails.

![Procedure Callbacks](/images/unreal/procedures/ue-blueprint-procedure-callback.png)

</TabItem>
</Tabs>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -680,40 +680,36 @@ class SPACETIMEDBSDK_API USpacetimeDBProcedureStatusBpLib : public UBlueprintFun
}

UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus")
static bool IsReturned(const FProcedureStatusType& InValue) { return InValue.IsReturned(); }
static bool IsReturned(const FSpacetimeDBProcedureStatus& InValue) { return InValue.IsReturned(); }

UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus")
static TArray<uint8> GetAsReturned(const FProcedureStatusType& InValue)
{
return InValue.GetAsReturned();
}
// We don't allow the raw value to be exported as GetAsReturned() from the ProcedureEventContext.

UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ProcedureStatus")
static FProcedureStatusType OutOfEnergy(const FSpacetimeDBUnit& InValue)
static FSpacetimeDBProcedureStatus OutOfEnergy(const FSpacetimeDBUnit& InValue)
{
return FProcedureStatusType::OutOfEnergy(InValue);
return FSpacetimeDBProcedureStatus::OutOfEnergy(InValue);
}

UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus")
static bool IsOutOfEnergy(const FProcedureStatusType& InValue) { return InValue.IsOutOfEnergy(); }
static bool IsOutOfEnergy(const FSpacetimeDBProcedureStatus& InValue) { return InValue.IsOutOfEnergy(); }

UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus")
static FSpacetimeDBUnit GetAsOutOfEnergy(const FProcedureStatusType& InValue)
static FSpacetimeDBUnit GetAsOutOfEnergy(const FSpacetimeDBProcedureStatus& InValue)
{
return InValue.GetAsOutOfEnergy();
}

UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ProcedureStatus")
static FProcedureStatusType InternalError(const FString& InValue)
static FSpacetimeDBProcedureStatus InternalError(const FString& InValue)
{
return FProcedureStatusType::InternalError(InValue);
return FSpacetimeDBProcedureStatus::InternalError(InValue);
}

UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus")
static bool IsInternalError(const FProcedureStatusType& InValue) { return InValue.IsInternalError(); }
static bool IsInternalError(const FSpacetimeDBProcedureStatus& InValue) { return InValue.IsInternalError(); }

UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus")
static FString GetAsInternalError(const FProcedureStatusType& InValue)
static FString GetAsInternalError(const FSpacetimeDBProcedureStatus& InValue)
{
return InValue.GetAsInternalError();
}
Expand Down