public ConfigurationManager(NodeMapper nodeMapper, EdgeMapper edgeMapper, BoardConfiguration boardConfiguration,
                                    SerialConfiguration serialConfiguration, GpioConfiguration gpioConfiguration)
        {
            _nodeMapper = nodeMapper;
            _edgeMapper = edgeMapper;

            BoardConfiguration  = boardConfiguration;
            SerialConfiguration = serialConfiguration;
            GpioConfiguration   = gpioConfiguration;
        }
示例#2
0
        public static async Task Main(string[] args)
        {
            if (args.Count().Equals(0))
            {
                Logger.Log("Error! Put serial port name in arguments ex.");
                Logger.Log("sudo dotnet GhostChess.Board.dll /dev/ttyUSB0");
                Logger.Log("./run.sh /dev/ttyUSB0");
                Environment.Exit(ERROR_BAD_ARGUMENTS);
            }

            Logger.Log("Configuring board...");
            var fieldSize          = 50;
            var boardZeroX         = 7;
            var boardZeroY         = 53;
            var sideFieldOffset    = 7.5;
            var boardConfiguration = new BoardConfiguration
            {
                LeftBoardZeroX    = boardZeroX,
                LeftBoardZeroY    = boardZeroY,
                FieldSizeX        = fieldSize,
                FieldSizeY        = fieldSize,
                SideFieldOffsetX  = sideFieldOffset,
                SideFieldOffsetY  = 0,
                CentralBoardZeroX = boardZeroX + 2 * fieldSize + sideFieldOffset,
                CentralBoardZeroY = boardZeroY,
                RightBoardZeroX   = (boardZeroX + 2 * fieldSize + sideFieldOffset) + 8 * fieldSize + sideFieldOffset,
                RightBoardZeroY   = boardZeroY
            };

            Logger.Log("Configuring serial port...");
            var serialConfiguration = new SerialConfiguration
            {
                BaudRate       = 115200,
                SerialPortName = args.First()
            };

            Logger.Log("Configuring GPIO...");
            var gpioConfiguration = new GpioConfiguration
            {
                Pin       = RaspberryPi.Enums.Pins.Gpio14,
                InputType = RaspberryPi.Enums.InputType.Output,
                State     = RaspberryPi.Enums.State.Low
            };

            Logger.Log("Initializing board...");
            var pathfinder           = new BreadthFirst();
            var nodeMapper           = new NodeMapper(boardConfiguration);
            var edgeMapper           = new EdgeMapper(boardConfiguration);
            var configurationManager = new ConfigurationManager(nodeMapper, edgeMapper, boardConfiguration, serialConfiguration, gpioConfiguration);

            var nodes  = configurationManager.MapBoard();
            var gpio   = configurationManager.InitializeGpio();
            var serial = configurationManager.InitializeSerialPort();

            Logger.Log("Configuring connection...");
            var controller = new Controller(gpio, serial);
            var connection = new HubConnectionBuilder()
                             .WithUrl("https://ghostchessweb.azurewebsites.net/chess?Password=P@ssw0rd&Board=true")
                             .Build();

            var gameHandler = new GameHandler(nodes, gpio, serial, controller, pathfinder, configurationManager, connection);

            Logger.Log("Starting game...");
            _ = Task.Factory.StartNew(controller.Run, TaskCreationOptions.LongRunning);
            _ = Task.Factory.StartNew(gameHandler.Run, TaskCreationOptions.LongRunning);

            await Task.Delay(-1);
        }