AnyServerDoc.cpp
上传用户:wpp2016
上传日期:2010-02-01
资源大小:1250k
文件大小:5k
源码类别:

Telnet服务器

开发平台:

Visual C++

  1. // AnyServerDoc.cpp : implementation of the CAnyServerDoc class
  2. //
  3. #include "stdafx.h"
  4. #include "AnyServer.h"
  5. #include "ChatSock.h"
  6. #include "ChatLsnSock.h"
  7. #include "AnyServerDoc.h"
  8. #include "ChatClientView.h"
  9. #include "ChatView.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CAnyServerDoc
  17. IMPLEMENT_DYNCREATE(CAnyServerDoc, CDocument)
  18. BEGIN_MESSAGE_MAP(CAnyServerDoc, CDocument)
  19. //{{AFX_MSG_MAP(CAnyServerDoc)
  20. // NOTE - the ClassWizard will add and remove mapping macros here.
  21. //    DO NOT EDIT what you see in these blocks of generated code!
  22. //}}AFX_MSG_MAP
  23. END_MESSAGE_MAP()
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CAnyServerDoc construction/destruction
  26. CAnyServerDoc::CAnyServerDoc()
  27. {
  28. // TODO: add one-time construction code here
  29. g_pchatListen=NULL;
  30. m_pConnect=NULL;
  31. m_Client.Empty();
  32. m_Server.Empty();
  33. }
  34. CAnyServerDoc::~CAnyServerDoc()
  35. {
  36. }
  37. BOOL CAnyServerDoc::OnNewDocument()
  38. {
  39. if (!CDocument::OnNewDocument())
  40. return FALSE;
  41. // TODO: add reinitialization code here
  42. // (SDI documents will reuse this document)
  43. SetTitle("万能服务");
  44. POSITION pos = GetFirstViewPosition();  
  45. while (pos != NULL)   
  46. {
  47. CView* pView = GetNextView(pos);    
  48. if (pView->IsKindOf(RUNTIME_CLASS(CEditView)))
  49. {
  50. pView->EnableWindow(FALSE);
  51. }
  52. }
  53. return TRUE;
  54. }
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CAnyServerDoc serialization
  57. void CAnyServerDoc::Serialize(CArchive& ar)
  58. {
  59. if (ar.IsStoring())
  60. {
  61. }
  62. else
  63. {
  64. // TODO: add loading code here
  65. }
  66. POSITION pos = GetFirstViewPosition();  
  67. while (pos != NULL)   
  68. {
  69. CView* pView = GetNextView(pos);    
  70. if (pView->IsKindOf(RUNTIME_CLASS(CEditView)))
  71. ((CEditView*)pView)->SerializeRaw(ar);
  72. }   
  73. }
  74. /////////////////////////////////////////////////////////////////////////////
  75. // CAnyServerDoc diagnostics
  76. #ifdef _DEBUG
  77. void CAnyServerDoc::AssertValid() const
  78. {
  79. CDocument::AssertValid();
  80. }
  81. void CAnyServerDoc::Dump(CDumpContext& dc) const
  82. {
  83. CDocument::Dump(dc);
  84. }
  85. #endif //_DEBUG
  86. /////////////////////////////////////////////////////////////////////////////
  87. // CAnyServerDoc commands
  88. BOOL CAnyServerDoc::SaveModified() 
  89. {
  90. // TODO: Add your specialized code here and/or call the base class
  91. BOOL bModified=IsModified();
  92. if (bModified)
  93. {
  94. if (AfxMessageBox("保存对话纪录?",MB_YESNO)==IDYES)
  95. {
  96. CFileDialog DlgSaveFile(FALSE,"TXT",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,".TXT");
  97. if (DlgSaveFile.DoModal()==IDOK)
  98. {
  99. CString szFileName=DlgSaveFile.GetPathName();
  100. try
  101. {
  102. CFile SaveMsg;
  103. CFileException*pError=new CFileException;
  104. SaveMsg.Open(szFileName,CFile::modeWrite|CFile::typeBinary|CFile::modeCreate,pError);
  105. CArchive ar(&SaveMsg,CArchive::store);
  106. Serialize(ar);
  107. ar.Close();
  108. SaveMsg.Close();
  109. }
  110. catch(CFileException* pError)
  111. {
  112. AfxMessageBox("File Operation Error!");
  113. pError->Delete();
  114. return 0;
  115. }
  116. }
  117. SetModifiedFlag(FALSE);
  118. }
  119. }
  120. return TRUE;
  121. }
  122. void CAnyServerDoc::ProcessPendingAccept()
  123. {
  124. m_pConnect=new CChatSock(this);
  125. if (!(g_pchatListen->Accept(*m_pConnect)))
  126. {
  127. AfxMessageBox("Chat Accept Error!");
  128. delete m_pConnect;
  129. m_pConnect=NULL;
  130. }
  131. else
  132. {
  133. m_pConnect->init();
  134. }
  135. POSITION pos = GetFirstViewPosition();  
  136. while (pos != NULL)   
  137. {
  138. CView* pView = GetNextView(pos);    
  139. if (pView->IsKindOf(RUNTIME_CLASS(CFormView)))
  140. {
  141. pView->SendMessage(WM_VALID,(WPARAM)TRUE,0);
  142. }
  143. if (pView->IsKindOf(RUNTIME_CLASS(CEditView)))
  144. {
  145. pView->EnableWindow(TRUE);
  146. if (pView->IsKindOf(RUNTIME_CLASS(CChatClientView)))
  147. pView->SetFocus();
  148. }
  149. }
  150. }
  151. void CAnyServerDoc::ProcessPendingRead(CChatSock *pSocket)
  152. {
  153. TRY
  154. {
  155. *(pSocket->m_pArchiveIn)>>m_Server;
  156. while (!pSocket->m_pArchiveIn->IsBufferEmpty());
  157. }
  158. CATCH(CFileException, e)
  159. {
  160. pSocket->m_pArchiveIn->Abort();
  161. AfxMessageBox("Error! Read Message!");
  162. }
  163. END_CATCH
  164. POSITION pos = GetFirstViewPosition();  
  165. while (pos != NULL)   
  166. {
  167. CView* pView = GetNextView(pos);    
  168. if (pView->IsKindOf(RUNTIME_CLASS(CChatView)))
  169. {
  170. CChatView* pChatView=(CChatView*)pView;
  171. pChatView->GetEditCtrl().SetWindowText(m_Server);
  172. }
  173. if (pView->IsKindOf(RUNTIME_CLASS(CChatClientView)))
  174. {
  175. CChatClientView* pChatClientView=(CChatClientView*)pView;
  176. pChatClientView->SetFocus();
  177. }
  178. }
  179. }