Пример #1
0
        public void SendRequest(int worker, Node node, List <PointState>[] board)
        {
            // Console.WriteLine("Sending request job with count " + peedingNodes.Count);

            for (int i = 0; i < node.moves.Count; i++)
            {
                board[node.moves[i]].Add((i % 2) == 0 ? PointState.White : PointState.Black);
            }

            WorkerRequest request = new WorkerRequest()
            {
                board         = board,
                potezRacunala = (node.moves.Count % 2) == 0,
                parentId      = node.id
            };

            // Console.WriteLine("Trying to send progres with count " + inProgress);


            inProgress++;

            Communicator.world.Send(request, worker, 1);

            //    Console.WriteLine("Sent request job in progres with count " + inProgress);

            for (int i = 0; i < node.moves.Count; i++)
            {
                board[node.moves[i]].RemoveAt(board[node.moves[i]].Count - 1);
            }
        }
Пример #2
0
        public WorkerResponse HandleRequest(WorkerRequest request)
        {
            int[] result = new int[7];

            for (int i = 0; i < 7; i++)
            {
                request.board[i].Add(request.potezRacunala ? PointState.White : PointState.Black);

                result[i] = CalculateVictory(request.board, i);

                request.board[i].RemoveAt(request.board[i].Count - 1);
            }

            WorkerResponse response = new WorkerResponse();

            response.parentId = request.parentId;

            if (request.potezRacunala)
            {
                if (result.Contains(1))
                {
                    response.parentState = (int)State.Victory;
                }
                else
                {
                    response.parentState = (int)State.Unresolved;
                }

                response.children = new int[7];

                for (int i = 0; i < 7; i++)
                {
                    response.children[i] = result[i] == 1 ? (int)State.Victory : (int)State.Unresolved;
                }
            }
            else
            {
                if (result.Contains(1))
                {
                    response.parentState = (int)State.Defeat;
                }
                else
                {
                    response.parentState = (int)State.Unresolved;
                }

                response.children = new int[7];

                for (int i = 0; i < 7; i++)
                {
                    response.children[i] = result[i] == 1 ? (int)State.Defeat : (int)State.Unresolved;
                }
            }

            return(response);
        }
Пример #3
0
        public void WaitForRequest()
        {
            do
            {
                Communicator.world.Send <int>((int)WorkerMessage.Ready, 0, 0);

                WorkerRequest request = Communicator.world.Receive <WorkerRequest>(0, 1);

                var response = HandleRequest(request);

                Communicator.world.Send(response, 0, 2);
                Communicator.world.Receive <int>(0, 2);
            } while (true);
        }