Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

...