中间件底层,websocket

ViewMgr.cpp 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. #include "StdAfx.h"
  2. #include "ViewMgr.h"
  3. #include "resource.h"
  4. #include "DisplayWnd.h"
  5. #include "Config.h"
  6. #include "MsgCenter.h"
  7. #include "ViewExten.h"
  8. #include "ViewTrunk.h"
  9. #include "ViewVoip.h"
  10. #include "ViewIvr.h"
  11. #include "ViewFax.h"
  12. SINGLETON_IMPLEMENT(CViewMgr)
  13. CViewMgr::CViewMgr(void)
  14. {
  15. }
  16. CViewMgr::~CViewMgr(void)
  17. {
  18. __free();
  19. }
  20. /*****************************************************************
  21. **【函数名称】 __free
  22. **【函数功能】 释放资源
  23. **【参数】
  24. **【返回值】
  25. ****************************************************************/
  26. void CViewMgr::__free(void)
  27. {
  28. UINT Key = 0;
  29. CViewResBase *pView = NULL;
  30. POSITION pos = m_ViewMap.GetStartPosition();
  31. while (pos != NULL)
  32. {
  33. m_ViewMap.GetNextAssoc(pos, Key, pView);
  34. if (pView != NULL)
  35. delete pView;
  36. } // end while
  37. m_ViewMap.RemoveAll();
  38. // 2022-09-28 日志哪里开始关闭
  39. ILogger::getInstance().close();
  40. }
  41. /*****************************************************************
  42. **【函数名称】 __showResView
  43. **【函数功能】 显示资源视图
  44. **【参数】
  45. **【返回值】
  46. ****************************************************************/
  47. void CViewMgr::__showResView(CViewResBase* pView)
  48. {
  49. if (m_ViewMap.IsEmpty())
  50. return;
  51. ViewMap::CPair* pPair = m_ViewMap.PGetFirstAssoc();
  52. ASSERT(pPair != NULL);
  53. pView->showTogether(pPair->value);
  54. }
  55. /*****************************************************************
  56. **【函数名称】 __procResType
  57. **【函数功能】 设备资源类型初始化函数
  58. **【参数】 Type 设备资源类型
  59. **【返回值】
  60. ****************************************************************/
  61. void CViewMgr::procResType(UINT Type)
  62. {
  63. CViewResBase* pView = NULL;
  64. UINT NameId;
  65. UINT ListId;
  66. if (m_ViewMap.Lookup(Type, pView)) // ych
  67. {
  68. return;
  69. }
  70. switch (Type)
  71. {
  72. case DEV_RES_TYPE_EXT: // 内线
  73. {
  74. pView = new CViewExten();
  75. m_ViewRes.newRes(DEV_RES_TYPE_EXT);
  76. NameId = IDS_STR_VIEW_EXT;
  77. ListId = IDC_LIST_EXT;
  78. m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_EXT, IDS_STR_VIEW_EXT);
  79. }
  80. break;
  81. case DEV_RES_TYPE_TRUNK: // 外线
  82. {
  83. pView = new CViewTrunk();
  84. m_ViewRes.newRes(DEV_RES_TYPE_TRUNK);
  85. NameId = IDS_STR_VIEW_TRUNK;
  86. ListId = IDC_LIST_TRUNK;
  87. m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_TRUNK, IDS_STR_VIEW_TRUNK);
  88. }
  89. break;
  90. case DEV_RES_TYPE_VOIP: // VoIP
  91. {
  92. pView = new CViewVoip();
  93. m_ViewRes.newRes(DEV_RES_TYPE_VOIP);
  94. NameId = IDS_STR_VIEW_VOIP;
  95. ListId = IDC_LIST_VOIP;
  96. m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_VOIP, IDS_STR_VIEW_VOIP);
  97. }
  98. break;
  99. case DEV_RES_TYPE_IVR: // IVR线路
  100. {
  101. pView = new CViewIvr();
  102. m_ViewRes.newRes(DEV_RES_TYPE_IVR);
  103. NameId = IDS_STR_VIEW_IVR;
  104. ListId = IDC_LIST_IVR;
  105. m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_IVR, IDS_STR_VIEW_IVR);
  106. }
  107. break;
  108. case DEV_RES_TYPE_FAX: // 传真
  109. {
  110. pView = new CViewFax();
  111. m_ViewRes.newRes(DEV_RES_TYPE_FAX);
  112. NameId = IDS_STR_VIEW_FAX;
  113. ListId = IDC_LIST_FAX;
  114. m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_FAX, IDS_STR_VIEW_FAX);
  115. }
  116. break;
  117. //case DEV_RES_TYPE_CONFERENCE: // 会议
  118. // {
  119. // pView = new(std::nothrow) CViewMeeting();
  120. // m_ViewRes.newRes(DEV_RES_TYPE_CONFERENCE);
  121. // NameId = IDS_STR_VIEW_MEETING;
  122. // ListId = IDC_LIST_MEETING;
  123. // m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_MEETING, IDS_STR_VIEW_MEETING);
  124. // }
  125. // break;
  126. default:
  127. break;
  128. } // end switch
  129. // 生成并存储设备资源类型节点
  130. if (pView != NULL)
  131. {
  132. pView->create(m_pWnd, NameId, ListId);
  133. __showResView(pView);
  134. m_ViewMap.SetAt(Type, pView);
  135. }
  136. }
  137. /*****************************************************************
  138. **【函数名称】 __procResDetail
  139. **【函数功能】 资源明细处理函数
  140. **【参数】 pResDetail 资源明细
  141. **【返回值】
  142. ****************************************************************/
  143. void CViewMgr::__procResDetail(EventResDetail *pResDetail)
  144. {
  145. ASSERT(pResDetail != NULL);
  146. CViewResBase* pView = NULL;
  147. if (m_ViewMap.Lookup(pResDetail->nResType, pView))
  148. {
  149. ASSERT(pView != NULL);
  150. pView->onResDetail(pResDetail);
  151. }
  152. }
  153. /*****************************************************************
  154. **【函数名称】 __procResState
  155. **【函数功能】 资源状态变化处理函数
  156. **【参数】 pResStatus 资源状态
  157. **【返回值】
  158. ****************************************************************/
  159. void CViewMgr::__procResState(EventResStatus *pResStatus)
  160. {
  161. ASSERT(pResStatus != NULL);
  162. CViewResBase* pView = NULL;
  163. if (m_ViewMap.Lookup(pResStatus->nResType, pView))
  164. {
  165. ASSERT(pView != NULL);
  166. pView->onResState(pResStatus);
  167. }
  168. }
  169. /*****************************************************************
  170. **【函数名称】 setup
  171. **【函数功能】 视图管理器创建
  172. **【参数】
  173. **【返回值】
  174. ****************************************************************/
  175. bool CViewMgr::setup(CDisplayWnd* pWnd)
  176. {
  177. ASSERT(pWnd != NULL);
  178. m_pWnd = pWnd;
  179. if (!m_ViewLog.create(pWnd))
  180. {
  181. AfxMessageBox(_T("日志视图创建失败!"));
  182. return false;
  183. }
  184. ILogger::getInstance().init(&m_ViewLog, LOG_DEV_CTI, CConfig::GetInstance().logFilePath());
  185. ILogger::getInstance().start();
  186. if (!m_ViewRes.create(pWnd))
  187. {
  188. AfxMessageBox(_T("设备资源视图创建失败!"));
  189. return false;
  190. }
  191. CMsgCenter& MsgCenter = CMsgCenter::GetInstance();
  192. MsgCenter.regist(DEV_EVENT_RES_TYPE, this);
  193. MsgCenter.regist(DEV_EVENT_RES_DETAIL, this);
  194. MsgCenter.regist(DEV_EVENT_RES_STATUS, this);
  195. return true;
  196. }
  197. /*****************************************************************
  198. **【函数名称】 showResView
  199. **【函数功能】 显示指定资源视图
  200. **【参数】
  201. **【返回值】
  202. ****************************************************************/
  203. bool CViewMgr::showResView(UINT ResType)
  204. {
  205. CViewResBase* pView = NULL;
  206. if (m_ViewMap.Lookup(ResType, pView))
  207. {
  208. ASSERT(pView != NULL);
  209. pView->show();
  210. return true;
  211. }
  212. else
  213. return false;
  214. }
  215. /*****************************************************************
  216. **【函数名称】 onMessage
  217. **【函数功能】 消息事件处理函数
  218. **【参数】 MsgType: 消息事件类型
  219. lpContent: 消息内容
  220. **【返回值】
  221. ****************************************************************/
  222. void CViewMgr::onMessage(UINT MsgType, const PARAM lpContent)
  223. {
  224. if (lpContent == NULL) return;
  225. switch (MsgType)
  226. {
  227. case DEV_EVENT_RES_TYPE: // 设备资源类型
  228. {
  229. EventResType* pResType = (EventResType*)lpContent;
  230. #ifdef _USE_EHANGCOM
  231. AfxGetMainWnd()->PostMessage(WM_CORE_EVENT, CORE_EVENT_DEV_RES_TYPE, pResType->nResType);
  232. #else
  233. AfxGetMainWnd()->SendMessage(WM_CORE_EVENT, CORE_EVENT_DEV_RES_TYPE, pResType->nResType);
  234. #endif
  235. }
  236. break;
  237. case DEV_EVENT_RES_DETAIL: // 设备资源明细
  238. {
  239. EventResDetail* pResDetail = (EventResDetail*)lpContent;
  240. __procResDetail(pResDetail);
  241. }
  242. break;
  243. case DEV_EVENT_RES_STATUS: // 设备资源状态变化
  244. {
  245. EventResStatus* pResStatus = (EventResStatus*)lpContent;
  246. __procResState(pResStatus);
  247. }
  248. break;
  249. default:
  250. break;
  251. }
  252. }