// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Modules/ModuleInterface.h" #include "Modules/ModuleManager.h" #include "Templates/SharedPointer.h" #include "Delegates/Delegate.h" class IAuthorizeMessageRecipients; class IMessageBridge; class IMessageBus; class IMessageTransport; struct FMessageAddress; /** Log category for message bus code */ DECLARE_LOG_CATEGORY_EXTERN(LogMessaging, Log, All); /** * Interface for messaging modules. * * @see IMessageBridge, IMessageBus */ class IMessagingModule : public IModuleInterface { using FMessageBusWeakPtr = TWeakPtr; public: DECLARE_MULTICAST_DELEGATE_OneParam(FOnMessageBusStartupOrShutdown, FMessageBusWeakPtr); /** Event triggered when a message bus is started. */ virtual FOnMessageBusStartupOrShutdown& OnMessageBusStartup() = 0; /** Event triggered when a message bus is shutdown. */ virtual FOnMessageBusStartupOrShutdown& OnMessageBusShutdown() = 0; /** * Creates a new message bridge. * * Message bridges translate messages between a message bus and another means of * message transportation, such as network sockets. * * @param Address The bridge's address on the message bus. * @param Bus The message bus to attach the bridge to. * @param Transport The message transport technology to use. * @return The new message bridge, or nullptr if the bridge couldn't be created. * @see CreateBus */ virtual TSharedPtr CreateBridge(const FMessageAddress& Address, const TSharedRef& Bus, const TSharedRef& Transport) = 0; /** * Creates a new message bus. * * @param RecipientAuthorizer An optional recipient authorizer. * @return The new message bus, or nullptr if the bus couldn't be created. * @see CreateBridge */ virtual TSharedPtr CreateBus(const TSharedPtr& RecipientAuthorizer = nullptr) = 0; /** * Creates a new message bus. * * @param Name The name of this message bus. * @param RecipientAuthorizer An optional recipient authorizer. * @return The new message bus, or nullptr if the bus couldn't be created. * @see CreateBridge */ virtual TSharedPtr CreateBus(FString InName, const TSharedPtr& RecipientAuthorizer = nullptr) = 0; /** * Gets the default message bus if it has been initialized. * * @return The default bus. */ virtual TSharedPtr GetDefaultBus() const = 0; /** * Gets all message buses that were created by this module via the #CreateBus method * that are still valid. * * @return All message buses. */ virtual TArray> GetAllBuses() const = 0; public: /** * Gets a reference to the messaging module instance. * * @return A reference to the Messaging module. * @todo gmp: better implementation using dependency injection. */ static IMessagingModule& Get() { #if PLATFORM_IOS static IMessagingModule& MessageModule = FModuleManager::LoadModuleChecked("Messaging"); return MessageModule; #else return FModuleManager::LoadModuleChecked("Messaging"); #endif } public: /** Virtual destructor. */ virtual ~IMessagingModule() { } };