コード例 #1
0
        private static async Task RunEchoServer()
        {
            HttpListener listener = new HttpListener();

            listener.Prefixes.Add("http://localhost:12345/");
            listener.Start();
            Console.WriteLine("Started");

            while (true)
            {
                HttpListenerContext context = listener.GetContext();
                if (!context.Request.IsGameSocketRequest)
                {
                    context.Response.Close();
                    continue;
                }
                Console.WriteLine("Accepted");

                var wsContext = await context.AcceptGameSocketAsync(null);

                var gameSocket = wsContext.GameSocket;

                byte[] buffer = new byte[1024];
                GameSocketReceiveResult received = await gameSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

                while (received.MessageType != GameSocketMessageType.Close)
                {
                    Console.WriteLine($"Echoing {received.Count} bytes received in a {received.MessageType} message; Fin={received.EndOfMessage}");
                    // Echo anything we receive
                    await gameSocket.SendAsync(new ArraySegment <byte>(buffer, 0, received.Count), received.MessageType, received.EndOfMessage, CancellationToken.None);

                    received = await gameSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);
                }

                await gameSocket.CloseAsync(received.CloseStatus.Value, received.CloseStatusDescription, CancellationToken.None);

                gameSocket.Dispose();
                Console.WriteLine("Finished");
            }
        }