private string HandleGETWork(string sID) { lock (_Lock) { if (!_Machines.ContainsKey(sID)) { Console.WriteLine("HandleGETWork: Unknown machine '{0}' requested work!", sID); return(null); } // Update timestamp. _Machines[sID].CurrentTimeout = 0; DetermineNextBuildMachine(); ezGETWorkResponse response = new ezGETWorkResponse(); // If the currently querying build machine is the 'chosen one' we allow it to build the next revision. if (_Machines[sID] == _NextMachine && _NextMachine.State == BuildMachine.BuildMachineState.Idle) { BuildMachine machine = _Machines[sID]; machine.CurrentTimeout = 0; machine.State = machine.NeedClean ? BuildMachine.BuildMachineState.RunBuildAndClean : BuildMachine.BuildMachineState.RunBuild; response.Revision = machine.Settings.Revision + 1; // Build next revision in line. response.Response = machine.NeedClean ? ezGETWorkResponse.WorkResponse.RunBuildAndClean : ezGETWorkResponse.WorkResponse.RunBuild; Console.WriteLine("HandleGETWork: Machine '{0}' is now building!", sID); } return(Newtonsoft.Json.JsonConvert.SerializeObject(response)); } }
void RequestWork() { string url = ServerUrl(ezBuildRequestMessageType.GETWork); HttpHelper.ResponseResult response = HttpHelper.GET(url); if (response == null) { Console.WriteLine("RequestWork: Server not responding at URL '{0}'.", url); return; } if (response.StatusCode == HttpStatusCode.BadRequest) { SendSettings(); return; } if (response.StatusCode != HttpStatusCode.OK) { Console.WriteLine("RequestWork: Server returned StatusCode '{0}'.", response.StatusCode); return; } try { ezGETWorkResponse workResponse = Newtonsoft.Json.JsonConvert.DeserializeObject <ezGETWorkResponse>(response.Message); if (workResponse.Response == ezGETWorkResponse.WorkResponse.RunBuild) { HandleRunRequest(workResponse.Revision); return; } else if (workResponse.Response == ezGETWorkResponse.WorkResponse.RunBuildAndClean) { HandleRunRequest(workResponse.Revision, true); return; } } catch (Exception ex) { Console.WriteLine("RequestWork Failed: {0}.", ex.Message); } }