Esempio n. 1
0
 public void ScheduleEvent(string name, IEventSubject subject, TimeSpan when, Action<IMultiplayerServer> action)
 {
     lock (EventLock)
     {
         long _when = Stopwatch.ElapsedTicks + when.Ticks;
         if (!Subjects.Contains(subject))
         {
             Subjects.Add(subject);
             subject.Disposed += Subject_Disposed;
         }
         int i;
         for (i = 0; i < Events.Count; i++)
         {
             if (Events[i].When > _when)
                 break;
         }
         Events.Insert(i, new ScheduledEvent
         {
             Name = name,
             Subject = subject,
             When = _when,
             Action = action
         });
     }
 }
Esempio n. 2
0
 public void ScheduleEvent(string name, IEventSubject subject, TimeSpan when, Action <IMultiplayerServer> action)
 {
     lock (EventLock)
     {
         long _when = Stopwatch.ElapsedTicks + when.Ticks;
         if (!Subjects.Contains(subject))
         {
             Subjects.Add(subject);
             subject.Disposed += Subject_Disposed;
         }
         int i;
         for (i = 0; i < Events.Count; i++)
         {
             if (Events[i].When > _when)
             {
                 break;
             }
         }
         Events.Insert(i, new ScheduledEvent
         {
             Name    = name,
             Subject = subject,
             When    = _when,
             Action  = action
         });
     }
 }
Esempio n. 3
0
        public void ScheduleEvent(string name, IEventSubject subject, TimeSpan when, Action <IMultiPlayerServer> action, [CallerMemberName] string source = null)
        {
            if (!Constants.IgnoredEvents.Contains(name))
            {
                var subjectLine = subject != null ? $" on subject {subject?.GetType().Name}" : string.Empty;
                var sourceLine  = source != null ? $" from '{source}'" : string.Empty;
                Server.Trace.TraceEvent(TraceEventType.Verbose, 0, $"scheduling event '{name}'{subjectLine}{sourceLine}");
            }

            if (DisabledEvents.Contains(name))
            {
                return;
            }

            var due = Stopwatch.ElapsedTicks + when.Ticks;

            if (subject != null && !Subjects.Contains(subject))
            {
                Subjects.Add(subject);
                subject.Disposed += Subject_Disposed;
            }

            var queue = when.TotalSeconds > 3 ? LaterEventQueue : ImmediateEventQueue;

            queue.Enqueue(new ScheduledEvent
            {
                Name    = name,
                Subject = subject,
                When    = due,
                Action  = action
            });
        }
Esempio n. 4
0
 public void ScheduleEvent(IEventSubject subject, DateTime when, Action<IMultiplayerServer> action)
 {
     lock (EventLock)
     {
         if (!Subjects.Contains(subject))
         {
             Subjects.Add(subject);
             subject.Disposed += Subject_Disposed;
         }
         Events.Add(new ScheduledEvent { Subject = subject, When = when, Action = action });
     }
 }
Esempio n. 5
0
 public void ScheduleEvent(IEventSubject subject, DateTime when, Action<IMultiplayerServer> action)
 {
     lock (EventLock)
     {
         if (!Subjects.Contains(subject))
         {
             Subjects.Add(subject);
             subject.Disposed += Subject_Disposed;
         }
         int i;
         for (i = 0; i < Events.Count; i++)
         {
             if (Events[i].When > when)
                 break;
         }
         Events.Insert(i, new ScheduledEvent { Subject = subject, When = when, Action = action });
     }
 }
Esempio n. 6
0
        public void ScheduleEvent(string name, IEventSubject subject, TimeSpan when, Action <IMultiplayerServer> action)
        {
            if (DisabledEvents.Contains(name))
            {
                return;
            }
            long _when = Stopwatch.ElapsedTicks + when.Ticks;

            if (subject != null && !Subjects.Contains(subject))
            {
                Subjects.Add(subject);
                subject.Disposed += Subject_Disposed;
            }
            var queue = when.TotalSeconds > 3 ? LaterEventQueue : ImmediateEventQueue;

            queue.Enqueue(new ScheduledEvent {
                Name    = name,
                Subject = subject,
                When    = _when,
                Action  = action
            });
        }
Esempio n. 7
0
 public void ScheduleEvent(IEventSubject subject, DateTime when, Action <IMultiplayerServer> action)
 {
     lock (EventLock)
     {
         if (!Subjects.Contains(subject))
         {
             Subjects.Add(subject);
             subject.Disposed += Subject_Disposed;
         }
         int i;
         for (i = 0; i < Events.Count; i++)
         {
             if (Events[i].When > when)
             {
                 break;
             }
         }
         Events.Insert(i, new ScheduledEvent {
             Subject = subject, When = when, Action = action
         });
     }
 }