2021-08-21 00:55:33 -04:00
|
|
|
using System;
|
2021-09-01 01:16:29 -04:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Linq;
|
|
|
|
using System.Threading;
|
|
|
|
using System.Threading.Tasks;
|
2021-08-21 00:55:33 -04:00
|
|
|
using director;
|
2021-09-01 01:16:29 -04:00
|
|
|
using franz;
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
using Schedulable.Show;
|
2021-08-21 00:55:33 -04:00
|
|
|
|
|
|
|
namespace ShowHandlers
|
|
|
|
{
|
2021-09-01 01:16:29 -04:00
|
|
|
public class YoutubeHandler : ShowHandler
|
2021-08-21 00:55:33 -04:00
|
|
|
{
|
2021-09-01 01:16:29 -04:00
|
|
|
private YoutubeRelease config;
|
|
|
|
private List<string> agentsPresent = new List<string>();
|
|
|
|
private bool essentialChecksPassed = false;
|
|
|
|
private bool allChecksPassed = false;
|
|
|
|
private readonly AutoResetEvent checkSignal = new AutoResetEvent(false);
|
|
|
|
public override void Handle(iCalHoopJumping.CalendarOccurrence evt)
|
2021-08-21 00:55:33 -04:00
|
|
|
{
|
2021-09-01 01:16:29 -04:00
|
|
|
config = JsonConvert.DeserializeObject<YoutubeRelease>(Program.conf.show_template_yt_release);
|
|
|
|
config.PreShow.AgentsNeeded = config.PreShow.AgentsNeeded.Select(s => s.ToLower());
|
|
|
|
Telefranz.Instance.addHandler<silver_messages.global.report>(agentReports);
|
|
|
|
Task.Run(() => PreShow(evt));
|
|
|
|
if(evt.OccurrenceStart > DateTime.Now)
|
|
|
|
{
|
|
|
|
Task.WaitAll(Task.Delay(evt.OccurrenceStart - DateTime.Now));
|
|
|
|
}
|
|
|
|
PostShow(evt);
|
|
|
|
}
|
|
|
|
~YoutubeHandler()
|
|
|
|
{
|
|
|
|
Telefranz.Instance.removeHandler<silver_messages.global.report>(agentReports);
|
|
|
|
}
|
|
|
|
protected void PreShow(iCalHoopJumping.CalendarOccurrence evt)
|
|
|
|
{
|
|
|
|
Console.WriteLine($"it's the pre-show, showtime at: {evt.OccurrenceStart}");
|
|
|
|
agentsPresent.Clear();
|
|
|
|
essentialChecksPassed = false;
|
|
|
|
allChecksPassed = false;
|
|
|
|
Task.WaitAny(
|
|
|
|
Task.Delay(10)
|
|
|
|
);
|
|
|
|
Telefranz.Instance.ProduceMessage(new silver_messages.global.sound_off());
|
|
|
|
while(agentsPresent.Where(ap => !config.PreShow.AgentsNeeded.Contains(ap))?.Count() > 0)
|
|
|
|
{
|
|
|
|
checkSignal.WaitOne(TimeSpan.FromSeconds(45));
|
|
|
|
}
|
|
|
|
// //await sound offs for some timeout
|
|
|
|
// config.PreShow.AgentsNeeded;
|
|
|
|
// //once that's ok, await checks
|
|
|
|
// config.PreShow.Checks;
|
|
|
|
// //once that's ok, await first command, then start running them
|
|
|
|
// config.PreShow.Commands;
|
|
|
|
}
|
|
|
|
protected void agentReports(silver_messages.global.report r)
|
|
|
|
{
|
|
|
|
if(config.PreShow.AgentsNeeded?.FirstOrDefault(an => an.ToLower() == r.name.ToLower()) != null)
|
|
|
|
{
|
|
|
|
lock(agentsPresent)
|
|
|
|
{
|
|
|
|
agentsPresent.Add(r.name.ToLower());
|
|
|
|
checkSignal.Set();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
protected void PostShow(iCalHoopJumping.CalendarOccurrence evt)
|
|
|
|
{
|
|
|
|
Console.WriteLine("can't do this bit without understanding when a show ends, sooo.");
|
2021-08-21 00:55:33 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|