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

Telnet服务器

开发平台:

Visual C++

  1. // AnyServerView.cpp : implementation of the CAnyServerView class
  2. //
  3. #include "stdafx.h"
  4. #include "AnyServer.h"
  5. #include "AnyServerDoc.h"
  6. #include "AnyServerView.h"
  7. #include "Thread.h"
  8. #include "Blocksock.h"
  9. #include "RemoteC.h"
  10. #include "ChatLsnSock.h"
  11. #include "ChatSock.h"
  12. #include "ChatClientView.h"
  13. #ifdef _DEBUG
  14. #define new DEBUG_NEW
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CAnyServerView
  20. IMPLEMENT_DYNCREATE(CAnyServerView, CFormView)
  21. BEGIN_MESSAGE_MAP(CAnyServerView, CFormView)
  22. //{{AFX_MSG_MAP(CAnyServerView)
  23. ON_BN_CLICKED(IDC_STARTBTN, OnStartbtn)
  24. ON_MESSAGE(WM_SOCKCOMMAND,OnSockCommand)
  25. ON_MESSAGE(WM_VALID,OnValid)
  26. ON_MESSAGE(WM_USERNAME,OnUserName)
  27. ON_MESSAGE(WM_IPADDR,OnIPAddr)
  28. ON_COMMAND(ID_STARTSERVER, OnStartserver)
  29. ON_COMMAND(ID_STOPSERVER, OnStopserver)
  30. ON_BN_CLICKED(IDC_STOPBTN, OnStopbtn)
  31. ON_UPDATE_COMMAND_UI(ID_STARTSERVER, OnUpdateStartserver)
  32. ON_UPDATE_COMMAND_UI(ID_STOPSERVER, OnUpdateStopserver)
  33. ON_BN_CLICKED(IDC_CLOSECHAT, OnClosechat)
  34. //}}AFX_MSG_MAP
  35. END_MESSAGE_MAP()
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CAnyServerView construction/destruction
  38. CAnyServerView::CAnyServerView()
  39. : CFormView(CAnyServerView::IDD)
  40. {
  41. //{{AFX_DATA_INIT(CAnyServerView)
  42. //}}AFX_DATA_INIT
  43. // TODO: add construction code here
  44. DataBuf.Empty();
  45. }
  46. CAnyServerView::~CAnyServerView()
  47. {
  48. CAnyServerDoc* pDoc=(CAnyServerDoc*)GetDocument();
  49. if (pDoc->g_pchatListen)
  50. if (pDoc->g_pchatListen->m_hSocket!=INVALID_SOCKET)
  51. {
  52. pDoc->g_pchatListen->Close();
  53. delete pDoc->g_pchatListen;
  54. pDoc->g_pchatListen=NULL;
  55. }
  56. }
  57. void CAnyServerView::DoDataExchange(CDataExchange* pDX)
  58. {
  59. CFormView::DoDataExchange(pDX);
  60. //{{AFX_DATA_MAP(CAnyServerView)
  61. DDX_Control(pDX, IDC_IPADDRESS, m_IPAddr);
  62. DDX_Control(pDX, IDC_CLOSECHAT, m_CloseChat);
  63. DDX_Control(pDX, IDC_STOPBTN, m_Stopbtn);
  64. DDX_Control(pDX, IDC_STARTBTN, m_Startbtn);
  65. //}}AFX_DATA_MAP
  66. }
  67. BOOL CAnyServerView::PreCreateWindow(CREATESTRUCT& cs)
  68. {
  69. // TODO: Modify the Window class or styles here by modifying
  70. //  the CREATESTRUCT cs
  71. return CFormView::PreCreateWindow(cs);
  72. }
  73. void CAnyServerView::OnInitialUpdate()
  74. {
  75. CFormView::OnInitialUpdate();
  76.     GetParentFrame()->RecalcLayout();
  77. ResizeParentToFit();
  78. m_CloseChat.EnableWindow(FALSE);
  79. }
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CAnyServerView diagnostics
  82. #ifdef _DEBUG
  83. void CAnyServerView::AssertValid() const
  84. {
  85. CFormView::AssertValid();
  86. }
  87. void CAnyServerView::Dump(CDumpContext& dc) const
  88. {
  89. CFormView::Dump(dc);
  90. }
  91. CAnyServerDoc* CAnyServerView::GetDocument() // non-debug version is inline
  92. {
  93. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAnyServerDoc)));
  94. return (CAnyServerDoc*)m_pDocument;
  95. }
  96. #endif //_DEBUG
  97. /////////////////////////////////////////////////////////////////////////////
  98. // CAnyServerView message handlers
  99. CBlockingSocket g_sListen;
  100. BOOL Started;
  101. void CAnyServerView::OnStartbtn() 
  102. {
  103. Started=TRUE;
  104. m_Startbtn.EnableWindow(!Started);
  105. try
  106. {
  107. CSockAddr saServer(INADDR_ANY,7700);
  108. g_sListen.Create();
  109. g_sListen.Bind(saServer);
  110. g_sListen.Listen();
  111. ((CAnyServerDoc*)GetDocument())->g_pchatListen=new CChatLsnSock((CAnyServerDoc*)GetDocument());
  112. CChatLsnSock* g_pchatListen=((CAnyServerDoc*)GetDocument())->g_pchatListen;
  113. g_pchatListen->Create(9999,SOCK_STREAM);
  114. g_pchatListen->Listen();
  115. GetDlgItem(IDC_RESPONSE)->SetWindowText("开始了服务监听!");
  116. }
  117. catch(CBlockingSocketException* e)
  118. {
  119. g_sListen.Cleanup();
  120. char error[1024];
  121. e->GetErrorMessage(error,1024);
  122. GetDlgItem(IDC_RESPONSE)->SetWindowText(error);
  123. e->Delete();
  124. SendMessage(WM_COMMAND,MAKEWPARAM(IDC_STOPBTN,0),0);
  125. }
  126. AfxBeginThread(Server,(LPVOID)this);
  127. }
  128. LRESULT CAnyServerView::OnSockCommand(WPARAM wParam,LPARAM lParam)
  129. {
  130. SCommand command=(SCommand)wParam;
  131. int nLength=(int)lParam;
  132. CRemoteC RemoteC(this);
  133. RemoteC.Command(command,DataBuf,nLength);
  134. return 0;
  135. }
  136. LRESULT CAnyServerView::OnIPAddr(WPARAM wParam, LPARAM lParam)
  137. {
  138. BOOL beAssumed=(BOOL)wParam;
  139. if (beAssumed)
  140. m_IPAddr.SetAddress(DWORD(lParam));
  141. else 
  142. m_IPAddr.SetAddress(0);
  143. UpdateData(FALSE);
  144. return 0;
  145. }
  146. LRESULT CAnyServerView::OnValid(WPARAM wParam,LPARAM lParam)
  147. {
  148. BOOL bValid=(BOOL)wParam;
  149. m_CloseChat.EnableWindow(bValid);
  150. UpdateData(FALSE);
  151. return 0;
  152. }
  153. LRESULT CAnyServerView::OnUserName(WPARAM wParam,LPARAM lParam)
  154. {
  155. BOOL beAssumed=(BOOL)wParam;
  156. if (beAssumed)
  157. {
  158. char *temp=(char*)lParam;
  159. SetDlgItemText(IDC_USEREDIT,temp);
  160. }
  161. else
  162. SetDlgItemText(IDC_USEREDIT,"");
  163. return 0;
  164. }
  165. void CAnyServerView::OnStartserver() 
  166. {
  167. CAnyServerView::OnStartbtn();
  168. }
  169. void CAnyServerView::OnStopserver() 
  170. {
  171. CAnyServerView::OnStopbtn();
  172. }
  173. extern CBlockingSocket g_sListen;
  174. extern BOOL beAssumed;
  175. void CAnyServerView::OnStopbtn() 
  176. {
  177. // TODO: Add your control notification handler code here
  178. if (g_sListen.m_hSocket!=NULL) g_sListen.Close();
  179. if (((CAnyServerDoc*)GetDocument())->g_pchatListen!=NULL&&((CAnyServerDoc*)GetDocument())->g_pchatListen->m_hSocket!=INVALID_SOCKET) 
  180. {
  181. ((CAnyServerDoc*)GetDocument())->g_pchatListen->Close();
  182. delete ((CAnyServerDoc*)GetDocument())->g_pchatListen;
  183. ((CAnyServerDoc*)GetDocument())->g_pchatListen=NULL;
  184. }
  185. if (((CAnyServerDoc*)GetDocument())->m_pConnect!=NULL&&((CAnyServerDoc*)GetDocument())->m_pConnect->m_hSocket!=INVALID_SOCKET) 
  186. {
  187. ((CAnyServerDoc*)GetDocument())->m_pConnect->Close();
  188. delete ((CAnyServerDoc*)GetDocument())->m_pConnect;
  189. ((CAnyServerDoc*)GetDocument())->m_pConnect=NULL;
  190. }
  191. SendMessage(WM_VALID,(WPARAM)FALSE,0);
  192. SendMessage(WM_USERNAME,(WPARAM)FALSE,0);
  193. SendMessage(WM_IPADDR,0,(LPARAM)FALSE);
  194. Started=FALSE;
  195. beAssumed=FALSE;
  196. }
  197. void CAnyServerView::OnUpdateStartserver(CCmdUI* pCmdUI) 
  198. {
  199. // TODO: Add your command update UI handler code here
  200. pCmdUI->Enable(!Started);
  201. m_Startbtn.EnableWindow(!Started);
  202. }
  203. void CAnyServerView::OnUpdateStopserver(CCmdUI* pCmdUI) 
  204. {
  205. // TODO: Add your command update UI handler code here
  206. pCmdUI->Enable(Started);
  207. m_Stopbtn.EnableWindow(Started);
  208. }
  209. void CAnyServerView::OnClosechat() 
  210. {
  211. CAnyServerDoc* pDoc=(CAnyServerDoc*)GetDocument();
  212. if (pDoc->m_pConnect->m_hSocket!=INVALID_SOCKET) 
  213. {
  214. pDoc->m_pConnect->Close();
  215. delete pDoc->m_pConnect;
  216. pDoc->m_pConnect=NULL;
  217. }
  218. SendMessage(WM_VALID,(WPARAM)FALSE,0);
  219. AfxGetApp()->SaveAllModified();
  220. POSITION pos = pDoc->GetFirstViewPosition();  
  221. while (pos != NULL)   
  222. {
  223. CView* pView = pDoc->GetNextView(pos);    
  224. if (pView->IsKindOf(RUNTIME_CLASS(CEditView)))
  225. {
  226. pView->EnableWindow(FALSE);
  227. pView->SetWindowText("");
  228. }
  229. }
  230. }