Exemplo n.º 1
0
        public void StartServer(Trainer trainer)
        {
            Console.WriteLine("Please enter the server port and press return:");
            string port = Console.ReadLine();


            ISocket listenSocket = AweSock.TcpListen(int.Parse(port));

            Console.WriteLine("Server started");
            ISocket client = AweSock.TcpAccept(listenSocket);

            var inBuf  = AwesomeSockets.Buffers.Buffer.New(99999);
            var outBuf = AwesomeSockets.Buffers.Buffer.New(99999);

            while (true)
            {
                try
                {
                    //get message
                    Stopwatch stopWatch = new Stopwatch();
                    stopWatch.Start();

                    Tuple <int, EndPoint> received = AweSock.ReceiveMessage(client, inBuf);

                    stopWatch.Stop();

                    TimeSpan ts = stopWatch.Elapsed;
                    trainer.timeSinceUpdate = ts.Milliseconds;

                    AwesomeSockets.Buffers.Buffer.FinalizeBuffer(inBuf);

                    //parse message
                    var res = Utils.Deserialize <Dictionary <string, byte[]> >(AwesomeSockets.Buffers.Buffer.GetBuffer(inBuf));
                    AwesomeSockets.Buffers.Buffer.ClearBuffer(inBuf);

                    //act on message
                    this.HandleInputData(res, trainer);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine(e.StackTrace);

                    AwesomeSockets.Buffers.Buffer.ClearBuffer(outBuf);
                    AwesomeSockets.Buffers.Buffer.ClearBuffer(inBuf);
                    trainer.Initialize();
                }

                try {
                    //get response data
                    var outputData = this.GetOutputData(trainer);

                    //write to buffer
                    AwesomeSockets.Buffers.Buffer.ClearBuffer(outBuf);
                    AwesomeSockets.Buffers.Buffer.Add(outBuf, Utils.ObjectToByteArray(outputData));
                    AwesomeSockets.Buffers.Buffer.FinalizeBuffer(outBuf);

                    //respond
                    int bytesSent = AweSock.SendMessage(client, outBuf);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine(e.StackTrace);

                    AwesomeSockets.Buffers.Buffer.ClearBuffer(outBuf);
                    AwesomeSockets.Buffers.Buffer.ClearBuffer(inBuf);
                    trainer.Initialize();
                }
            }

            Console.ReadLine();
        }