public void Listen()
        {
            try
            {
                //监听请求
                LogManger.WriteInfo("Server is listening");
                while (true)
                {
                    var clientSocket = this.serverSocket.Accept();
                    LogManger.WriteInfo("New connect:" + clientSocket.RemoteEndPoint.ToString());
                    Thread clientThread = new Thread(new ParameterizedThreadStart((object param) => {
                        bool sendMessage = true;
                        //创建用户操作服务器的实例
                        ServerManger serverManger = new ServerManger();
                        try
                        {
                            TcpMessage message = new TcpMessage();
                            var socket         = param as Socket;

                            //创建TCP消息上下文
                            message.NewMessage += (object e, NewMessageArgs args) =>
                            {
                                Thread.Sleep(20);
                                if (sendMessage == true)
                                {
                                    socket.Send(Encoding.UTF8.GetBytes("MSG:" + args.FormatString));
                                }
                            };
                            serverManger.MessageContext = message;
                            while (true)
                            {
                                byte[] buffer = new byte[256];
                                var length    = socket.Receive(buffer);
                                //断连
                                if (length == 0)
                                {
                                    return;
                                }
                                string data = Encoding.UTF8.GetString(buffer);
                                LogManger.WriteInfo(clientSocket.RemoteEndPoint.ToString() + ":" + data);
                                socket.Send(Encoding.UTF8.GetBytes(Parse(data, serverManger)));
                            }
                        }
                        catch (Exception ex)
                        {
                            //强制停止
                            serverManger.StopTest();
                            //关闭送信开关
                            sendMessage = false;
                            LogManger.WriteError("Listen error:" + ex.ToString());
                        }
                    }));
                    clientThread.Start(clientSocket);
                }
            }
            catch (Exception ex)
            {
                LogManger.WriteError("Listen error:" + ex.ToString());
            }
        }
        /// <summary>
        /// 解析指令
        /// </summary>
        public static string Parse(string data, ServerManger serverManger)
        {
            data = data.Replace("\0", "");
            string[] commandAndArgs = data.Split(':');
            string   command        = commandAndArgs[0];

            string[] args      = commandAndArgs[1].Split(',');
            string   returnStr = command + ":";

            switch (command)
            {
            case "GET": returnStr += string.Join(",", serverManger.GetTests()); break;

            case "RUN":
                if (serverManger.StartTest(args[0]))
                {
                    returnStr += "OK";
                }
                else
                {
                    returnStr += "FAILED";
                }
                break;

            case "STOP":
                if (serverManger.StopTest())
                {
                    returnStr += "OK";
                }
                else
                {
                    returnStr += "FAILED";
                }
                break;
            }
            return(returnStr);
        }
示例#3
0
 static void Main(string[] args)
 {
     LogManger.WriteInfo("Start server..");
     LogManger.WriteInfo("Server init..");
     if (ServerManger.ServerInit())
     {
         LogManger.WriteInfo("Start tcp server..");
         TCPServer tcpserver = new TCPServer();
         if (tcpserver.ServerInit())
         {
             LogManger.WriteInfo("Tcp server init is complete");
             LogManger.WriteInfo("Start listening..");
             tcpserver.Listen();
         }
         else
         {
             LogManger.WriteInfo("Tcp server init was failed");
         }
     }
     else
     {
         LogManger.WriteInfo("Start server was failed");
     }
 }