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); } }
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); }
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); }