Skip to content

Commit ec1719b

Browse files
authored
feat: use new ecsact async session api (#17)
1 parent dfe1c1d commit ec1719b

14 files changed

+271
-202
lines changed

Source/Ecsact/Private/EcsactGameInstanceSubsystem.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
auto UEcsactGameInstanceSubsystem::Initialize( //
1313
FSubsystemCollectionBase& Collection
1414
) -> void {
15-
RuntimeHandle = ECSACT_LOAD_RUNTIME();
16-
15+
UE_LOG(LogTemp, Log, TEXT("Ecsact Game Instance Initialize"));
1716
FWorldDelegates::OnPreWorldInitialization.AddUObject(
1817
this,
1918
&ThisClass::OnPreWorldInitialization
@@ -35,10 +34,6 @@ auto UEcsactGameInstanceSubsystem::Deinitialize() -> void {
3534
if(runner) {
3635
StopRunner();
3736
}
38-
39-
if(RuntimeHandle) {
40-
ECSACT_UNLOAD_RUNTIME(RuntimeHandle);
41-
}
4237
}
4338

4439
auto UEcsactGameInstanceSubsystem::OnPreWorldInitialization(

Source/Ecsact/Private/EcsactGameInstanceSubsystem.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class UEcsactGameInstanceSubsystem : public UGameInstanceSubsystem {
1111

1212
friend class EcsactUnrealExecution;
1313

14-
FEcsactRuntimeHandle RuntimeHandle;
1514
TWeakObjectPtr<class UEcsactRunner> Runner;
1615

1716
auto OnPreWorldInitialization(
Lines changed: 35 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "EcsactUnreal/Blueprint/EcsactAsyncConnectBlueprintAction.h"
2-
#include "EcsactUnreal/EcsactExecution.h"
32
#include "EcsactUnreal/EcsactAsyncRunnerEvents.h"
3+
#include "EcsactUnreal/EcsactExecution.h"
4+
#include "EcsactUnreal/EcsactAsyncRunner.h"
45
#include "ecsact/runtime/async.h"
56
#include "EcsactUnreal/Ecsact.h"
67

@@ -21,57 +22,30 @@ auto UEcsactAsyncConnectBlueprintAction::ConnectRequest(
2122
) -> void {
2223
UE_LOG(Ecsact, Warning, TEXT("AsyncConnectActivate()"));
2324
auto runner = EcsactUnrealExecution::Runner(GetWorld());
24-
auto async_events = Cast<IEcsactAsyncRunnerEvents>(runner);
25-
if(!async_events) {
25+
auto async_runner = Cast<UEcsactAsyncRunner>(runner);
26+
if(!async_runner) {
2627
UE_LOG(
2728
Ecsact,
2829
Error,
2930
TEXT("Cannot use Ecsact async blueprint api with runner that does not "
30-
"implement IEcsactAsyncRunnerEvents")
31+
"inherit UEcsactAsyncRunner")
3132
);
32-
OnError.Broadcast(EAsyncConnectError::AsyncRunnerEventsUnavailable);
33-
OnDone.Broadcast({});
34-
return;
35-
}
36-
37-
auto req_id = ecsact_async_connect(ConnectionString.c_str());
38-
UE_LOG(Ecsact, Warning, TEXT("async connect request id=%i"), req_id);
39-
40-
if(req_id == ECSACT_INVALID_ID(async_request)) {
41-
UE_LOG(Ecsact, Error, TEXT("Invalid Request ID"));
42-
OnError.Broadcast(EAsyncConnectError::InvalidRequestId);
33+
OnError.Broadcast(EAsyncConnectError::AsyncRunnerUnavailable);
4334
OnDone.Broadcast({});
4435
return;
4536
}
4637

47-
async_events->OnRequestDone(
48-
req_id,
49-
IEcsactAsyncRunnerEvents::FAsyncRequestDoneCallback::CreateUObject(
50-
this,
51-
&ThisClass::OnRequestDone
52-
)
38+
SessionEventHandle = async_runner->AsyncSessionEvent.AddUObject(
39+
this,
40+
&ThisClass::OnAsyncSessionEvent
5341
);
5442

55-
async_events->OnRequestError(
56-
req_id,
57-
IEcsactAsyncRunnerEvents::FAsyncRequestErrorCallback::CreateUObject(
58-
this,
59-
&ThisClass::OnRequestError
60-
)
43+
async_runner->AsyncSessionStart(
44+
ConnectionString.c_str(),
45+
static_cast<int32_t>(ConnectionString.size())
6146
);
6247
}
6348

64-
auto UEcsactAsyncConnectBlueprintAction::OnRequestDone() -> void {
65-
auto runner = EcsactUnrealExecution::Runner(GetWorld());
66-
auto async_events = Cast<IEcsactAsyncRunnerEvents>(runner);
67-
UE_LOG(Ecsact, Error, TEXT("OnRequestDone??"));
68-
if(!bConnectFailed) {
69-
async_events->TriggerGenericConnectCallbacks();
70-
OnSuccess.Broadcast({});
71-
}
72-
OnDone.Broadcast({});
73-
}
74-
7549
auto UEcsactAsyncConnectBlueprintAction::OnRequestError( //
7650
ecsact_async_error Error
7751
) -> void {
@@ -84,6 +58,28 @@ auto UEcsactAsyncConnectBlueprintAction::OnRequestError( //
8458
OnError.Broadcast(EAsyncConnectError::InvalidConnectionString);
8559
break;
8660
}
61+
}
8762

88-
bConnectFailed = true;
63+
auto UEcsactAsyncConnectBlueprintAction::OnAsyncSessionEvent( //
64+
int32 SessionId,
65+
EEcsactAsyncSessionEvent Event
66+
) -> void {
67+
auto runner = EcsactUnrealExecution::Runner(GetWorld());
68+
auto async_runner = Cast<UEcsactAsyncRunner>(runner);
69+
70+
if(async_runner) {
71+
switch(Event) {
72+
case EEcsactAsyncSessionEvent::Stopped:
73+
async_runner->AsyncSessionEvent.Remove(SessionEventHandle);
74+
OnDone.Broadcast({});
75+
break;
76+
case EEcsactAsyncSessionEvent::Started:
77+
async_runner->AsyncSessionEvent.Remove(SessionEventHandle);
78+
OnSuccess.Broadcast({});
79+
OnDone.Broadcast({});
80+
break;
81+
default:
82+
break;
83+
}
84+
}
8985
}

Source/Ecsact/Public/EcsactUnreal/Blueprint/EcsactAsyncConnectBlueprintAction.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
#pragma once
22

33
#include <string>
4+
#include "EcsactUnreal/EcsactAsyncRunnerEvents.h"
45
#include "Kismet/BlueprintAsyncActionBase.h"
56
#include "ecsact/runtime/async.h"
67
#include "EcsactAsyncConnectBlueprintAction.generated.h"
78

89
UENUM()
910
enum class EAsyncConnectError : uint8 {
1011
NoError,
11-
AsyncRunnerEventsUnavailable,
12+
AsyncRunnerUnavailable,
1213
InvalidRequestId,
1314
PermissionDenied,
1415
InvalidConnectionString,
16+
InvalidSessionId,
1517
};
1618

1719
/**
@@ -26,6 +28,8 @@ class ECSACT_API UEcsactAsyncConnectBlueprintAction
2628
std::string Utf8ConnectionString;
2729
bool bConnectFailed = false;
2830

31+
FDelegateHandle SessionEventHandle;
32+
2933
auto OnRequestDone() -> void;
3034
auto OnRequestError(ecsact_async_error Error) -> void;
3135

@@ -71,4 +75,8 @@ class ECSACT_API UEcsactAsyncConnectBlueprintAction
7175

7276
protected:
7377
auto ConnectRequest(std::string ConnectionString) -> void;
78+
auto OnAsyncSessionEvent( //
79+
int32 SessionId,
80+
EEcsactAsyncSessionEvent Event
81+
) -> void;
7482
};

Source/Ecsact/Public/EcsactUnreal/Ecsact.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ auto FEcsactModule::Abort() -> void {
4141
}
4242

4343
auto FEcsactModule::StartupModule() -> void {
44+
UE_LOG(Ecsact, Log, TEXT("Ecsact Module Startup"));
4445
Self = this;
4546
}
4647

4748
auto FEcsactModule::ShutdownModule() -> void {
49+
UE_LOG(Ecsact, Log, TEXT("Ecsact Module Shutdown"));
4850
Self = nullptr;
4951
}
5052

0 commit comments

Comments
 (0)