async public Task <RecStatus> GetStatusUpdate() { RecStatus recStatus = new RecStatus(); MS_Status msStatus = new MS_Status(); recStatus.ErrorMsg = await DoRequest(msStatus); if (string.IsNullOrEmpty(recStatus.ErrorMsg) == false) { recStatus.Status = RecStatus.eRecording.Error; recStatus.WaitTime = NextPollOnError; return(recStatus); } recStatus.NextRecording = msStatus.NextTimer; if (msStatus.ActiveRecordings) { if (actualRecording == false) { // new recording detected recStatus.Status = RecStatus.eRecording.Started; recStatus.WaitTime = NextPollOnRecording; actualRecording = true; return(recStatus); } else { // on going recording recStatus.Status = RecStatus.eRecording.Recording; recStatus.WaitTime = NextPollOnWaiting; return(recStatus); } } // no ActiveRecordings recStatus.Status = RecStatus.eRecording.None; recStatus.WaitTime = NextPollOnWaiting; if (actualRecording == true) { // recording has ended recStatus.Status = RecStatus.eRecording.Stopped; actualRecording = false; } if (msStatus.ActiveTimers == false) { // we also have not timers so we have time recStatus.WaitTime = NextPollOnWaiting; return(recStatus); } if (msStatus.NextTimer < NextPollOnWaiting) { recStatus.WaitTime = msStatus.NextTimer + 2; } return(recStatus); }
async public void RunLoop(Action <RecStatus> OnEvent) { Stop = false; IsRunning = true; while (true) { RecStatus reStat = await GetStatusUpdate(); OnEvent?.Invoke(reStat); if (MySleep(reStat.WaitTime * 1000) == false) { IsRunning = false; return; } //if (Stop) return; //System.Threading.Thread.Sleep(reStat.WaitTime * 1000); } }
private void OnStatusEvent(RecStatus recordingStatus) { Icon tmp = Properties.Resources.Button_Blank_Green_icon; string msg = string.Empty; string cmd = string.Empty; switch (recordingStatus.Status) { case RecStatus.eRecording.Error: tmp = Properties.Resources.Button_Blank_Yellow; msg = "Error " + recordingStatus.ErrorMsg; cmd = Properties.Settings.Default.OnError; //if (string.IsNullOrEmpty(Properties.Settings.Default.OnError) == false) // System.Diagnostics.Process.Start(Properties.Settings.Default.OnError+ " \""+ recordingStatus.ErrorMsg+"\""); break; case RecStatus.eRecording.None: tmp = Properties.Resources.Button_Blank_Green_icon; msg = "Waiting"; break; case RecStatus.eRecording.Started: tmp = Properties.Resources.Button_Blank_Red_icon; msg = "Recording"; cmd = Properties.Settings.Default.OnRecordStart; //if (string.IsNullOrEmpty(Properties.Settings.Default.OnRecordStart)==false) // System.Diagnostics.Process.Start(Properties.Settings.Default.OnRecordStart); break; case RecStatus.eRecording.Stopped: tmp = Properties.Resources.Button_Blank_Green_icon; msg = "Recording"; cmd = Properties.Settings.Default.OnRecordEnd; //if (string.IsNullOrEmpty(Properties.Settings.Default.OnRecordEnd) == false) // System.Diagnostics.Process.Start(Properties.Settings.Default.OnRecordEnd); break; case RecStatus.eRecording.Recording: tmp = Properties.Resources.Button_Blank_Red_icon; msg = "Recording"; break; } this.Invoke(new MethodInvoker(() => { this.Icon = tmp; statusIcon.Icon = tmp; if (string.IsNullOrEmpty(cmd) == false) { // CreateObject("Wscript.Shell").Run "C:\Home\bin\Syncthing\Synthing_Start.bat", 0, False //System.Diagnostics.Process.Start($"{cmd.Trim()} {DateTime.Now} msg"); System.Diagnostics.Process.Start(cmd); } })); string line = $"{string.Join(",",DateTime.Now,msService.Server,msg)}{System.Environment.NewLine}"; this.Invoke(new MethodInvoker(() => { textBox1.AppendText(line); })); if (string.IsNullOrEmpty(Properties.Settings.Default.Logfile) == false) { File.AppendAllText(Properties.Settings.Default.Logfile, line, Encoding.UTF8); } CutTextBox(); }