public override bool Equals(object obj) { if (!(obj is HandlerRegistration <ArgsType>)) { return(false); } HandlerRegistration <ArgsType> other = (HandlerRegistration <ArgsType>)obj; return( this.Registrator == other.Registrator && this.Handler.Equals(other.Handler)); }
public bool Deregister(TerrariaPlugin registrator, HookHandler <ArgsType> handler) { if (registrator == null) { throw new ArgumentNullException("registrator"); } if (handler == null) { throw new ArgumentNullException("handler"); } var registration = new HandlerRegistration <ArgsType> { Registrator = registrator, Handler = handler }; lock (this.alterRegistrationsLock) { int registrationIndex = this.registrations.IndexOf(registration); if (registrationIndex == -1) { return(false); } var registrationsClone = new List <HandlerRegistration <ArgsType> >(this.registrations.Count); for (int i = 0; i < this.registrations.Count; i++) { if (i != registrationIndex) { registrationsClone.Add(this.registrations[i]); } } Interlocked.Exchange(ref this.registrations, registrationsClone); } return(true); }
public void Register(TerrariaPlugin registrator, HookHandler <ArgsType> handler, int priority) { if (registrator == null) { throw new ArgumentNullException("registrator"); } if (handler == null) { throw new ArgumentNullException("handler"); } var newRegistration = new HandlerRegistration <ArgsType> { Registrator = registrator, Handler = handler, Priority = priority }; lock (this.alterRegistrationsLock) { var registrationsClone = new List <HandlerRegistration <ArgsType> >(this.registrations.Count); registrationsClone.AddRange(this.registrations); // Highest priority goes up in the list, first registered wins if priority equals. int insertionIndex = registrations.Count; for (int i = 0; i < registrationsClone.Count; i++) { if (registrationsClone[i].Priority < priority) { insertionIndex = i; break; } } registrationsClone.Insert(insertionIndex, newRegistration); Interlocked.Exchange(ref this.registrations, registrationsClone); } }