public RaceEvent(DateTime time, Rider rider, Guid eventId)
 {
     Time    = time;
     Rider   = rider;
     EventId = eventId;
 }
 public ManualEvent(DateTime time, Rider rider, Guid eventId, string staffName) : base(time, rider, eventId)
 {
     StaffName = staffName;
 }
 public PenaltyEvent(DateTime time, Rider rider, string reason, int seconds, string staffName, Guid eventId = new Guid())
     : base(time, rider, eventId == Guid.Empty ? Guid.NewGuid() : eventId, staffName)
 {
     Reason  = reason;
     Seconds = seconds;
 }
 public DSQEvent(DateTime time, Rider rider, string staffName, string reason, Guid eventId = new Guid())
     : base(time, rider, eventId == Guid.Empty ? Guid.NewGuid() : eventId, staffName)
 {
     Reason = reason;
 }
 /// <summary>
 /// For the end timing gate we may receive a timing event before a rider id
 /// So we might have to set this field after we've matched it
 /// </summary>
 /// <param name="rider"></param>
 public void SetRider(Rider rider)
 {
     Rider = rider;
 }
 public TimingEvent(DateTime time, Rider rider, long microseconds, int gateId, Guid eventId = new Guid())
     : base(time, rider, eventId == Guid.Empty ? Guid.NewGuid() : eventId)
 {
     Microseconds = microseconds;
     GateId       = gateId;
 }
 public IdEvent(DateTime time, Rider rider, string unitId, Direction idType, Guid eventId = new Guid())
     : base(time, rider, eventId == Guid.Empty ? Guid.NewGuid() : eventId)
 {
     UnitId = unitId;
     IdType = idType;
 }