MainFrm.cpp
上传用户:deligs
上传日期:2007-01-08
资源大小:43k
文件大小:8k
源码类别:

网络编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "MainFrm.h"
  5. #include "MyMonitor.h"
  6. #include "Splash.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. #define LOG(x) { if((m_LogFile.m_uLogLevel) > 0) m_LogFile.WriteLog(m_csModuleName+x); }
  13. #define INFO(x) { if((m_LogFile.m_uLogLevel) > 1) m_LogFile.WriteLog(m_csModuleName+x); }
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CMainFrame
  16. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  17. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  18. // When register to USHA successful
  19. ON_MESSAGE(WM_MYUDP_CALLBACK, TreatSocketThreadMessage)
  20. //{{AFX_MSG_MAP(CMainFrame)
  21. ON_WM_CREATE()
  22. ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  23. ON_WM_TIMER()
  24. ON_WM_CLOSE()
  25. ON_WM_ENDSESSION()
  26. //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CMainFrame construction/destruction
  30. CMainFrame::CMainFrame()
  31. {
  32. // TODO: add member initialization code here
  33. m_csModuleName = LOG_STR_MAIN_NAME;
  34. // Set Log File Path
  35. m_LogFile.CreateLogPath(_T(DEFAULT_LOG_PATH));
  36. m_LogFile.m_uLogLevel = LOG_LEVEL;// record both LOG and INFO
  37. LOG("I Start Here");
  38. // Show message boxes
  39. m_bNotify = TRUE;
  40. }
  41. CMainFrame::~CMainFrame()
  42. {
  43. }
  44. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  45. {
  46. if( !CFrameWnd::PreCreateWindow(cs) )
  47. return FALSE;
  48. // TODO: Modify the Window class or styles here by modifying
  49. //  the CREATESTRUCT cs
  50. return TRUE;
  51. }
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CMainFrame diagnostics
  54. #ifdef _DEBUG
  55. void CMainFrame::AssertValid() const
  56. {
  57. CFrameWnd::AssertValid();
  58. }
  59. void CMainFrame::Dump(CDumpContext& dc) const
  60. {
  61. CFrameWnd::Dump(dc);
  62. }
  63. #endif //_DEBUG
  64. /////////////////////////////////////////////////////////////////////////////
  65. // CMainFrame functions
  66. void CMainFrame::MyInfoBoxEx(CString strInfo, BOOL* pbMsgShowing)
  67. {
  68. // ignore suspend mode
  69. MessageInfo MsgInfo;
  70. MsgInfo.hwndShowMsg = NULL;
  71. //MsgInfo.hwndShowMsg = m_hWnd;
  72. MsgInfo.pbMsgShowing = pbMsgShowing;
  73. MsgInfo.strMsgText = strInfo;
  74. MsgInfo.strMsgTitle = "UDP test MessageBox";
  75. MsgInfo.uMsgStyle = MB_ICONINFORMATION | MB_TOPMOST | MB_SETFOREGROUND;
  76. // Initialize event to avoid race between message threads
  77. // auto reset, initially reset
  78. MsgInfo.hEvent_GetParametersOK = CreateEvent(NULL, FALSE, FALSE, NULL);
  79. AfxBeginThread(ThreadMessageBox, &MsgInfo);
  80. // Give this thread time to transfer parameters to local MsgInfo
  81. // wait for GetParametersOK signal of this thread
  82. WaitForSingleObject(MsgInfo.hEvent_GetParametersOK, INFINITE);
  83. }
  84. void CMainFrame::MyInfoBox(CString strInfo, BOOL* pbMsgShowing)
  85. {
  86. // if in suspend mode, don't show message
  87. if(!m_bNotify) return;
  88. MessageInfo MsgInfo;
  89. MsgInfo.hwndShowMsg = NULL;
  90. //MsgInfo.hwndShowMsg = m_hWnd;
  91. MsgInfo.pbMsgShowing = pbMsgShowing;
  92. MsgInfo.strMsgText = strInfo;
  93. MsgInfo.strMsgTitle = "UDP test MessageBox";
  94. MsgInfo.uMsgStyle = MB_ICONINFORMATION | MB_TOPMOST | MB_SETFOREGROUND;
  95. // Initialize event to avoid race between message threads
  96. // auto reset, initially reset
  97. MsgInfo.hEvent_GetParametersOK = CreateEvent(NULL, FALSE, FALSE, NULL);
  98. AfxBeginThread(ThreadMessageBox, &MsgInfo);
  99. // Give this thread time to transfer parameters to local MsgInfo
  100. // wait for GetParametersOK signal of this thread
  101. WaitForSingleObject(MsgInfo.hEvent_GetParametersOK, INFINITE);
  102. }
  103. CString CMainFrame::FormatString(DWORD dwState, CString strAddress)
  104. {
  105. CString _szDesc;
  106. _szDesc = "Some info to display...";
  107. return _szDesc;
  108. }
  109. /***********************************************************
  110.  *
  111.  * Event handlers for SocketThread.
  112.  *
  113.  ***********************************************************/
  114. void CMainFrame::OnEvtConnected(WPARAM wParam, LPARAM lParam)
  115. {
  116. if(((CMyUdpInfo*)lParam)->m_dwMyUdpState & MY_UDP_STATUS_CONNECTED) return;
  117. LOG("UDP Connected - " + ((CMyUdpInfo*)lParam)->m_csAddress);
  118. ((CMyUdpInfo*)lParam)->m_dwMyUdpState |= MY_UDP_STATUS_CONNECTED;
  119. MyInfoBox(FormatString(MY_UDP_STATUS_CONNECTED,((CMyUdpInfo*)lParam)->m_csAddress), 
  120. &(((CMyUdpInfo*)lParam)->m_baMessageShowing[2]));
  121. }
  122. LRESULT CMainFrame::TreatSocketThreadMessage(WPARAM wParam, LPARAM lParam)
  123. {
  124. //INFO("SocketThread Message in.");
  125. switch (LOWORD(wParam))
  126. {
  127. case EVENT_UDP_CONNECTED :
  128. OnEvtConnected(wParam,lParam); 
  129. break;
  130. default :
  131. LOG("Unknown SocketThread Message.");
  132. break;
  133. }
  134. return 0;
  135. }
  136. /////////////////////////////////////////////////////////////////////////////
  137. // CMainFrame message handlers
  138. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  139. {
  140. // let the view have first crack at the command
  141. if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  142. return TRUE;
  143. // otherwise, do default handling
  144. return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  145. }
  146. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  147. {
  148. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  149. return -1;
  150. // TODO: Add your specialized creation code here
  151. // For SystemTray Icon
  152.     HICON hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));  // Icon to use
  153. if (!m_TrayIcon.Create(
  154.                         NULL,                            // Let icon deal with its own messages
  155.                         WM_ICON_NOTIFY,                  // Icon notify message to use
  156.                         _T("This is a Tray Icon - Right click on me!"),  // tooltip
  157.                         hIcon,
  158.                         IDR_POPUP_MENU,                  // ID of tray icon popup menu
  159.                         FALSE,
  160.                         _T("Here's a cool new Win2K balloon!"), // balloon tip
  161.                         _T("Look at me!"),               // balloon title
  162.                         NIIF_WARNING,                    // balloon icon
  163.                         20 ))                            // balloon timeout
  164.     {
  165. return -1;
  166.     }
  167. // CG: The following line was added by the Splash Screen component. CSplashWnd::ShowSplashScreen(this);
  168. return 0;
  169. }
  170. int CMainFrame::BeginMyUdpThread(CMyUdpInfo* pMyUdpInfo)
  171. {
  172. // Set the info of a MyUdp thread and start it
  173. pMyUdpInfo->m_hwndNotify = m_hWnd;
  174. pMyUdpInfo->m_pLogFile = &m_LogFile;
  175. pMyUdpInfo->m_csClientName = DEFAULT_CLIENTNAME;
  176. pMyUdpInfo->m_dwMyUdpState = 0;
  177. pMyUdpInfo->m_csAddress = DEFAULT_IP;
  178. ResetEvent(pMyUdpInfo->m_hEvent_GetParametersDone);
  179. ResetEvent(pMyUdpInfo->m_hEvent_Kill);
  180. SetEvent(pMyUdpInfo->m_hEvent_Killed);
  181. AfxBeginThread(MyUdpThreadProc, pMyUdpInfo);
  182. // Give this thread time to transfer parameters to local variable
  183. // wait for GetParametersOK signal of this thread
  184. WaitForSingleObject(pMyUdpInfo->m_hEvent_GetParametersDone, INFINITE);
  185. return 0;
  186. }
  187. void CMainFrame::OnTimer(UINT nIDEvent)
  188. {
  189. // TODO: Add your message handler code here and/or call default
  190. switch (nIDEvent)
  191. {
  192. case TIMER_ID_MAINFRAME :
  193. KillTimer(TIMER_ID_MAINFRAME);
  194. break;
  195. default :
  196. break;
  197. }
  198. // Splash screen has ended
  199. // start communication now
  200. }
  201. // App command to run the About dialog
  202. void CMainFrame::OnAppAbout()
  203. {
  204. // TODO: Add your command handler code here
  205. static BOOL bShowing;
  206. if(bShowing) return;
  207. bShowing = TRUE;
  208. MyInfoBoxEx(ABOUT_VERSION, &bShowing);
  209. bShowing = FALSE;
  210. }
  211. void CMainFrame::OnClose() 
  212. {
  213. // TODO: Add your message handler code here and/or call default
  214. //Kill all the threads
  215. for(int i=0;i<UDP_THREAD_NUMBER;i++)
  216. {
  217. SetEvent(m_MyUdpArray[i].m_hEvent_Kill);
  218. }
  219. for(i=0;i<UDP_THREAD_NUMBER;i++)
  220. {
  221. WaitForSingleObject(m_MyUdpArray[i].m_hEvent_Killed, INFINITE);
  222. }
  223. CFrameWnd::OnClose();
  224. }
  225. void CMainFrame::OnEndSession(BOOL bEnding) 
  226. {
  227. CFrameWnd::OnEndSession(bEnding);
  228. // TODO: Add your message handler code here
  229. if(bEnding)
  230. {
  231. PostMessage(WM_CLOSE, 0, 0);
  232. }
  233. }