99 lines
4.8 KiB
C
99 lines
4.8 KiB
C
|
|
/**
|
|||
|
|
@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;
|
|||
|
|
}
|