public T GetInstance <T>() { object instance = new TmEvent(); T retv = (T)instance; return(retv); }
public void Dispatch(object eventType, object data) { //Scrub the data to make eventType and data conform if possible if (eventType == null) { throw new EventDispatcherException("Attempt to Dispatch to null.\ndata: " + data, EventDispatcherExceptionType.EVENT_KEY_NULL); } else if (eventType is IEvent) { //Client provided a full-formed event data = eventType; eventType = (data as IEvent).type; } else if (data == null) { //Client provided just an event ID. Create an event for injection data = new TmEvent(eventType, this, null); } else if (data is IEvent) { //Client provided both an evertType and a full-formed IEvent (data as IEvent).type = eventType; } else { //Client provided an eventType and some data which is not a IEvent. data = new TmEvent(eventType, this, data); } bool continueDispatch = true; if (triggerClients != null) { isTriggeringClients = true; foreach (ITriggerable trigger in triggerClients) { if (!trigger.Trigger(eventType, data)) { continueDispatch = false; } } if (triggerClientRemovals != null) { flushRemovals(); } isTriggeringClients = false; } if (!continueDispatch) { return; } IEventBinding binding = GetBinding(eventType) as IEventBinding; if (binding == null) { return; } object[] callbacks = binding.value as object[]; if (callbacks == null) { return; } int bb = callbacks.Length; for (int b = 0; b < bb; b++) { object callback = callbacks [b]; object[] parameters = null; if (callback is EventCallback) { parameters = new object[1]; parameters [0] = data; EventCallback evtCb = callback as EventCallback; try { evtCb(parameters [0] as IEvent); } catch (InvalidCastException) { object tgt = evtCb.Target; string methodName = (callback as Delegate).Method.Name; string message = "An EventCallback is attempting an illegal cast. One possible reason is not typing the payload to IEvent in your callback. Another is illegal casting of the data.\nTarget class: " + tgt + " method: " + methodName; throw new EventDispatcherException(message, EventDispatcherExceptionType.TARGET_INVOCATION); } } else if (callback is EmptyCallback) { parameters = new object[0]; EmptyCallback emptyCb = callback as EmptyCallback; emptyCb(); } } }