#include "StdAfx.h" #include "SubjectPhoneState.h" #include "SubjectRepository.h" #include "SubjectHost.h" CSubjectPhoneState::CSubjectPhoneState(CSubjectRepository* pParent) : CSubject(pParent) { } CSubjectPhoneState::~CSubjectPhoneState(void) { } /***************************************************************** **【函数名称】 _insertData **【函数功能】 追加订阅数据 **【参数】 Data: 要追加的数据内容 pHost: 关联的观查者对象 Type: 订阅类型 **【返回值】 ****************************************************************/ void CSubjectPhoneState::_insertData( int Data, CSubjectHost* pHost, SUBJECT_TYPE Type ) { // 保存订阅的数据 pHost->addAgentId2ExtNo(Data); // 提取被订阅分机的状态到发送到当前观查者 int Exten = m_pParent->getAgentAssoExten(Data); if(Exten != 0) // 如果分机已签入 { EventSubject info; memset(&info, 0, sizeof(EventSubject)); info.SubData1 = Data; info.SubData2 = Exten; info.nEventType = Type; sprintf_s(info.szData, EVENT_SUBJECT_BUF_LEN, "%d", m_pParent->getAgentAssoExtState(Data)); _dispatchEvent(&info, pHost->id()); } // end if } /***************************************************************** **【函数名称】 _deleteData **【函数功能】 移除订阅数据 **【参数】 Data: 要移除的数据内容 pHost: 关联的观查者对象 **【返回值】 ****************************************************************/ void CSubjectPhoneState::_deleteData( int Data, CSubjectHost* pHost ) { // 删除订阅数据 pHost->delAgentId2ExtNo(Data); } /***************************************************************** **【函数名称】 _isHostEvent **【函数功能】 当前事件是否属于指定的观查者 **【参数】 pEvent: 事件内容 pHost: 关联的观查者对象 **【返回值】 ****************************************************************/ BOOL CSubjectPhoneState::_isHostEvent( EventSubject* pEvent, CSubjectHost* pHost ) { // 当前事件是否当前观查者定阅的内容 return pHost->isAgentId2ExtNoCared(pEvent->SubData1); } /***************************************************************** **【函数名称】 incodeEvent **【函数功能】 打包通知事件内容 **【参数】 SubData1 订阅数据1 SubData2 订阅数据2 Type: 事件类型 Data: 附加信息 **【返回值】 当前事件是否需要发送 ****************************************************************/ BOOL CSubjectPhoneState::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; }