99 lines
4.6 KiB
C
Raw Normal View History

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;
}