Msgman.cpp
上传用户:zhenhuadz
上传日期:2007-01-07
资源大小:1511k
文件大小:8k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. // Msgman.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "anywhere.h"
  5. #include "Msgman.h"
  6. #include "visualfx.h"
  7. #include "frameprop.h"
  8. //test code
  9. #include "mainfrm.h" //没用
  10. #include "anywheredoc.h"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CMsgman
  18. CMsgman::CMsgman(CAnywhereDoc *pDoc)
  19. {
  20. msglist_pos=NULL;
  21. m_pDoc=pDoc;
  22. }
  23. CMsgman::~CMsgman()
  24. {
  25. Msglist_type *pmsg;
  26. while (!Msglist.IsEmpty()) {
  27.          pmsg=(Msglist_type *)Msglist.RemoveHead();
  28. delete pmsg;
  29. }
  30. }
  31. // Do not edit the following lines, which are needed by ClassWizard.
  32. #if 0
  33. BEGIN_MESSAGE_MAP(CMsgman, CAsyncSocket)
  34. //{{AFX_MSG_MAP(CMsgman)
  35. //}}AFX_MSG_MAP
  36. END_MESSAGE_MAP()
  37. #endif // 0
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CMsgman member functions
  40. void CMsgman::init(HWND hFrame)
  41. {
  42.   //msglist_pos=NULL;
  43.    m_hFrame=hFrame;
  44. }
  45. void CMsgman::SendMsg(CString order)
  46. {
  47. //CString order;
  48. CString text;
  49. DWORD ThreadId;
  50. //if (msglist_pos) {
  51.   /*      
  52. Msglist_type *pmsg=(Msglist_type *)Msglist.GetTail();
  53.   order=pmsg->message;
  54.   */
  55. //}
  56. if (order=="CONNECT")
  57. {
  58. AfxBeginThread(Connect,&linkrc);
  59. }
  60.  if (order=="GETINFO*")
  61.  {
  62.  //linkrc.pmsgman=this;
  63.  
  64.  hSend=CreateThread(NULL,0,SendThread,&linkrc,0,&ThreadId);
  65.    //AfxBeginThread(Send,&linkrc);
  66.  }
  67.  if (order=="VIEWSCR*")
  68.  {
  69.  //linkrc.pmsgman=this;
  70.  CreateThread(NULL,0,ViewScr,&linkrc,0,&ThreadId);
  71.  //AfxBeginThread(ViewScr,&linkrc);
  72.  }
  73.  if (order=="LISTFILE")
  74.  {
  75.  hSend=CreateThread(NULL,0,SendThread,&linkrc,0,&ThreadId);
  76.  }
  77. //InsertItem(num,pfile->filename,pfile->icon);
  78. }
  79. BOOL CMsgman::AddMsg(CString message, CString msg_tip,enum  status_type status, BOOL bEnable, CSockAddr target, int priority)
  80. {
  81. /* if (!CheckConnect())
  82. if (IDYES==MessageBox(m_hMainWnd,"现在需要连接远程主机吗? ","提示:",MB_YESNO))
  83. {
  84. Msglist_type * pMsg=new Msglist_type;   
  85.             pMsg->message="CONNECT";
  86.             pMsg-msg_tip="与远程机器连接";
  87.             pMsg->status=first;
  88.             pMsg->target=linkrc.sAddr;
  89.             pMsg->bEnable=TRUE;
  90.             msglist_pos=Msglist.InsertAfter(msglist_pos,(CObject*)pMsg);
  91.             SendMsg();//立即发送连接消息
  92. //优先级并无用处
  93. return TRUE;
  94.     }
  95. else return FALSE;
  96. */
  97. //msglist_pos=Msglist.GetTailPosition();
  98. int order=CheckMsg(message);
  99. if (order==0) {//表示是新的命令
  100.     Msglist_type * pMsg=new Msglist_type;   
  101.     pMsg->message=message;
  102.     pMsg->msg_tip=msg_tip;
  103.     pMsg->status=status;
  104.     pMsg->target=target;
  105.     pMsg->bEnable=bEnable;
  106. Msglist.AddTail(pMsg);
  107.   //msglist_pos=Msglist.InsertAfter(msglist_pos,(CObject*)pMsg);
  108.   //SendMsg();//立即发送
  109.   return TRUE;
  110. }
  111. /*
  112. else if (order==1) { //队列已存在该命令
  113.   if (IDYES==MessageBox(m_hFrame,"系统先前已接受了该条消息,但还没有完成,你希望将命令加入队列,等待发送吗?",
  114.   "提示:",MB_YESNO))
  115.   {
  116.   Msglist_type * pMsg=new Msglist_type;   
  117.   pMsg->message=message;
  118.   pMsg->msg_tip=msg_tip;
  119.   pMsg->status=wait;//标记为等待
  120.   pMsg->target=target;
  121.   pMsg->bEnable=bEnable;
  122.   msglist_pos=Msglist.InsertAfter(msglist_pos,(CObject*)pMsg);
  123.   return TRUE;
  124.   }
  125.   
  126.   
  127. }
  128. */
  129.   return FALSE;//失败的命令
  130.    
  131. }
  132. int CMsgman::CheckMsg(CString message)
  133. {
  134. if (!Msglist.IsEmpty()) {
  135. msglist_pos=Msglist.GetHeadPosition();
  136. }
  137. POSITION pos;
  138. while ((pos=msglist_pos)!=NULL) 
  139. {
  140.        Msglist.GetNext(pos);
  141. if (pos) {
  142. Msglist_type *pmsg=(Msglist_type*)Msglist.GetAt(pos);
  143. if (pmsg->message==message)
  144. //msglist_pos=Msglist.GetTailPosition();
  145. //if (pmsg->status==wait) 
  146. return 1;//(找到标记为等待的)
  147.   //else return 2;
  148. }
  149. msglist_pos=pos;
  150. }
  151.        else {
  152. //msglist_pos=Msglist.GetTailPosition();
  153.         return 0;//没找到立即执行
  154.    }
  155. }
  156. //msglist_pos=Msglist.GetTailPosition();
  157. return 0;//没找到立即执行
  158. //return TRUE;
  159. }
  160. int CMsgman::Respones(CString text)
  161. {
  162. //test---
  163. CString order=text.Left(8);
  164. int length=text.GetLength();
  165. text=text.Right(length-8);//text已更改为主要内容
  166. length=text.GetLength();
  167. POSITION list_pos=NULL;
  168. // int pos;
  169. int num=0;
  170.     
  171. if (!CheckMsg(order))
  172. {
  173. if (order=="GETINFO*")
  174. {
  175. Dispense(text);
  176. /*BOOL bFinished=FALSE;
  177. char *pdrv;
  178. while (!bFinished) {
  179.    if ((pos=m_pDoc->m_sys[8].Find("\"))!=-1)
  180.   {
  181.     pdrv=new char[4];
  182. strcpy(pdrv,m_pDoc->m_sys[8].Left(pos));
  183. pdrv[3]=0;
  184. list_pos=m_pDoc->drvlist.InsertAfter(list_pos,pdrv);
  185. m_pDoc->m_sys[8]=m_pDoc->m_sys[8].Right(m_pDoc->m_sys[8].GetLength()-pos-1);
  186.              num++;
  187.   }
  188.    else bFinished=TRUE;
  189. }*/
  190.         return 1;//为sysinfo 的id
  191. }
  192. if (order=="VIEWSCR*")
  193. return 4;
  194. if (order=="LISTFILE")
  195. {
  196. return 2;}
  197. }
  198. return 0;//返回值是窗口的id
  199. }
  200. void CMsgman::Dispense(CString text)//处理得到的系统信息
  201. {
  202. BOOL bFinished=FALSE;
  203. int num=0;
  204. int pos;
  205.     while (!bFinished) {
  206. if ((pos=text.Find("*"))!=-1)
  207. {
  208. m_pDoc->m_sys[num]=text.Left(pos);
  209. text=text.Right(text.GetLength()-pos-1);
  210. num++;
  211. }
  212.         else bFinished=TRUE;
  213. /*else {
  214. m_pDoc->m_sys[num]=text;
  215. bFinished=TRUE;
  216. }*/
  217. }
  218. //SendMessage(m_hFrame,WM_SETACTIVE,1,0);
  219. //m_pDoc->UpdateAllViews(NULL);
  220. //m_pFrame->SetActive(2);
  221. //CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
  222. //m_pDoc->UpdateAllViews();
  223.      //CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  224. //if (pFrame) {
  225. // CDocument *pDoc2=pFrame->GetActiveDocument();
  226. //CAnywhereDoc *pDoc=(CAnywhereDoc *)(pFrame->GetActiveDocument());
  227. //} 
  228. }
  229. int CMsgman::Okmsg(CString text,BOOL success)
  230. {
  231. /* if (!Msglist.IsEmpty()) {
  232. msglist_pos=Msglist.GetHeadPosition();
  233. }
  234. */
  235. // POSITION pos;
  236. //CString order=text.Left(8);
  237.     if (success)return (Respones(text));
  238.   else return 0;   //返回无效id0意味失败;
  239. /*
  240. while ((pos=msglist_pos)!=NULL) 
  241. {
  242.        Msglist.GetNext(pos);
  243. if (pos) {
  244. Msglist_type *pmsg=(Msglist_type*)Msglist.GetAt(pos);
  245. if (pmsg->message==order)
  246. //pmsg->status=done;//标记为完成
  247.   Msglist_type *pmsg=Msglist.GetAt(pos);
  248.   Msglist.RemoveAt(pos);//删除该条命令
  249.   delete pmsg;
  250.   
  251.               
  252.   if (success)return (Respones(text));
  253.   else return 0;   //返回无效id0意味失败;
  254.   //msglist_pos=Msglist.GetTailPosition();
  255.   //return FALSE;//找到了
  256. }
  257. msglist_pos=pos;
  258. }
  259. else {
  260. //msglist_pos=Msglist.GetTailPosition();
  261. return 0;//没找到
  262. }
  263. }
  264. return 0;
  265. */
  266. }
  267. void CMsgman::SetActive(int id)
  268. {
  269. //int nIndex;
  270.   //TVisualFramework *m_Fx;
  271.   //CMainFrame *pFrame=(CMainFrame *)AfxGetMainWnd();
  272.   //m_Fx=&(m_pDoc->m_pFrame)->m_Framework;
  273.   //m_Fx=&((CMainFrame *)AfxGetMainWnd())->m_Framework;
  274. //   (m_pFrame->m_Framework).SetActivePane(m_pFrame->pObject);
  275.   
  276.   //TVisualFramework m_Fx;
  277.   //&m_Fx=&((CMainFrame*)AfxGetMainWnd())->m_Framework;
  278.   /*TVisualFrameworkIterator it((m_pDoc->m_pFrame)->m_Framework);
  279.   while (!it.End()) {
  280.     TVisualObject *pObject = it.Get();
  281.     if ((pObject->CanFocus()) & (pObject->GetID()==id)) {
  282.       ((m_pDoc->m_pFrame)->m_Framework).SetActivePane(pObject);
  283. //nIndex = m_List.AddString(pObject->GetDescription());
  284.       //m_List.SetItemData(nIndex, (DWORD)pObject);
  285.     }
  286.     it ++;
  287.   }
  288.   */
  289.   
  290.   //CFrameworkProperties dialog(
  291.   
  292.   //dialog.DoModal();
  293. }
  294. BOOL CMsgman::CheckConnect()
  295. {
  296. if (linkrc.bConnected==1) return 
  297. TRUE;
  298. else return FALSE;
  299. }