private void EnqueueEvents(ClientMessage.ReadStreamEventsForwardCompleted message)
 {
     for (int index = 0; index < message.Events.Length; index++)
     {
         var         @event        = message.Events[index].Event;
         var         @link         = message.Events[index].Link;
         EventRecord positionEvent = (link ?? @event);
         var         queue         = GetStreamQueue(positionEvent);
         //TODO: progress calculation below is incorrect.  sum(current)/sum(last_event) where sum by all streams
         var tfPosition =
             positionEvent.Metadata.ParseCheckpointTagJson().Position;
         var progress     = 100.0f * (link ?? @event).EventNumber / message.LastEventNumber;
         var pendingEvent = new PendingEvent(@event, positionEvent, tfPosition, progress);
         queue.Enqueue(pendingEvent);
     }
 }
Пример #2
0
    /// <summary>
    /// Executes any pending events.
    /// </summary>
    /// <param name="maxDuration">The maximum amount of time (in milliseconds) to spend executing events.  This method can run longer than this,
    /// no new events will be executed after the given time.</param>
    public void Execute(float maxDuration = 100f)
    {
        if (pendingEvents.Count > 0)
        {
            executionStopwatch.Reset();
            executionStopwatch.Start();

            while (pendingEvents.Count > 0 && executionStopwatch.ElapsedMilliseconds < maxDuration)
            {
                PendingEvent nextEvent = pendingEvents.Dequeue();
                nextEvent.Callback(nextEvent.EventId, nextEvent.Data);
            }

            executionStopwatch.Stop();
        }
    }
Пример #3
0
        private SendGridMessage GetReplyAppointmentTemplate(bool isApproved, PendingEvent singleEvent)
        {
            string LineTwo = "";

            if (!string.IsNullOrEmpty(singleEvent.Location.LineTwo))
            {
                LineTwo = "< tr >< td ></ td >< td >" + singleEvent.Location.LineTwo + "</ td ></ tr >";
            }

            string msg1 = "<table style='border:2px solid grey; width:100%; max-width: 550px; margin: 5px; text-align:left; padding: 20px'>"
                          + "<tr><td><b>Service</b></td><td>" + singleEvent.ServiceType + "</td></tr>"
                          + "<tr><td><b>Date</b></td><td>" + singleEvent.StartTime.ToShortDateString() + "</td></tr>"
                          + "<tr><td><b>Start</b></td><td>" + singleEvent.StartTime.ToShortTimeString() + "</td></tr>"
                          + "<tr><td><b>End</b></td><td>" + singleEvent.EndTime.ToShortTimeString() + "</td></tr>"
                          + "<tr><td><b>Address</b></td><td>" + singleEvent.Location.LineOne + "</td></tr>"
                          + LineTwo
                          + "<tr><td></td><td>" + singleEvent.Location.City + ", " + singleEvent.Location.State.Code + ", " + singleEvent.Location.Zip + "</td></tr>"
                          + "<tr><td colspan='2'>This was created " + (DateTime.Now - singleEvent.DateCreated).Days + " day(s) ago.</td></tr></table>";

            string msg2 = (isApproved)
                ? "Your appointment is now set!"
                : "Unfortunately, we need to reschedule.";

            string path     = _directory + "\\EmailTemplates\\ReplyAppointment.html";
            string fileHtml = File.ReadAllText(path)
                              .Replace("{{Sender_Name}}", "BodyWork")
                              .Replace("{{loginUrl}}", "https://*****:*****@bodyworkbooker.com", "Example User");
            string       subject          = "Appointment Status Update - BodyWork";
            EmailAddress to               = new EmailAddress(singleEvent.Email, "Example User");
            string       plainTextContent = "Login to see the details of your appointment.";
            string       htmlContent      = fileHtml;

            SendGridMessage msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);

            return(msg);
        }
Пример #4
0
        private void OnRename(object sender, RenamedEventArgs e)
        {
            var pendingEvent = new PendingEvent {
                ChangeType = e.ChangeType, RenamedEventArgs = e
            };

            _pendingEvents.AddOrUpdate(e.FullPath, pendingEvent, (key, existingEvent) =>
            {
                existingEvent.ChangeType       = pendingEvent.ChangeType;
                existingEvent.RenamedEventArgs = pendingEvent.RenamedEventArgs;
                return(existingEvent);
            });
            if (!_timerStarted)
            {
                _timer.Change(100, 100);
                _timerStarted = true;
            }
        }
Пример #5
0
        private void FireEvent(string path, PendingEvent evt)
        {
            switch (evt.ChangeType)
            {
            case WatcherChangeTypes.Changed:
            case WatcherChangeTypes.Created:
            case WatcherChangeTypes.All:
                if (Change != null)
                {
                    Change(path);
                }
                break;

            case WatcherChangeTypes.Deleted:
                if (Delete != null)
                {
                    Delete(path);
                }
                break;

            case WatcherChangeTypes.Renamed:
                if (!Directory.Exists(evt.RenamedEventArgs.FullPath))
                {
                    if (Rename != null)
                    {
                        Rename(evt.RenamedEventArgs.OldFullPath, evt.RenamedEventArgs.FullPath);
                    }
                }
                else
                {
                    foreach (var newFilePath in Directory.GetFiles(evt.RenamedEventArgs.FullPath, "*.*", SearchOption.AllDirectories))
                    {
                        if (Rename != null)
                        {
                            Rename(newFilePath.Replace(evt.RenamedEventArgs.FullPath, evt.RenamedEventArgs.OldFullPath), newFilePath);
                        }
                    }
                }
                break;
            }
        }
        public void setup()
        {
            evt = new PendingEvent
            {
                files = new List <Guid>()
                {
                    Guid.NewGuid()
                },
                time_start = new DateTime(2010, 10, 20, 12, 40, 50, DateTimeKind.Local),
                time_end   = new DateTime(2010, 10, 22, 11, 22, 33, DateTimeKind.Local),
                title      = "title",
                type       = 1
            };


            util = new Mock <IPendingToResourceUtil>();
            util.SetReturnsDefault <List <PendingFileData> >(new List <PendingFileData>());
            util.SetReturnsDefault <string>(string.Empty);

            action = new PendingToResource(util.Object);
        }
 private TFPos GetTargetEventPosition(PendingEvent head)
 {
     return(head.TfPosition);
 }
Пример #8
0
 public Task QueueEvent(PendingEvent pendingEvent)
 {
     this.PendingEvents.Add(pendingEvent);
     return(Task.CompletedTask);
 }
Пример #9
0
 public object PendingEventToEvent(PendingEvent pendingEvent)
 {
     return(JsonConvert.DeserializeObject(pendingEvent.Content, _typeResolver.Get(pendingEvent.EventType)));
 }
Пример #10
0
        public async Task ReplyAppointmentEmail(bool isApproved, PendingEvent singleEvent)
        {
            SendGridMessage msg = GetReplyAppointmentTemplate(isApproved, singleEvent);

            await Send(msg);
        }