protected override void RunJob(Job job) { CommandResponse response = null; if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: [{1}] Processing Job", job.Number, job.Command); } if (Connected) { if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: [{1}] Connected! Discarding any bytes in input buffer", job.Number, job.Command); } string reply; try { if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: [{1}] Sending command", job.Number, job.Command); } string command = job.Command; switch (job.ResponseType) { case ResponseType.NoResponse: if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: [{1}] Expecting no response for command", job.Number, job.Command); } break; case ResponseType.DigitResponse: if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: [{1}] Expecting single digit response for command", job.Number, job.Command); } command += ",n"; break; case ResponseType.FullResponse: if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: [{1}] Expecting #-delimited response for Command...", job.Number, job.Command); } command += ",#"; break; case ResponseType.DoubleFullResponse: command += ",##"; if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: [{1}] Expecting two #-delimited responses for Command...", job.Number, job.Command); } break; } reply = _oat.Action("Serial:PassThroughCommand", command); if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: [{1}] Received reply: '{2}'", job.Number, job.Command, reply); } response = new CommandResponse(reply, true); } catch (Exception ex) { Log.WriteLine("ASCOM: {0:0000}: [{1}] Failed to send command. {2}", job.Number, job.Command, ex.Message); job.OnFulFilled(new CommandResponse(string.Empty, false, $"Unable to execute command. " + ex.Message)); return; } } else { Log.WriteLine("ASCOM: {0:0000}: Telescope is not connected!", job.Number); response = new CommandResponse(string.Empty, false, $"Unable to connect to telescope"); } if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: Calling OnFulFilled lambda", job.Number); } job.OnFulFilled(response); job.Succeeded = response.Success; if (_logJobs) { Log.WriteLine("ASCOM: {0:0000}: Job completed", job.Number); } }