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
11 changes: 11 additions & 0 deletions .pubnub.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,17 @@ schema: 1
version: v1.0.0
scm: github.com/pubnub/unreal-engine
changelog:
- date: 2025-09-11
version: 1.1.0
changes:
- type: feature
text: "Add implementation of Entities: `Channel`, `ChannelGroup`, `ChannelMetadata`, `UserMetadata` with all related PubNub functions."
- type: feature
text: "Add implementation of `Subscription` and `SubscriptionSet` objects. Add all necessary operations to add, remove, get subscriptions."
- type: feature
text: "Add implementation of Event Listeners - user can now bind a delegate to subscription for every event type separately or all of them at once."
- type: bug
text: "Clean up properly all C-Core subscriptions after `UnsubscribeFromAll`."
- date: 2025-08-19
version: v1.0.0
changes:
Expand Down
4 changes: 2 additions & 2 deletions PubnubLibrary.uplugin
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"FileVersion": 3,
"Version": 11,
"VersionName": "1.0.0",
"Version": 12,
"VersionName": "1.1.0",
"FriendlyName": "Pubnub Unreal SDK",
"Description": "Quickly add interactive features to your game that scale without building your backend infrastructure.",
"Category": "Code",
Expand Down
31 changes: 31 additions & 0 deletions Source/PubnubLibrary/Private/Entities/PubnubBaseEntity.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright 2025 PubNub Inc. All Rights Reserved.

#include "Entities/PubnubBaseEntity.h"
#include "Entities/PubnubSubscription.h"
#include "PubnubSubsystem.h"

UPubnubSubscription* UPubnubBaseEntity::CreateSubscription(FPubnubSubscribeSettings SubscribeSettings)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot create subscription - PubnubSubsystem is null. Entity not properly initialized."));
return nullptr;
}

UPubnubSubscription* Subscription = NewObject<UPubnubSubscription>(this);

Subscription->InitSubscription(PubnubSubsystem, this, SubscribeSettings);

return Subscription;
}

void UPubnubBaseEntity::InitEntity(UPubnubSubsystem* InPubnubSubsystem)
{
if(!InPubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Init Entity failed, PubnubSubsystem is invalid"));
return;
}

PubnubSubsystem = InPubnubSubsystem;
}
94 changes: 94 additions & 0 deletions Source/PubnubLibrary/Private/Entities/PubnubChannelEntity.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
// Copyright 2025 PubNub Inc. All Rights Reserved.

#include "Entities/PubnubChannelEntity.h"


UPubnubChannelEntity::UPubnubChannelEntity()
{
EntityType = EPubnubEntityType::PEnT_Channel;
}

void UPubnubChannelEntity::PublishMessage(FString Message, FOnPublishMessageResponse OnPublishMessageResponse, FPubnubPublishSettings PublishSettings)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot publish message - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
if (EntityID.IsEmpty())
{
UE_LOG(PubnubLog, Error, TEXT("Cannot publish message - EntityID is empty."));
return;
}
PubnubSubsystem->PublishMessage(EntityID, Message, OnPublishMessageResponse, PublishSettings);
}

void UPubnubChannelEntity::PublishMessage(FString Message, FOnPublishMessageResponseNative NativeCallback, FPubnubPublishSettings PublishSettings)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot publish message - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->PublishMessage(EntityID, Message, NativeCallback, PublishSettings);
}

void UPubnubChannelEntity::PublishMessage(FString Message, FPubnubPublishSettings PublishSettings)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot publish message - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->PublishMessage(EntityID, Message, PublishSettings);
}

void UPubnubChannelEntity::Signal(FString Message, FOnSignalResponse OnSignalResponse, FPubnubSignalSettings SignalSettings)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot send signal - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->Signal(EntityID, Message, OnSignalResponse, SignalSettings);
}

void UPubnubChannelEntity::Signal(FString Message, FOnSignalResponseNative NativeCallback, FPubnubSignalSettings SignalSettings)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot send signal - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->Signal(EntityID, Message, NativeCallback, SignalSettings);
}

void UPubnubChannelEntity::Signal(FString Message, FPubnubSignalSettings SignalSettings)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot send signal - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->Signal(EntityID, Message, SignalSettings);
}

void UPubnubChannelEntity::ListUsersFromChannel(FOnListUsersFromChannelResponse ListUsersFromChannelResponse, FPubnubListUsersFromChannelSettings ListUsersFromChannelSettings)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot list users from channel - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->ListUsersFromChannel(EntityID, ListUsersFromChannelResponse, ListUsersFromChannelSettings);
}

void UPubnubChannelEntity::ListUsersFromChannel(FOnListUsersFromChannelResponseNative NativeCallback, FPubnubListUsersFromChannelSettings ListUsersFromChannelSettings)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot list users from channel - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->ListUsersFromChannel(EntityID, NativeCallback, ListUsersFromChannelSettings);
}
90 changes: 90 additions & 0 deletions Source/PubnubLibrary/Private/Entities/PubnubChannelGroupEntity.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// Copyright 2025 PubNub Inc. All Rights Reserved.

