/*H********************************************************************************/
/*!
    \File qosclient.h

    \Description
        Main include for the Quality of Service module.

    \Copyright
        Copyright (c) 2017 Electronic Arts Inc.

    \Version 1.0 04/07/2017 (cvienneau) 2.0
*/
/********************************************************************************H*/

#ifndef _qosclient_h
#define _qosclient_h

/*!
\Moduledef QosClient QosClient
\Modulemember Misc
*/
//@{

/*** Include files ****************************************************************/

#include "DirtySDK/platform.h"
#include "DirtySDK/misc/qoscommon.h"

/*** Defines **********************************************************************/

/*** Macros ***********************************************************************/

/*** Forward Declarations *********************************************************/

/*** Type Definitions *************************************************************/

//! opaque module ref
typedef struct QosClientRefT QosClientRefT;

//! event callback function prototype
typedef void (QosClientCallbackT)(QosClientRefT *pQosClient, QosCommonProcessedResultsT *pResults, void *pUserData);

/*** Variables ********************************************************************/

/*** Functions ********************************************************************/

#ifdef __cplusplus
extern "C" {
#endif

// create the module state
DIRTYCODE_API QosClientRefT *QosClientCreate(QosClientCallbackT *pCallback, void *pUserData, uint16_t uListenPort);

// let the module do processing
DIRTYCODE_API void QosClientUpdate(QosClientRefT *pQosClient);

// begin QOS process managed by the QOS coordinator
DIRTYCODE_API void QosClientStart(QosClientRefT *pQosClient, const char *pStrCoordinatorAddr, uint16_t uPort, const char * strQosProfile);

// change the behavior of the QOS system
DIRTYCODE_API int32_t QosClientControl(QosClientRefT *pQosClient, int32_t iControl, int32_t iValue, void *pValue);

// get the status, of the QOS system
DIRTYCODE_API int32_t QosClientStatus(QosClientRefT *pQosClient, int32_t iSelect, int32_t iData, void *pBuf, int32_t iBufSize);

// destroy the module state
DIRTYCODE_API void QosClientDestroy(QosClientRefT *pQosClient);

#ifdef __cplusplus
}
#endif

//@}

#endif // _filename_h