First commit of EventCenterPlugin (not working, wip)

This commit is contained in:
Brandon Thomas
2021-02-15 23:31:25 -05:00
commit 5d00a246f5
6 changed files with 257 additions and 0 deletions
@@ -0,0 +1,66 @@
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class EventCenterPlugin : ModuleRules
{
public EventCenterPlugin(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
PublicIncludePaths.AddRange(new string[] {});
PublicIncludePaths.AddRange(
new string[] {
// ... add public include paths required here ...
// NB(bt): Using the commercial Redis Plugin by GameSeed (AKA "SDRedis")
// Add this in the Unreal Engine Plugins menu.
// If not present, use the Epic Games Launcher's Unreal Library Marketplace.
"RedisPlugin/Public",
"RedisPlugin/Classes"
}
);
PrivateIncludePaths.AddRange(
new string[] {
// ... add other private include paths required here ...
}
);
PublicDependencyModuleNames.AddRange(
new string[]
{
"Core",
// ... add other public dependencies that you statically link with here ...
// NB(bt): Using the commercial Redis Plugin by GameSeed (AKA "SDRedis")
// Add this in the Unreal Engine Plugins menu.
// If not present, use the Epic Games Launcher's Unreal Library Marketplace.
"RedisPlugin"
}
);
PrivateDependencyModuleNames.AddRange(
new string[]
{
"CoreUObject",
"Engine",
"Slate",
"SlateCore",
// ... add private dependencies that you statically link with here ...
}
);
DynamicallyLoadedModuleNames.AddRange(
new string[]
{
// ... add any modules that your module loads dynamically here ...
}
);
}
}
@@ -0,0 +1,20 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "EventCenterPlugin.h"
#define LOCTEXT_NAMESPACE "FEventCenterPluginModule"
void FEventCenterPluginModule::StartupModule()
{
// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
}
void FEventCenterPluginModule::ShutdownModule()
{
// This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
// we call this function before unloading the module.
}
#undef LOCTEXT_NAMESPACE
IMPLEMENT_MODULE(FEventCenterPluginModule, EventCenterPlugin)
@@ -0,0 +1,62 @@
#include "EventSourceActor.h"
#include "UObject/Object.h"
DEFINE_LOG_CATEGORY(EventSourceLog);
AEventSourceActor::AEventSourceActor()
{
// Set this actor to call Tick() every frame.
// You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
//redis = NewObject<URedisObject>(this, TEXT("RedisObject"));
redis = CreateDefaultSubobject<URedisObject>(TEXT("RedisObject"));
//RootComponent = redis;
}
AEventSourceActor::~AEventSourceActor()
{
// TODO: Memory leak (somehow placing a BP derivation into the editor causes the below lines to segfault)
//delete redis;
//redis = nullptr;
}
void AEventSourceActor::BeginPlay()
{
UE_LOG(EventSourceLog, Log, TEXT("BeginPlay()"));
Super::BeginPlay();
UE_LOG(EventSourceLog, Log, TEXT("BeginPlay(): Redis is null? %b"), redis != nullptr);
//UE_LOG(EventSourceLog, Log, TEXT("BeginPlay(): Redis host: %s"), redisHost);
UE_LOG(EventSourceLog, Log, TEXT("BeginPlay(): Redis port: %d"), redisPort);
//UE_LOG(EventSourceLog, Log, TEXT("BeginPlay(): Redis password (no secrets): %s"), redisPassword);
//redis->Init(redisHost, redisPort, redisPassword);
}
void AEventSourceActor::BeginDestroy()
{
Super::BeginDestroy();
}
void AEventSourceActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// NB: Handled by RedisObject internal delegate
//redis->Tick(DeltaTime);
}
void AEventSourceActor::Subscribe(const FString& Channel)
{
redis->Subscribe(Channel);
}
void AEventSourceActor::Unsubscribe(const FString& Channel)
{
redis->Unsubscribe(Channel);
}
@@ -0,0 +1,15 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
class FEventCenterPluginModule : public IModuleInterface
{
public:
/** IModuleInterface implementation */
virtual void StartupModule() override;
virtual void ShutdownModule() override;
};
@@ -0,0 +1,70 @@
#pragma once
// Unreal Core
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
// RedisPlugin
#include "RedisObject.h"
// EventCenterPlugin
#include "EventSourceActor.generated.h"
DECLARE_LOG_CATEGORY_EXTERN(EventSourceLog, Log, All);
/**
* AEventSourceActor
*
* Manages an underlying Redis pubsub subscription and coordinates dispatch to other actors.
*/
// NB(bt): "Blueprintable" seems to remove the ability to add BP event nodes.
UCLASS()
class EVENTCENTERPLUGIN_API AEventSourceActor : public AActor
{
GENERATED_BODY()
public:
AEventSourceActor();
~AEventSourceActor();
/** Redis Hostname */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EventCenter")
FString redisHost;
/** Redis Port */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EventCenter")
int32 redisPort = 6379;
/** Redis Password */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EventCenter")
FString redisPassword;
/** Subscribe to a named Redis PubSub channel. */
UFUNCTION(BlueprintCallable, Category = "EventCenter")
void Subscribe(const FString& Channel);
/** Unsubscribe from a named Redis PubSub channel. */
UFUNCTION(BlueprintCallable, Category = "EventCenter")
void Unsubscribe(const FString& Channel);
/** I have no idea what do... */
UPROPERTY(BlueprintAssignable)
FSubscribeReply SubscribeReplyy;
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
virtual void BeginDestroy() override;
private:
URedisObject* redis;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
};