97 lines
3.3 KiB
C++
97 lines
3.3 KiB
C++
#ifndef CommunicationManager_H
|
||
#define CommunicationManager_H
|
||
|
||
#include <string>
|
||
#include <memory>
|
||
#include <iostream>
|
||
#include <vector>
|
||
#include <algorithm>
|
||
#include <unordered_map>
|
||
#include <mutex>
|
||
#include "SimpleQueue.h"
|
||
|
||
typedef struct COMMUNICATION_DATA
|
||
{
|
||
/// 需扩展
|
||
char strSource[20];
|
||
char byteArray[1024];///数据
|
||
char strExtra[50];
|
||
COMMUNICATION_DATA()
|
||
{
|
||
strSource[0] = '\0';
|
||
byteArray[0] = '\0';
|
||
strExtra[0] = '\0';
|
||
}
|
||
} SimpleData, *pSimpleData;
|
||
|
||
class RouterTable;
|
||
class CCommonication;
|
||
class CommunicationManager : public std::enable_shared_from_this<CommunicationManager>
|
||
{
|
||
public:
|
||
CommunicationManager();
|
||
~CommunicationManager();
|
||
CommunicationManager(const CommunicationManager& other) = delete;
|
||
const CommunicationManager& operator=(const CommunicationManager& other) = delete;
|
||
public:
|
||
static CommunicationManager* Instance();
|
||
|
||
void Initialize(const std::string& config);
|
||
|
||
bool Start();
|
||
|
||
bool Stop();
|
||
|
||
// 程序发送命令唯一接口 (json)接口需变动
|
||
void PushSendData(const SimpleData& stSimpleData);
|
||
|
||
// 程序内部获取数据唯一接口 (json)接口需变动
|
||
const SimpleData& GetRecvData();
|
||
protected:
|
||
void initCommunication(const std::string& strName);
|
||
/*
|
||
/// \brief onCallBackMessage
|
||
/// \param source 接收通信名称(MQTT CAN TCP UDP 等实例)
|
||
/// \param moudle 发送模块名称(本机模块、制冷红外模块、非制冷红外模块、可见光模块......)
|
||
/// \param pData 数据
|
||
*/
|
||
static void __stdcall onCallBackMessage(const char* source, const char* extra, unsigned char* stData,
|
||
int nLen, void* pUser/*const std::string& source, const std::string& moudle, char* pData*/);
|
||
///
|
||
/// \brief onPushReciveData 处理接收的函数 将数据放置在队列中
|
||
/// \param source
|
||
/// \param stData
|
||
/// \param nLen
|
||
///
|
||
void onPushReciveData(const char* source, const char* extra, unsigned char* stData, int nLen);
|
||
|
||
///
|
||
/// \brief doDealWithSendData //在线程中间处理发送数据(须在Transform里面协议需转换一下)
|
||
/// \param stSimpleData
|
||
///
|
||
void doDealWithSendData(const SimpleData& stSimpleData);
|
||
|
||
void doDealWithRouterTableSendData(const SimpleData& stSimpleData);
|
||
///
|
||
/// \brief doDealWithReciveData //在线程中间处理接收数据(须在Transform里面协议需转换一下)
|
||
/// \param stSimpleData
|
||
///
|
||
void doDealWithReciveData(const SimpleData& stSimpleData);
|
||
protected:
|
||
void ThreadFunLoop();
|
||
typedef void (CommunicationManager::*ThreadRunFunPtr)();
|
||
static void ThreadEntry(ThreadRunFunPtr pRunFun, void* pOwner);
|
||
private:
|
||
|
||
bool m_bSetup;
|
||
SimpleQueue<SimpleData> m_DataRecvQueue; //数据接收处理队列
|
||
SimpleQueue<SimpleData> m_DataSendQueue;
|
||
std::recursive_mutex m_mRecursive;
|
||
/// 通信唯一ID名称 通信实例
|
||
std::unordered_map<std::string, CCommonication*> m_mMapDatas;
|
||
bool m_bThreadRunningLoop;
|
||
std::thread* m_pFutureThreadRunLoop;
|
||
};
|
||
|
||
#endif // CommunicationManager_H
|