Ejemplo n.º 1
0
        public async Task StartAsync()
        {
            controller.MoveMade += Controller_MoveMade;
            while (true)
            {
                var line = await reader.ReadLineAsync();

                var command = line.Split(new[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries);
                if (command.Length == 0)
                {
                    continue;
                }
                switch (command[0])
                {
                case "START":
                    var size = int.Parse(command[1]);
                    controller.StartGame(size, size);
                    await OK();

                    break;

                case "RECTSTART":
                    var sizes = command[1].Split(',').Select(s => int.Parse(s)).ToList();
                    controller.StartGame(sizes[0], sizes[1]);
                    await OK();

                    break;

                case "RESTART":
                    controller.NewBoard(Enumerable.Empty <Move>());
                    await OK();

                    break;

                case "BEGIN":
                    controller.BeginTurn();
                    break;

                case "TURN":
                    var coordinate = command[1].Split(',').Select(s => int.Parse(s)).ToList();
                    controller.OpponentMove(coordinate[0], coordinate[1]);
                    controller.BeginTurn();
                    break;

                case "BOARD":
                    await ProcessBoardAsync(reader);

                    controller.BeginTurn();
                    break;

                case "INFO":
                    var kvp = command[1].Split(' ');
                    ProcessInfo(kvp[0], kvp[1]);
                    break;

                case "ABOUT":
                    await writer.WriteLineAndFlush(About.ToString());

                    break;

                case "END":
                    controller.MoveMade -= Controller_MoveMade;
                    return;

                default:
                    await writer.WriteLineAndFlush($"UNKNOWN command {line}");

                    break;
                }
            }
        }