public Task Publish(CoolEvent @event) { var eventProcessorType = typeof(IEventProcessor <>).MakeGenericType(@event.GetType()); dynamic eventProcessor = ServiceLocator.Current.GetInstance(eventProcessorType); return(eventProcessor.Process((dynamic)@event)); }
private Dictionary <int, List <CoolEvent> > GetDictionary(Fragment <FaceEvent>[] fragments) { Dictionary <int, List <CoolEvent> > dic = new Dictionary <int, List <CoolEvent> >(); foreach (var fragment in fragments) { var startTime = fragment.Start; var interval = fragment.Interval; for (int momentId = 0; momentId < fragment.Events.Length; momentId++) { //Time of current fragment long time = startTime + momentId * (long)interval; foreach (var face in fragment.Events[momentId]) { CoolEvent faceEvent = new CoolEvent { Id = face.Id, startTime = time }; //Microsoft returns coordinates within range [0; 1], where 0 = 0, 1 = full width faceEvent.rec.Height = Convert.ToInt32(_videoHeight * face.Height); faceEvent.rec.Width = Convert.ToInt32(_videoWidth * face.Width); faceEvent.rec.Left = Convert.ToInt32(_videoWidth * face.X); //Sometimes it returns negative numbers if (faceEvent.rec.Left < 0) { faceEvent.rec.Left = 0; } faceEvent.rec.Top = Convert.ToInt32(_videoHeight * face.Y); if (faceEvent.rec.Top < 0) { faceEvent.rec.Top = 0; } //Sometimes top right corner or bottom left corner outside the coordinates if (faceEvent.rec.Height + faceEvent.rec.Top > _videoHeight) { faceEvent.rec.Height = _videoHeight - faceEvent.rec.Top; } if (faceEvent.rec.Width + faceEvent.rec.Left > _videoWidth) { faceEvent.rec.Width = _videoWidth - faceEvent.rec.Left; } if (!dic.Keys.Contains(faceEvent.Id)) { dic[faceEvent.Id] = new List <CoolEvent>(); } dic[faceEvent.Id].Add(faceEvent); } } } return(dic); }
public Task Publish(CoolEvent @event) { return(InmemoryBus.Publish(@event)); }