2014-03-14 14:13:41 -04:00
|
|
|
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
/*=============================================================================
|
|
|
|
|
TaskDatabaseThread.h: Implements logic for task database worker thread
|
|
|
|
|
=============================================================================*/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "TaskDatabase.h"
|
|
|
|
|
|
2014-06-12 23:22:18 -04:00
|
|
|
|
2014-03-14 14:13:41 -04:00
|
|
|
/**
|
|
|
|
|
* Base class for describing an in-flight task database request
|
|
|
|
|
*/
|
|
|
|
|
class FTaskDatabaseRequest
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
/** The request type */
|
|
|
|
|
ETaskDatabaseRequestType::Type RequestType;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Task database request data for 'QueryAvailableDatabases'
|
|
|
|
|
*/
|
|
|
|
|
class FTaskDatabaseRequest_QueryAvailableDatabases
|
|
|
|
|
: public FTaskDatabaseRequest
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
/** Server URL */
|
|
|
|
|
FString ServerURL;
|
|
|
|
|
|
|
|
|
|
/** Login user name */
|
|
|
|
|
FString LoginUserName;
|
|
|
|
|
|
|
|
|
|
/** Login password */
|
|
|
|
|
FString LoginPassword;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Task database request data for 'ConnectToDatabase'
|
|
|
|
|
*/
|
|
|
|
|
class FTaskDatabaseRequest_ConnectToDatabase
|
|
|
|
|
: public FTaskDatabaseRequest
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
/** Server URL */
|
|
|
|
|
FString ServerURL;
|
|
|
|
|
|
|
|
|
|
/** Login user name */
|
|
|
|
|
FString LoginUserName;
|
|
|
|
|
|
|
|
|
|
/** Login password */
|
|
|
|
|
FString LoginPassword;
|
|
|
|
|
|
|
|
|
|
/** The database name to connect to */
|
|
|
|
|
FString DatabaseName;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Task database request data for 'QueryTasks'
|
|
|
|
|
*/
|
|
|
|
|
class FTaskDatabaseRequest_QueryTasks
|
|
|
|
|
: public FTaskDatabaseRequest
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
/** Filter name string */
|
|
|
|
|
FString FilterName;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Task database request data for 'QueryTaskDetails'
|
|
|
|
|
*/
|
|
|
|
|
class FTaskDatabaseRequest_QueryTaskDetails
|
|
|
|
|
: public FTaskDatabaseRequest
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
/** The task number to query details about */
|
|
|
|
|
uint32 TaskNumber;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Task database request data for 'MarkTaskComplete'
|
|
|
|
|
*/
|
|
|
|
|
class FTaskDatabaseRequest_MarkTaskComplete
|
|
|
|
|
: public FTaskDatabaseRequest
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
/** The task number to mark as fixed */
|
|
|
|
|
uint32 TaskNumber;
|
|
|
|
|
|
|
|
|
|
/** Resolution data for this task */
|
|
|
|
|
FTaskResolutionData ResolutionData;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Task database thread 'runnable' instance
|
|
|
|
|
*/
|
|
|
|
|
class FTaskDatabaseThreadRunnable
|
|
|
|
|
: public FRunnable
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* FTaskDatabaseThreadRunnable constructor
|
|
|
|
|
*
|
|
|
|
|
* @param InTaskDatabaseProvider The task database provider to bind to
|
|
|
|
|
*/
|
|
|
|
|
FTaskDatabaseThreadRunnable( FTaskDatabaseProviderInterface* InTaskDatabaseProvider );
|
|
|
|
|
|
|
|
|
|
/** FTaskDatabaseThreadRunnable destructor */
|
|
|
|
|
virtual ~FTaskDatabaseThreadRunnable();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Allows per runnable object initialization. NOTE: This is called in the
|
|
|
|
|
* context of the thread object that aggregates this, not the thread that
|
|
|
|
|
* passes this runnable to a new thread.
|
|
|
|
|
*
|
|
|
|
|
* @return True if initialization was successful, false otherwise
|
|
|
|
|
*/
|
|
|
|
|
virtual bool Init();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This is where all per object thread work is done. This is only called
|
|
|
|
|
* if the initialization was successful.
|
|
|
|
|
*
|
|
|
|
|
* @return The exit code of the runnable object
|
|
|
|
|
*/
|
|
|
|
|
virtual uint32 Run();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This is called if a thread is requested to terminate early
|
|
|
|
|
*/
|
|
|
|
|
virtual void Stop();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Called in the context of the aggregating thread to perform any cleanup.
|
|
|
|
|
*/
|
|
|
|
|
virtual void Exit();
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
/** Synchronization object for the task database */
|
|
|
|
|
FCriticalSection CriticalSection;
|
|
|
|
|
|
|
|
|
|
/** True if we should suspend the task database thread
|
|
|
|
|
NOTE: This is shared between the main thread and the task database thread */
|
|
|
|
|
volatile bool bThreadSafeShouldSuspend;
|
|
|
|
|
|
|
|
|
|
/** True if the task database thread is ready to be assigned a request
|
|
|
|
|
NOTE: This is shared between the main thread and the task database thread */
|
|
|
|
|
FTaskDatabaseRequest* volatile ThreadSafeCurrentRequest;
|
|
|
|
|
|
|
|
|
|
/** Pointer to the latest response data from the prior request
|
|
|
|
|
NOTE: This is shared between the main thread and the task database thread */
|
|
|
|
|
FTaskDatabaseResponse* volatile ThreadSafeResponse;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
/** Task database server URL */
|
|
|
|
|
FString ServerURL;
|
|
|
|
|
|
|
|
|
|
/** Instance of the actual task database provider */
|
|
|
|
|
FTaskDatabaseProviderInterface* TaskDatabaseProvider;
|
|
|
|
|
|
|
|
|
|
/** True if the task database thread has been explicitly asked to stop. Usually at shutdown time. */
|
|
|
|
|
bool bAskedToStop;
|
|
|
|
|
};
|