private static void Live(Production production) { Console.WriteLine("Opening RabbitMQ Connections..."); IRecieveRepository <Wax3Data> wax3Reciever = new RabbitMqStreamer <Wax3Data>(RabbitConnectionString, Exchange); ISendRepository <Wax3State> wax3StateSender = new RabbitMqStreamer <Wax3State>(RabbitConnectionString, Exchange); IRecieveRepository <RfidData> rfidReciever = new RabbitMqStreamer <RfidData>(RabbitConnectionString, Exchange); ISendRepository <RfidState> rfidStateSender = new RabbitMqStreamer <RfidState>(RabbitConnectionString, Exchange); IRecieveRepository <Wax3State> wax3StateReciever = new RabbitMqStreamer <Wax3State>(RabbitConnectionString, Exchange); IRecieveRepository <RfidState> rfidStateReciever = new RabbitMqStreamer <RfidState>(RabbitConnectionString, Exchange); IRecieveRepository <ApplianceEvent> appEventReciever = new RabbitMqStreamer <ApplianceEvent>(RabbitConnectionString, Exchange); ISendRepository <AoiState> aoiStateSender = new RabbitMqStreamer <AoiState>(RabbitConnectionString, Exchange); IRecieveRepository <AoiState> aoiStateReciever = new RabbitMqStreamer <AoiState>(RabbitConnectionString, Exchange); ISendRepository <ShotDecision> shotDecisionSender = new RabbitMqStreamer <ShotDecision>(RabbitConnectionString, Exchange); Console.WriteLine("Starting Activity Recognisers..."); IRecogniser <Wax3Data, Wax3State> wax3Recogniser = new Wax3Recogniser(); IRecogniser <RfidData, RfidState> rfidRecogniser = new RfidRecogniser(); Console.WriteLine("Starting Area of Interest Classifier..."); var aoiClassifier = new AoiClassifier(production); Console.WriteLine("Starting Auto-Director..."); var autoDirector = new AutoDirector(production); Console.WriteLine("Starting Stream Managers..."); IStreamManager wax3StreamManager = new StreamManager <Wax3Data, Wax3State>(wax3Reciever, wax3StateSender, wax3Recogniser); IStreamManager rfidStreamManager = new StreamManager <RfidData, RfidState>(rfidReciever, rfidStateSender, rfidRecogniser); IStreamManager aoiWax3StreamManager = new StreamManager <Wax3State, AoiState>(wax3StateReciever, aoiStateSender, aoiClassifier); IStreamManager aoiRfidStreamManager = new StreamManager <RfidState, AoiState>(rfidStateReciever, aoiStateSender, aoiClassifier); IStreamManager aoiAppStreamManager = new StreamManager <ApplianceEvent, AoiState>(appEventReciever, aoiStateSender, aoiClassifier); IStreamManager shotStreamManager = new StreamManager <AoiState, ShotDecision>(aoiStateReciever, shotDecisionSender, autoDirector); wax3StreamManager.Start(); rfidStreamManager.Start(); Console.WriteLine("Recognisers Running."); aoiWax3StreamManager.Start(); aoiRfidStreamManager.Start(); aoiAppStreamManager.Start(); Console.WriteLine("Area of Interest Classifier runnning."); shotStreamManager.Start(); Console.WriteLine("Auto-Director running."); var timer = new Timer((state) => { wax3Recogniser.UpdateClock(DateTime.Now); rfidRecogniser.UpdateClock(DateTime.Now); aoiClassifier.UpdateClock(DateTime.Now); autoDirector.UpdateClock(DateTime.Now); }, null, TickPeriod, Timeout.Infinite); Console.WriteLine("Type \"exit\" to terminate process:"); while ((Console.ReadLine().ToLower()) != "exit") { } Console.WriteLine("Terminating Process..."); timer.Dispose(); wax3StreamManager.Stop(); rfidStreamManager.Stop(); aoiWax3StreamManager.Stop(); aoiRfidStreamManager.Stop(); aoiAppStreamManager.Stop(); shotStreamManager.Stop(); }
private static void Replay(Production production) { Console.WriteLine("Opening MongoDB Connections..."); IReadOnlyRepository <Wax3Data> wax3Repository = new MongoRepository <Wax3Data>(MongoDBConnectionString); IReadWriteRepository <Wax3State> wax3StateRepository = new MongoRepository <Wax3State>(MongoDBConnectionString); IReadOnlyRepository <RfidData> rfidRepository = new MongoRepository <RfidData>(MongoDBConnectionString); IReadWriteRepository <RfidState> rfidStateRepository = new MongoRepository <RfidState>(MongoDBConnectionString); IReadOnlyRepository <ApplianceEvent> appEventRepository = new MongoRepository <ApplianceEvent>(MongoDBConnectionString); IReadWriteRepository <AoiState> aoiStateRepository = new MongoRepository <AoiState>(MongoDBConnectionString); IReadWriteRepository <ShotDecision> shotDecisionRepository = new MongoRepository <ShotDecision>(MongoDBConnectionString); Console.WriteLine("Reading Replay Dataset..."); var wax3Data = wax3Repository.GetAll().ToList().Where(d => d.Timestamp.Date == production.Takes.First().Media.First().StartTime.Date).OrderBy(d => d.Timestamp).AsQueryable(); var rfidData = rfidRepository.GetAll().ToList().Where(d => d.Timestamp.Date == production.Takes.First().Media.First().StartTime.Date).OrderBy(d => d.Timestamp).AsQueryable(); if (!wax3Data.Any() || !rfidData.Any()) { Console.WriteLine("No Data to Replay. Exiting."); return; } Console.WriteLine("Starting Activity Recognisers..."); IRecogniser <Wax3Data, Wax3State> wax3Recogniser = new Wax3Recogniser(); IRecogniser <RfidData, RfidState> rfidRecogniser = new RfidRecogniser(); Console.WriteLine(" Starting Replay Managers..."); IReplayManager <Wax3State> wax3ReplayManager = new ReplayManager <Wax3Data, Wax3State>(wax3Recogniser, wax3Data); IReplayManager <RfidState> rfidReplayManager = new ReplayManager <RfidData, RfidState>(rfidRecogniser, rfidData); Console.WriteLine(" Processing Datasets..."); wax3ReplayManager.Process(); rfidReplayManager.Process(); var wax3States = wax3ReplayManager.GetStates().AsQueryable(); var rfidStates = rfidReplayManager.GetStates().AsQueryable(); Console.WriteLine(" Inserting States into MongoDB..."); wax3StateRepository.InsertMany(wax3States); rfidStateRepository.InsertMany(rfidStates); Console.WriteLine("Starting Area of Interest Classifier..."); var aoiClassifier = new AoiClassifier(production); Console.WriteLine(" Starting Replay Managers..."); IReplayManager <AoiState> aoiReplayManager = new AoiReplayManager(aoiClassifier, wax3States, rfidStates, appEventRepository.GetAll()); Console.WriteLine(" Processing Datasets..."); aoiReplayManager.Process(); var aoiStates = aoiReplayManager.GetStates().AsQueryable(); Console.WriteLine(" Inserting States into MongoDB..."); aoiStateRepository.InsertMany(aoiStates); Console.WriteLine("Starting Auto-Director..."); var autoDirector = new AutoDirector(production); Console.WriteLine(" Starting Replay Managers..."); IReplayManager <ShotDecision> shotDecisionReplayManager = new ReplayManager <AoiState, ShotDecision>(autoDirector, aoiStates); Console.WriteLine(" Processing Datasets..."); shotDecisionReplayManager.Process(); var shotDecisions = shotDecisionReplayManager.GetStates(); Console.WriteLine(" Inserting Shot Decisions into MongoDB..."); shotDecisionRepository.InsertMany(shotDecisions); Console.WriteLine("Complete."); }