2025-03-12 11:08:50 +08:00
|
|
|
|
/**
|
|
|
|
|
|
@file MessageBuffer.h
|
|
|
|
|
|
@brief 消息缓存对了类,实现消息缓冲,提供读写接口,消息读写加锁
|
|
|
|
|
|
@author 周正龙
|
|
|
|
|
|
*/
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "boost/thread.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
#include "FesMessage.pb.h"
|
|
|
|
|
|
#include "OptDataMessage.pb.h"
|
|
|
|
|
|
#include <deque>
|
|
|
|
|
|
|
|
|
|
|
|
#define MAX_CHG_ANA_QUEUE_NUM 50 //变化数据最大队列数,如果超出,丢弃最老数据(50*1000 一秒变化数据5万,windwo 处理5秒左右,linux2秒左右)
|
|
|
|
|
|
#define MAX_CHG_DIG_QUEUE_NUM 100 //变化数据最大队列数,最多保证不丢失 15万YX点,10%变化率,30秒持续,不丢失事件(1.5*10000*30 万点的容量)
|
|
|
|
|
|
#define MAX_MAN_SET_QUEUE_NUM 500 //人工置数最大队列数(考虑对一个间隔,最多200个测点)
|
|
|
|
|
|
#define MAX_CAL_SET_QUEUE_NUM 200 //计算公式最大队列数(考虑公式不会超时1000,变化率20%)
|
|
|
|
|
|
#define MAX_UPD_QUEUE_NUM 20 //全数据最大队列数,如果超出,丢弃最老数据 (每种类型25*10000 20万点的容量)
|
|
|
|
|
|
#define MAX_EVT_QUEUE_NUM 500000//变化事件,如果超出,丢弃最老数据(考虑15万YX点,10%变化率,30秒持续,共45万点不丢失事件)
|
|
|
|
|
|
|
2025-03-12 14:17:01 +08:00
|
|
|
|
namespace iot_service
|
2025-03-12 11:08:50 +08:00
|
|
|
|
{
|
|
|
|
|
|
class CPacketQueue
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPacketQueue();
|
|
|
|
|
|
virtual ~CPacketQueue();
|
|
|
|
|
|
|
|
|
|
|
|
private://变化数据
|
|
|
|
|
|
boost::mutex m_objMutexChgAi; //锁
|
|
|
|
|
|
boost::mutex m_objMutexChgDi; //锁
|
|
|
|
|
|
boost::mutex m_objMutexChgMi; //锁
|
|
|
|
|
|
boost::mutex m_objMutexChgPi; //锁
|
2025-03-12 14:17:01 +08:00
|
|
|
|
std::deque <iot_idl::SFesChangeAiPkg> m_deqFesChgAiPkg;
|
|
|
|
|
|
std::deque <iot_idl::SFesChangeDiPkg> m_deqFesChgDiPkg;
|
|
|
|
|
|
std::deque <iot_idl::SFesChangeMiPkg> m_deqFesChgMiPkg;
|
|
|
|
|
|
std::deque <iot_idl::SFesChangePiPkg> m_deqFesChgPiPkg;
|
2025-03-12 11:08:50 +08:00
|
|
|
|
private://全数据;保存最新全数据
|
|
|
|
|
|
boost::mutex m_objMutexUpdAi; //锁
|
|
|
|
|
|
boost::mutex m_objMutexUpdDi; //锁
|
|
|
|
|
|
boost::mutex m_objMutexUpdMi; //锁
|
|
|
|
|
|
boost::mutex m_objMutexUpdPi; //锁
|
2025-03-12 14:17:01 +08:00
|
|
|
|
std::deque <iot_idl::SFesUpdateAiPkg> m_deqFesUpdAiPkg;
|
|
|
|
|
|
std::deque <iot_idl::SFesUpdateDiPkg> m_deqFesUpdDiPkg;
|
|
|
|
|
|
std::deque <iot_idl::SFesUpdateMiPkg> m_deqFesUpdMiPkg;
|
|
|
|
|
|
std::deque <iot_idl::SFesUpdatePiPkg> m_deqFesUpdPiPkg;
|
2025-03-12 11:08:50 +08:00
|
|
|
|
private://操作+事件
|
|
|
|
|
|
boost::mutex m_objMutexCalSet; //锁
|
|
|
|
|
|
boost::mutex m_objMutexManSet; //锁
|
|
|
|
|
|
boost::mutex m_objMutexSoeEvt; //锁
|
2025-03-12 14:17:01 +08:00
|
|
|
|
std::deque <iot_idl::SFesSoeEventPkg> m_deqFesSoeEventPkg;
|
|
|
|
|
|
std::map<int,std::deque <iot_idl::SOptSetDataPkg>> m_mapOptCalSetPkg; //计算设置
|
|
|
|
|
|
std::map<int,std::deque <iot_idl::SOptSetDataPkg>> m_mapOptManSetPkg; //人工设置
|
2025-03-12 11:08:50 +08:00
|
|
|
|
public:
|
|
|
|
|
|
/**
|
|
|
|
|
|
@brief 从消息接受队列得到一条消息记录
|
|
|
|
|
|
*/
|
2025-03-12 14:17:01 +08:00
|
|
|
|
void addFesChangeAnaPkg(const iot_idl::SFesChangeAiPkg &objFesChgAiPkg);
|
|
|
|
|
|
void addFesChangeDigPkg(const iot_idl::SFesChangeDiPkg &objFesChgDiPkg);
|
|
|
|
|
|
void addFesChangeMixPkg(const iot_idl::SFesChangeMiPkg &objFesChgMiPkg);
|
|
|
|
|
|
void addFesChangeAccPkg(const iot_idl::SFesChangePiPkg &objFesChgPiPkg);
|
2025-03-12 11:08:50 +08:00
|
|
|
|
|
2025-03-12 14:17:01 +08:00
|
|
|
|
void addFesUpdateAnaPkg(const iot_idl::SFesUpdateAiPkg &objFesUpdAiPkg);
|
|
|
|
|
|
void addFesUpdateDigPkg(const iot_idl::SFesUpdateDiPkg &objFesUpdDiPkg);
|
|
|
|
|
|
void addFesUpdateMixPkg(const iot_idl::SFesUpdateMiPkg &objFesUpdMiPkg);
|
|
|
|
|
|
void addFesUpdateAccPkg(const iot_idl::SFesUpdatePiPkg &objFesUpdPiPkg);
|
2025-03-12 11:08:50 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
@brief 从消息接受队列得到一条消息记录
|
|
|
|
|
|
*/
|
2025-03-12 14:17:01 +08:00
|
|
|
|
bool getFesChangeAnaPkg(std::deque <iot_idl::SFesChangeAiPkg> &queFesChgAiPkg);
|
|
|
|
|
|
bool getFesChangeDigPkg(std::deque <iot_idl::SFesChangeDiPkg> &queFesChgDiPkg);
|
|
|
|
|
|
bool getFesChangeMixPkg(std::deque <iot_idl::SFesChangeMiPkg> &queFesChgMiPkg);
|
|
|
|
|
|
bool getFesChangeAccPkg(std::deque <iot_idl::SFesChangePiPkg> &queFesChgPiPkg);
|
2025-03-12 11:08:50 +08:00
|
|
|
|
|
2025-03-12 14:17:01 +08:00
|
|
|
|
bool getFesUpdateAnaPkg(iot_idl::SFesUpdateAiPkg &objFesUpdAiPkg);
|
|
|
|
|
|
bool getFesUpdateDigPkg(iot_idl::SFesUpdateDiPkg &objFesUpdDiPkg);
|
|
|
|
|
|
bool getFesUpdateMixPkg(iot_idl::SFesUpdateMiPkg &objFesUpdMiPkg);
|
|
|
|
|
|
bool getFesUpdateAccPkg(iot_idl::SFesUpdatePiPkg &objFesUpdPiPkg);
|
2025-03-12 11:08:50 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
@brief 从消息接受队列得到一条消息记录
|
|
|
|
|
|
*/
|
2025-03-12 14:17:01 +08:00
|
|
|
|
void addOptCalSetPkg(const iot_idl::SOptSetDataPkg &objOptCalSetPkg); //计算设置
|
|
|
|
|
|
void addOptManSetPkg(const iot_idl::SOptSetDataPkg &objOptManSetPkg); //人工设置
|
2025-03-12 11:08:50 +08:00
|
|
|
|
|
2025-03-12 14:17:01 +08:00
|
|
|
|
bool getOptCalSetPkg(const int nPointType,std::deque <iot_idl::SOptSetDataPkg> &queOptCalSetPkg); //计算设置
|
|
|
|
|
|
bool getOptManSetPkg(const int nPointType,std::deque <iot_idl::SOptSetDataPkg> &queOptManSetPkg); //人工设置
|
2025-03-12 11:08:50 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
@brief 从消息接受队列得到一条消息记录
|
|
|
|
|
|
*/
|
2025-03-12 14:17:01 +08:00
|
|
|
|
void addFesSoeEventPkg(const iot_idl::SFesSoeEventPkg &objFesSoeEventPkg);
|
|
|
|
|
|
bool getFesSoeEventPkg(std::deque <iot_idl::SFesSoeEventPkg> &queFesSoeEventPkg);
|
2025-03-12 11:08:50 +08:00
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
typedef boost::shared_ptr<CPacketQueue> CPacketQueuePtr;
|
|
|
|
|
|
}
|