...
Code Block |
---|
// event args which will be used only when we need to pass additional data there, otherwise null public interface ILinkableComponentEventArgs { EventType Type { get; } string Description { get; } DateTime Time { get; } IExchangeItem ChangedItem { get; } bool Stop { get; set; } // used if simulation should be stopped! } // C# way public delegateenum void LinkableComponentEventHandler(object source, ILinkableComponentEventArgs args); public interface ILinkableComponent { event LinkableComponentEventHandler Progressed; } EventType { Warning, Informative, ValueOutOfRange, GlobalProgress, TimeStepProgres, DataChanged, TargetBeforeGetValuesCall, SourceAfterGetValuesCall, SourceBeforeGetValuesReturn, TargetAfterGetValuesReturn, Other } // JavaC# way public interface LinkableComponentEventHandler : Observable { public delegate void setLinkableComponentEventArgsLinkableComponentEventHandler(ILinkableComponentEventArgs args); object source, ILinkableComponentEventArgs getLinkableComponentEventArgs(args); } public interface ILinkableComponent { event LinkableComponentEventHandler getProgressedEvent()Progressed; } |
From usage point of view it will simplify a lot since:
- User will not need to implement anything when implementing ILinkableComponent (minus 5 methods!)
- User will need only to call event when necessary.
- Differences between Java and C# will be really only in syntax since event in C# is almost equal to Java Observable.
Example of usage:
Code Block |
---|
public void SubscribeToComponent() { ILinkableComponent c;// Java way (Observable is a class, Observer is an interface!) public class LinkableComponentObservable c.Progressed += c_Progressed; // subscribe to events in component extends Observable { } public void c_Progressedupdate(objectObserver sendero, ILinkableComponentEventArgs args) { EventType eventType = args.EventType; // STOP THE SIMULATION! args.Stop = true; } //public somewhere in the component event should be fired in the following way: ... interface ILinkableComponent if(Progressed != null) { public LinkableComponentObservable Progressed(this, new LinkableComponentEventArgs(....)) getObservable(); } .... |
Logging in the OpenMI SDK
...