#include "Entities/PubnubChannelGroupEntity.h"


UPubnubChannelGroupEntity::UPubnubChannelGroupEntity()
{
EntityType = EPubnubEntityType::PEnT_ChannelGroup;
}

void UPubnubChannelGroupEntity::AddChannelToGroup(FString Channel, FOnAddChannelToGroupResponse OnAddChannelToGroupResponse)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot add channel to group - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->AddChannelToGroup(Channel, EntityID, OnAddChannelToGroupResponse);
}

void UPubnubChannelGroupEntity::AddChannelToGroup(FString Channel, FOnAddChannelToGroupResponseNative NativeCallback)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot add channel to group - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->AddChannelToGroup(Channel, EntityID, NativeCallback);
}

void UPubnubChannelGroupEntity::RemoveChannelFromGroup(FString Channel, FOnRemoveChannelFromGroupResponse OnRemoveChannelFromGroupResponse)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot remove channel from group - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->RemoveChannelFromGroup(Channel, EntityID, OnRemoveChannelFromGroupResponse);
}

void UPubnubChannelGroupEntity::RemoveChannelFromGroup(FString Channel, FOnRemoveChannelFromGroupResponseNative NativeCallback)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot remove channel from group - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->RemoveChannelFromGroup(Channel, EntityID, NativeCallback);
}

void UPubnubChannelGroupEntity::ListChannelsFromGroup(FOnListChannelsFromGroupResponse OnListChannelsResponse)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot list channels from group - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->ListChannelsFromGroup(EntityID, OnListChannelsResponse);
}

void UPubnubChannelGroupEntity::ListChannelsFromGroup(FOnListChannelsFromGroupResponseNative NativeCallback)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot list channels from group - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->ListChannelsFromGroup(EntityID, NativeCallback);
}

void UPubnubChannelGroupEntity::RemoveChannelGroup(FOnRemoveChannelGroupResponse OnRemoveChannelGroupResponse)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot remove channel group - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->RemoveChannelGroup(EntityID, OnRemoveChannelGroupResponse);
}

void UPubnubChannelGroupEntity::RemoveChannelGroup(FOnRemoveChannelGroupResponseNative NativeCallback)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot remove channel group - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->RemoveChannelGroup(EntityID, NativeCallback);
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// Copyright 2025 PubNub Inc. All Rights Reserved.

#include "Entities/PubnubChannelMetadataEntity.h"


UPubnubChannelMetadataEntity::UPubnubChannelMetadataEntity()
{
EntityType = EPubnubEntityType::PEnT_ChannelMetadata;
}

void UPubnubChannelMetadataEntity::SetChannelMetadata(FPubnubChannelData ChannelMetadata, FOnSetChannelMetadataResponse OnSetChannelMetadataResponse, FPubnubGetMetadataInclude Include)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot set channel metadata - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->SetChannelMetadata(EntityID, ChannelMetadata, OnSetChannelMetadataResponse, Include);
}

void UPubnubChannelMetadataEntity::SetChannelMetadata(FPubnubChannelData ChannelMetadata, FOnSetChannelMetadataResponseNative NativeCallback, FPubnubGetMetadataInclude Include)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot set channel metadata - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->SetChannelMetadata(EntityID, ChannelMetadata, NativeCallback, Include);
}

void UPubnubChannelMetadataEntity::GetChannelMetadata(FOnGetChannelMetadataResponse OnGetChannelMetadataResponse, FPubnubGetMetadataInclude Include)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot get channel metadata - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->GetChannelMetadata(EntityID, OnGetChannelMetadataResponse, Include);
}

void UPubnubChannelMetadataEntity::GetChannelMetadata(FOnGetChannelMetadataResponseNative NativeCallback, FPubnubGetMetadataInclude Include)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot get channel metadata - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->GetChannelMetadata(EntityID, NativeCallback, Include);
}

void UPubnubChannelMetadataEntity::RemoveChannelMetadata(FOnRemoveChannelMetadataResponse OnRemoveChannelMetadataResponse)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot remove channel metadata - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->RemoveChannelMetadata(EntityID, OnRemoveChannelMetadataResponse);
}

void UPubnubChannelMetadataEntity::RemoveChannelMetadata(FOnRemoveChannelMetadataResponseNative NativeCallback)
{
if (!PubnubSubsystem)
{
UE_LOG(PubnubLog, Error, TEXT("Cannot remove channel metadata - PubnubSubsystem is null. Entity not properly initialized."));
return;
}
PubnubSubsystem->RemoveChannelMetadata(EntityID, NativeCallback);
}

Loading