public DatBaeSolver(int WorkerCount, int BrokenWorkerCount, int RequestCount, Func <string> readFunction, Action <string> writeFunc) { this.WorkerCount = WorkerCount; this.BrokenWorkerCount = BrokenWorkerCount; this.RequestCount = RequestCount; this.bits = new bool[this.WorkerCount]; groups.AddFirst(new GroupSolver(this.BrokenWorkerCount, this, 0, WorkerCount - 1)); this.readFunction = readFunction; this.writeFunction = writeFunc; CurrentState = DatBaeSolverState.Initialized; }
private void ReadResponse() { string result = this.readFunction(); if (result == "-1") { CurrentState = DatBaeSolverState.RequestExceededCount; } else { for (int i = 0; i < bits.Length; i++) { bits[i] = result[i] == '1' ? true : false; } } }
public void Start() { CurrentState = DatBaeSolverState.Running; while (RequestCount > 0) { foreach (var group in groups) { group.SetSendMessage(); } SendMessage(); ReadResponse(); if (CurrentState == DatBaeSolverState.RequestExceededCount) { break; } RequestCount--; } }