99 lines
4.8 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万点不丢失事件)
namespace kbd_service
{
class CPacketQueue
{
public:
CPacketQueue();
virtual ~CPacketQueue();
private://变化数据
boost::mutex m_objMutexChgAi; //锁
boost::mutex m_objMutexChgDi; //锁
boost::mutex m_objMutexChgMi; //锁
boost::mutex m_objMutexChgPi; //锁
std::deque <kbd_idlfile::SFesChangeAiPkg> m_deqFesChgAiPkg;
std::deque <kbd_idlfile::SFesChangeDiPkg> m_deqFesChgDiPkg;
std::deque <kbd_idlfile::SFesChangeMiPkg> m_deqFesChgMiPkg;
std::deque <kbd_idlfile::SFesChangePiPkg> m_deqFesChgPiPkg;
private://全数据;保存最新全数据
boost::mutex m_objMutexUpdAi; //锁
boost::mutex m_objMutexUpdDi; //锁
boost::mutex m_objMutexUpdMi; //锁
boost::mutex m_objMutexUpdPi; //锁
std::deque <kbd_idlfile::SFesUpdateAiPkg> m_deqFesUpdAiPkg;
std::deque <kbd_idlfile::SFesUpdateDiPkg> m_deqFesUpdDiPkg;
std::deque <kbd_idlfile::SFesUpdateMiPkg> m_deqFesUpdMiPkg;
std::deque <kbd_idlfile::SFesUpdatePiPkg> m_deqFesUpdPiPkg;
private://操作+事件
boost::mutex m_objMutexCalSet; //锁
boost::mutex m_objMutexManSet; //锁
boost::mutex m_objMutexSoeEvt; //锁
std::deque <kbd_idlfile::SFesSoeEventPkg> m_deqFesSoeEventPkg;
std::map<int,std::deque <kbd_idlfile::SOptSetDataPkg>> m_mapOptCalSetPkg; //计算设置
std::map<int,std::deque <kbd_idlfile::SOptSetDataPkg>> m_mapOptManSetPkg; //人工设置
public:
/**
@brief
*/
void addFesChangeAnaPkg(const kbd_idlfile::SFesChangeAiPkg &objFesChgAiPkg);
void addFesChangeDigPkg(const kbd_idlfile::SFesChangeDiPkg &objFesChgDiPkg);
void addFesChangeMixPkg(const kbd_idlfile::SFesChangeMiPkg &objFesChgMiPkg);
void addFesChangeAccPkg(const kbd_idlfile::SFesChangePiPkg &objFesChgPiPkg);
void addFesUpdateAnaPkg(const kbd_idlfile::SFesUpdateAiPkg &objFesUpdAiPkg);
void addFesUpdateDigPkg(const kbd_idlfile::SFesUpdateDiPkg &objFesUpdDiPkg);
void addFesUpdateMixPkg(const kbd_idlfile::SFesUpdateMiPkg &objFesUpdMiPkg);
void addFesUpdateAccPkg(const kbd_idlfile::SFesUpdatePiPkg &objFesUpdPiPkg);
/**
@brief
*/
bool getFesChangeAnaPkg(std::deque <kbd_idlfile::SFesChangeAiPkg> &queFesChgAiPkg);
bool getFesChangeDigPkg(std::deque <kbd_idlfile::SFesChangeDiPkg> &queFesChgDiPkg);
bool getFesChangeMixPkg(std::deque <kbd_idlfile::SFesChangeMiPkg> &queFesChgMiPkg);
bool getFesChangeAccPkg(std::deque <kbd_idlfile::SFesChangePiPkg> &queFesChgPiPkg);
bool getFesUpdateAnaPkg(kbd_idlfile::SFesUpdateAiPkg &objFesUpdAiPkg);
bool getFesUpdateDigPkg(kbd_idlfile::SFesUpdateDiPkg &objFesUpdDiPkg);
bool getFesUpdateMixPkg(kbd_idlfile::SFesUpdateMiPkg &objFesUpdMiPkg);
bool getFesUpdateAccPkg(kbd_idlfile::SFesUpdatePiPkg &objFesUpdPiPkg);
/**
@brief
*/
void addOptCalSetPkg(const kbd_idlfile::SOptSetDataPkg &objOptCalSetPkg); //计算设置
void addOptManSetPkg(const kbd_idlfile::SOptSetDataPkg &objOptManSetPkg); //人工设置
bool getOptCalSetPkg(const int nPointType,std::deque <kbd_idlfile::SOptSetDataPkg> &queOptCalSetPkg); //计算设置
bool getOptManSetPkg(const int nPointType,std::deque <kbd_idlfile::SOptSetDataPkg> &queOptManSetPkg); //人工设置
/**
@brief
*/
void addFesSoeEventPkg(const kbd_idlfile::SFesSoeEventPkg &objFesSoeEventPkg);
bool getFesSoeEventPkg(std::deque <kbd_idlfile::SFesSoeEventPkg> &queFesSoeEventPkg);
};
typedef boost::shared_ptr<CPacketQueue> CPacketQueuePtr;
}