#include "StdAfx.h" #include "SubjectAgentState.h" #include "SubjectRepository.h" #include "SubjectHost.h" CSubjectAgentState::CSubjectAgentState(CSubjectRepository* pParent) : CSubject(pParent) { } CSubjectAgentState::~CSubjectAgentState(void) { } /***************************************************************** **【函数名称】 _insertData **【函数功能】 追加订阅数据 **【参数】 Data: 要追加的数据内容 pHost: 关联的观查者对象 Type: 订阅类型 **【返回值】 ****************************************************************/ void CSubjectAgentState::_insertData( int Data, CSubjectHost* pHost, SUBJECT_TYPE Type ) { // 保存订阅的数据 pHost->addAgentId(Data); // 提取被订阅座席的状态到发送到当前观查者 EventSubject info; memset(&info, 0, sizeof(EventSubject)); info.SubData1 = Data; info.SubData2 = m_pParent->getAgentAssoExten(Data); info.nEventType = Type; sprintf_s(info.szData, EVENT_SUBJECT_BUF_LEN, "%d", m_pParent->getAgentState(Data)); _dispatchEvent(&info, pHost->id()); } /***************************************************************** **【函数名称】 _deleteData **【函数功能】 移除订阅数据 **【参数】 Data: 要移除的数据内容 pHost: 关联的观查者对象 **【返回值】 ****************************************************************/ void CSubjectAgentState::_deleteData( int Data, CSubjectHost* pHost ) { // 删除订阅数据 pHost->delAgentId(Data); } /***************************************************************** **【函数名称】 _isHostEvent **【函数功能】 当前事件是否属于指定的观查者 **【参数】 pEvent: 事件内容 pHost: 关联的观查者对象 **【返回值】 ****************************************************************/ BOOL CSubjectAgentState::_isHostEvent( EventSubject* pEvent, CSubjectHost* pHost ) { // 当前事件是否当前观查者定阅的内容 return pHost->isAgentIdCared(pEvent->SubData1); } /***************************************************************** **【函数名称】 incodeEvent **【函数功能】 打包通知事件内容 **【参数】 SubData1 订阅数据1 SubData2 订阅数据2 Type: 事件类型 Data: 附加信息 **【返回值】 当前事件是否需要发送 ****************************************************************/ BOOL CSubjectAgentState::incodeEvent( UINT SubData1, UINT SubData2, SUBJECT_TYPE Type, int Data, EventSubject* pEvent ) { if(m_HostList.IsEmpty()) return FALSE; memset(pEvent, 0, sizeof(EventSubject)); pEvent->SubData1 = SubData1; pEvent->SubData2 = SubData2; pEvent->nEventType = Type; sprintf_s(pEvent->szData, EVENT_SUBJECT_BUF_LEN, "%d", Data); return TRUE; }