Files
UnrealEngineUWP/Engine/Source/Developer/SessionServices/Private/SessionService.h
Max Preussner f1ffd33f2b SessionFrontend: Implemented session authorization for remote users
See SESSION console command for details. Some more updates are needed in Automation, Profiler, etc. to perform authorization on a per-instance instead of per-session basis.

#CodeReview: peter.sauerbrei

[CL 2698089 by Max Preussner in Main branch]
2015-09-18 19:16:15 -04:00

103 lines
2.6 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "ISessionService.h"
/**
* Implements an application session service.
*/
class FSessionService
: public FOutputDevice
, public ISessionService
{
public:
/**
* Creates and initializes a new instance.
*
* @param InMessageBus The message bus to use.
*/
FSessionService(const IMessageBusRef& InMessageBus);
/** Virtual destructor. */
virtual ~FSessionService();
public:
// FOutputDevice interface
virtual void Serialize(const TCHAR* Data, ELogVerbosity::Type Verbosity, const class FName& Category) override
{
SendLog(Data, Verbosity, Category);
}
public:
// ISessionService interface
virtual bool IsRunning() override
{
return MessageEndpoint.IsValid();
}
virtual bool Start() override;
virtual void Stop() override;
protected:
/**
* Sends a log message to subscribed recipients.
*
* @param Data The log message data.
* @param Verbosity The verbosity type.
* @param Category The log category.
*/
void SendLog(const TCHAR* Data, ELogVerbosity::Type Verbosity = ELogVerbosity::Log, const class FName& Category = "Log");
/**
* Sends a notification to the specified recipient.
*
* @param NotificationText The notification text.
* @param Recipient The recipient's message address.
*/
void SendNotification(const TCHAR* NotificationText, const FMessageAddress& Recipient);
/**
* Publishes a ping response.
*
* @param Context The context of the received Ping message.
* @param UserName The name of the user that sent the ping.
*/
void SendPong(const IMessageContextRef& Context, const FString& UserName);
private:
/** Handles message bus shutdowns. */
void HandleMessageEndpointShutdown();
/** Handles FSessionServiceLogSubscribe messages. */
void HandleSessionLogSubscribeMessage(const FSessionServiceLogSubscribe& Message, const IMessageContextRef& Context);
/** Handles FSessionServiceLogUnsubscribe messages. */
void HandleSessionLogUnsubscribeMessage(const FSessionServiceLogUnsubscribe& Message, const IMessageContextRef& Context);
/** Handles FSessionServicePing messages. */
void HandleSessionPingMessage(const FSessionServicePing& Message, const IMessageContextRef& Context);
private:
/** Holds the list of log subscribers. */
TArray<FMessageAddress> LogSubscribers;
/** Holds a critical section for the log subscribers array. */
FCriticalSection LogSubscribersLock;
/** Holds a weak pointer to the message bus. */
IMessageBusWeakPtr MessageBusPtr;
/** Holds the message endpoint. */
FMessageEndpointPtr MessageEndpoint;
};