NetMeetingClientDlg.cpp
上传用户:kelland5
上传日期:2016-01-23
资源大小:52k
文件大小:5k
源码类别:

Telnet客户端

开发平台:

Visual C++

  1. //文件名: NetMeetingClientDlg.cpp :  CNetMeetingClientDlg 类的实现文件
  2. #include "stdafx.h"
  3. #include "NetMeetingClient.h"
  4. #include "NetMeetingClientDlg.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #endif
  8. // CNetMeetingClientDlg 对话框
  9. CNetMeetingClientDlg::CNetMeetingClientDlg(CWnd* pParent /*=NULL*/)
  10. : CDialog(CNetMeetingClientDlg::IDD, pParent)
  11. , m_bAutoMeeting(FALSE)
  12. , m_EName(_T(""))
  13. , m_pFile(NULL)
  14. , m_pSocket(NULL)
  15. , m_pArchiveIn(NULL)
  16. , m_pArchiveOut(NULL)
  17. , m_strMeetingCode(_T(""))
  18. , m_strEServerName(_T(""))
  19. {
  20. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  21. }
  22. void CNetMeetingClientDlg::DoDataExchange(CDataExchange* pDX)
  23. {
  24. CDialog::DoDataExchange(pDX);
  25. DDX_Control(pDX, IDC_LISTCONTENT, m_ListContent);
  26. DDX_Control(pDX, IDC_ECONTENT, m_EContent);
  27. DDX_Text(pDX, IDC_EMEETINGCODE, m_strMeetingCode);
  28. DDX_Text(pDX, IDC_ESERVERNAME, m_strEServerName);
  29. DDX_Text(pDX,IDC_ENAME,m_EName);
  30. }
  31. BEGIN_MESSAGE_MAP(CNetMeetingClientDlg, CDialog)
  32. ON_WM_PAINT()
  33. ON_WM_QUERYDRAGICON()
  34. //}}AFX_MSG_MAP
  35. ON_BN_CLICKED(IDC_BTNABOUT, OnBnClickedBtnabout)
  36. ON_BN_CLICKED(IDC_BTNCONNECT, OnBnClickedBtnconnect)
  37. ON_BN_CLICKED(IDC_BTNSENDMINE, OnBnClickedBtnsendmine)
  38. ON_BN_CLICKED(IDC_BTNCLOSE, OnBnClickedBtnclose)
  39. END_MESSAGE_MAP()
  40. // CNetMeetingClientDlg 消息处理程序
  41. BOOL CNetMeetingClientDlg::OnInitDialog()
  42. {
  43. CDialog::OnInitDialog();
  44. m_strMeetingCode="700";
  45. DWORD iSize=256;
  46. char ComName[256+1];
  47. memset(ComName,0,sizeof(ComName));
  48. GetComputerName(ComName,&iSize);
  49. m_strEServerName.Format("%s",ComName);
  50. UpdateData(FALSE);
  51. return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
  52. }
  53. void CNetMeetingClientDlg::OnPaint() 
  54. {
  55. if (IsIconic())
  56. {
  57. CPaintDC dc(this); // 用于绘制的设备上下文
  58. }
  59. else
  60. {
  61. CDialog::OnPaint();
  62. }
  63. }
  64. HCURSOR CNetMeetingClientDlg::OnQueryDragIcon()
  65. {
  66. return static_cast<HCURSOR>(m_hIcon);
  67. }
  68. void CNetMeetingClientDlg::OnOK(void)
  69. {
  70. TRACE("Entering CNetMeetingClientDlg::OnOK()n");
  71. }
  72. void CNetMeetingClientDlg::OnCancel(void)
  73. {
  74. TRACE("Entering CNetMeetingClientDlg::OnCancel()n");
  75. }
  76. //发送消息
  77. void CNetMeetingClientDlg::SendMsg(CString& str)
  78. {
  79. if (m_pArchiveOut != NULL)
  80. {
  81. CMsg msg;
  82. msg.m_strText = m_EName + _T(": ") + str;
  83. msg.Serialize(*m_pArchiveOut);
  84. m_pArchiveOut->Flush();
  85. }
  86. }
  87. //获取消息
  88. void CNetMeetingClientDlg::ReceiveMsg(void)
  89. {
  90. CMsg msg;
  91. msg.Serialize(*m_pArchiveIn);
  92. while(!msg.m_MsgList.IsEmpty())
  93. {
  94. CString temp = msg.m_MsgList.RemoveHead();
  95. //DisplayMsg(temp);
  96. m_ListContent.AddString(temp);
  97. SetDlgItemText(IDC_STEXT,temp);
  98. }
  99. m_ListContent.SetCurSel(m_ListContent.GetCount()-1);
  100. if (msg.m_bClose)
  101. {
  102. delete m_pArchiveIn;
  103. m_pArchiveIn = NULL;
  104. delete m_pArchiveOut;
  105. m_pArchiveOut = NULL;
  106. delete m_pFile;
  107. m_pFile = NULL;
  108. delete m_pSocket;
  109. m_pSocket = NULL;
  110. }
  111. }
  112. //接收信息
  113. void CNetMeetingClientDlg::ProcessPendingRead(void)
  114. {
  115. do
  116. {
  117. ReceiveMsg();
  118. if (m_pSocket == NULL)
  119. return;
  120. }
  121. while(!m_pArchiveIn->IsBufferEmpty());
  122. }
  123. void CNetMeetingClientDlg::OnBnClickedBtnabout()
  124. {
  125. CString str="1.本程序使用前应该设置服务器网络会议室编号,并且与本程序的网络会议室编号一致.n2.罗斌于2004年1月编写!";
  126. MessageBox(str,"信息提示",MB_OK);
  127. }
  128. //连接服务器
  129. void CNetMeetingClientDlg::OnBnClickedBtnconnect()
  130. {
  131. // TODO: 在此添加控件通知处理程序代码
  132. UpdateData(TRUE);
  133. m_pSocket = new CNetMeetingSocket(this);
  134. if (!m_pSocket->Create())
  135. {
  136. delete m_pSocket;
  137. m_pSocket = NULL;
  138. MessageBox("创建连接失败","信息提示",MB_OK);
  139. return ;
  140. }
  141. if (!m_pSocket->Connect(m_strEServerName,atol(m_strMeetingCode)))
  142. {
  143. MessageBox("没有连接成功","信息提示",MB_OK);
  144. delete m_pSocket;
  145. m_pSocket = NULL;
  146. return ;
  147. }
  148. m_pFile = new CSocketFile(m_pSocket);
  149. m_pArchiveIn = new CArchive(m_pFile,CArchive::load);
  150. m_pArchiveOut = new CArchive(m_pFile,CArchive::store);
  151. CString str="进入会议室";
  152. SendMsg(str);
  153. }
  154. //向服务器发送消息
  155. void CNetMeetingClientDlg::OnBnClickedBtnsendmine()
  156. {
  157. if(m_pSocket==NULL)
  158. {
  159. MessageBox("您还没有进入会议室!","信息提示",MB_OK);
  160. return;
  161. }
  162. char  Temp[1001]="";
  163. m_EContent.GetWindowText(Temp,999);
  164. CString str="";
  165. str.Format("%s",Temp);
  166. SendMsg(str);
  167. m_EContent.SetWindowText("");
  168. }
  169. //关闭程序
  170. void CNetMeetingClientDlg::OnBnClickedBtnclose()
  171. {
  172. m_bAutoMeeting = FALSE;
  173. if ((m_pSocket != NULL) && (m_pFile != NULL) && (m_pArchiveOut != NULL))
  174. {
  175. CMsg msg;
  176. CString strTemp="离开会议室";
  177. msg.m_bClose = TRUE;
  178. msg.m_strText =m_EName + strTemp;
  179. msg.Serialize(*m_pArchiveOut);
  180. m_pArchiveOut->Flush();
  181. }
  182. delete m_pArchiveOut;
  183. m_pArchiveOut = NULL;
  184. delete m_pArchiveIn;
  185. m_pArchiveIn = NULL;
  186. delete m_pFile;
  187. m_pFile = NULL;
  188. if (m_pSocket != NULL)
  189. {
  190. BYTE Buffer[50];
  191. m_pSocket->ShutDown();
  192. while(m_pSocket->Receive(Buffer,50) > 0);
  193. }
  194. delete m_pSocket;
  195. m_pSocket = NULL;
  196. TRACE("Entering CNetMeetingClientDlg::OnOK()n");
  197. CDialog::OnOK();
  198. }