#include "StdAfx.h" #include "SubjectAgentsOnSpecState.h" #include "SubjectRepository.h" #include "SubjectHost.h" CSubjectAgentsOnSpecState::CSubjectAgentsOnSpecState(CSubjectRepository* pParent) : CSubject(pParent) { } CSubjectAgentsOnSpecState::~CSubjectAgentsOnSpecState(void) { } /***************************************************************** **【函数名称】 _insertData **【函数功能】 追加订阅数据 **【参数】 Data: 要追加的数据内容 Host: 关联的观查者对象 Type: 订阅类型 **【返回值】 ****************************************************************/ void CSubjectAgentsOnSpecState::_insertData( int Data, CSubjectHost* pHost, SUBJECT_TYPE Type ) { // 保存当前列表 m_pParent->getStateSpecAgentList(Type, m_CurrentList); // 提取指定状态的座席列表发送到当前观查者 EventSubject info; memset(&info, 0, sizeof(EventSubject)); info.SubData1 = 0; info.SubData2 = 0; info.nEventType = Type; sprintf_s(info.szData, EVENT_SUBJECT_BUF_LEN, "%s", m_CurrentList); _dispatchEvent(&info, pHost->id()); } /***************************************************************** **【函数名称】 _deleteData **【函数功能】 移除订阅数据 **【参数】 Data: 要移除的数据内容 pHost: 关联的观查者对象 **【返回值】 ****************************************************************/ void CSubjectAgentsOnSpecState::_deleteData( int Data, CSubjectHost* pHost ) { } /***************************************************************** **【函数名称】 incodeEvent **【函数功能】 打包通知事件内容 **【参数】 SubData1 订阅数据1 SubData2 订阅数据2 Type: 事件类型 Data: 附加信息 **【返回值】 当前事件是否需要发送 ****************************************************************/ BOOL CSubjectAgentsOnSpecState::incodeEvent( UINT SubData1, UINT SubData2, SUBJECT_TYPE Type, int Data, EventSubject* pEvent ) { if(m_HostList.IsEmpty()) return FALSE; CString Temp; // 状态队列是否存在变化 m_pParent->getStateSpecAgentList(Type, Temp); if(Temp.CompareNoCase(m_CurrentList) == 0) return FALSE; // 队列已变化,可以通知观查者 m_CurrentList = Temp; // 保存 memset(pEvent, 0, sizeof(EventSubject)); pEvent->nEventType = Type; strcpy_s(pEvent->szData, EVENT_SUBJECT_BUF_LEN, m_CurrentList); return TRUE; }