// 外部输入流监听服务 private static void startProcReadMsg() { NamedPipeServerStream pipeIn = new NamedPipeServerStream(ptag, PipeDirection.InOut, 254); while (keeprun) { pipeIn.WaitForConnection(); StreamReader reader = new StreamReader(pipeIn); string line = reader.ReadLine(); if (!string.IsNullOrEmpty(line)) { // 消息处理 string [] cmds = line.Split(','); if (cmds.Length > 1) { string curstrr = line.Substring(line.IndexOf(',') + 1); switch (cmds[0]) { case TAG_CMD: if (!string.IsNullOrEmpty(curstrr)) { if (curstrr == "BANUPDATE") { // 更新banlist reloadBanlist(); } else { sendCommand(procname, curstrr); } } break; case TAG_REFRESH: sendFarMessage(curstrr, procstr); break; case TAG_STOP: keeprun = false; KEEPRUN = false; break; //... to do other case } } } pipeIn.Disconnect(); } // 监听服务结束时,结束正在运行的应用程序 if (chatservice != null) { chatunregister(); chatservice.stopListen(); chatservice = null; } closeProc(procname); }
/// <summary> /// 我要开服(含聊天端口) /// </summary> /// <param name="pname"></param> /// <param name="fpath"></param> /// <param name="ptag"></param> /// <param name="pexe"></param> /// <param name="pmoddir"></param> /// <param name="logpath"></param> /// <param name="eventpath"></param> /// <param name="banlistpath"></param> /// <param name="clientname"></param> /// <param name="serveraddr"></param> /// <param name="serverport"></param> /// <param name="clientport"></param> /// <returns></returns> public static string StartProc(string pname, string fpath, string ptag, string pexe, string pmoddir, string logpath, string eventpath, string banlistpath, string clientname, string serveraddr, string serverport, string clientport) { if (clientname != null && serveraddr != null && serverport != null && clientport != null) { myport = int.Parse(clientport); if (myport != 0) { chatservice = new P2PLoader(int.Parse(clientport)); myname = clientname; cserverip = getIp(serveraddr); cserverport = int.Parse(serverport); chatservice.setOnReceiveMsg(onChatMsgReceive); chatservice.setOnStopListen(onChatStop); chatservice.startListen(); chatregister(); } } return(StartProc(pname, fpath, ptag, pexe, pmoddir, logpath, eventpath, banlistpath)); }
void StartCmdClick(object sender, EventArgs e) { startCmd.Enabled = false; if (null == telloController) { telloController = new P2PLoader(); } telloController.setOnReceiveMsg(onTelloMsg); telloController.startListen(); cmdStoped = false; Thread t = new Thread(delegate() { try { while (!cmdStoped) { output.Text = "开启命令!"; telloController.sendMsg(TELLOMSG.command); Thread.Sleep(3000); isFalse(cmdStoped); output.Text = "起飞!"; telloController.sendMsg(TELLOMSG.takeoff); Thread.Sleep(7000); isFalse(cmdStoped); output.Text = "翻滚!"; telloController.sendMsg(TELLOMSG.flip + "r"); Thread.Sleep(7000); isFalse(cmdStoped); output.Text = "下落!"; telloController.sendMsg(TELLOMSG.land); Thread.Sleep(7000); } } catch (Exception ue) { output.Text = ue.Message; } finally { // do nothing } }); t.Start(); }