Transport no longer has a Stream member.
[versaplex.git] / versaplexd / vxevent.cs
blob2135b26f91eb9d4cec258ba51172954c9dc54c40
1 using System;
3 public enum EventContext {
4 MainThread,
5 ThreadPool
8 public interface IVxEvent {
9 void Run();
11 EventContext Context {
12 get;
16 public interface IFutureVxEvent : IVxEvent, IComparable {
17 DateTime When {
18 get;
22 public delegate void EmptyCallback();
23 public delegate void SingleArgCallback(object arg);
25 public class VxEvent : IVxEvent {
26 private readonly EmptyCallback cb;
28 public VxEvent(EmptyCallback cb)
30 this.cb = cb;
33 public void Run()
35 cb();
38 public EventContext Context {
39 get { return EventContext.MainThread; }
43 public class ArgVxEvent : IVxEvent {
44 private readonly SingleArgCallback cb;
45 private readonly object arg;
47 public ArgVxEvent(SingleArgCallback cb, object arg)
49 this.cb = cb;
50 this.arg = arg;
53 public void Run()
55 cb(arg);
58 public EventContext Context {
59 get { return EventContext.MainThread; }
63 public class FutureVxEvent : VxEvent, IFutureVxEvent {
64 private readonly DateTime when;
66 public FutureVxEvent(EmptyCallback cb, DateTime when) : base(cb)
68 this.when = when;
71 public FutureVxEvent(EmptyCallback cb, TimeSpan delta) : base(cb)
73 this.when = DateTime.Now + delta;
76 public DateTime When {
77 get { return when; }
80 public int CompareTo(object other)
82 if (!(other is IFutureVxEvent)) {
83 throw new ArgumentException("Other is not an IFutureVxEvent");
86 IFutureVxEvent o = (IFutureVxEvent)other;
87 return when.CompareTo(o.When);
91 public class ArgFutureVxEvent : ArgVxEvent, IFutureVxEvent {
92 private readonly DateTime when;
94 public ArgFutureVxEvent(SingleArgCallback cb, object arg, DateTime when)
95 : base(cb, arg)
97 this.when = when;
100 public ArgFutureVxEvent(SingleArgCallback cb, object arg, TimeSpan delta)
101 : base(cb, arg)
103 this.when = DateTime.Now + delta;
106 public DateTime When {
107 get { return when; }
110 public int CompareTo(object other)
112 if (!(other is IFutureVxEvent)) {
113 throw new ArgumentException("Other is not an IFutureVxEvent");
116 IFutureVxEvent o = (IFutureVxEvent)other;
117 return when.CompareTo(o.When);