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 }); } }
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 }); } }
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 }); }
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 }); } }
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 }); } }
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 }); }
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 }); } }