コード例 #1
0
        /// <summary>
        /// Method stores copy of the event to internal queues so it later can
        /// be send to registered listeners.
        /// </summary>
        /// <param name="Event">Event to be queued.</param>
        /// <remarks>This method is called from thread where events are created (ie. simulation thread).
        /// We must make copy of the event for case caller changes it before it's delivered
        /// to registered listeners.
        /// Call blocks until event can be stored to internal queues.
        /// See <see cref="ProxyMultiThreadListener">ProxyMultiThreadListener</see>,
        /// <see cref="Initialize">Initialize</see> for more detail.
        /// </remarks>
        public void OnEvent(IEvent Event)
        {
            _mutex.WaitOne();

            IEvent eventCopy;
            bool   finished = false;

            // if event has special meaning, we don't have to copy it
            // because in such case we couldn't later determine it's meaning
            if (Event == CompositionManager.SimulationFinishedEvent ||
                Event == CompositionManager.SimulationFailedEvent)
            {
                eventCopy = Event;
                finished  = true;
            }
            else
            {
                eventCopy = new EventCopy(Event);
            }

            // add this event to registered listener queues
            foreach (InternalListenerRecord record in _internalListeners)
            {
                if (record.listenedEventTypes[(int)eventCopy.Type] ||
                    finished)
                {
                    record.eventQueue.Enqueue(eventCopy);
                }
            }

            _mutex.ReleaseMutex();
        }
コード例 #2
0
ファイル: Listeners.cs プロジェクト: XiBeichuan/hydronumerics
		/// <summary>
		/// Method stores copy of the event to internal queues so it later can
		/// be send to registered listeners.
		/// </summary>
		/// <param name="Event">Event to be queued.</param>
		/// <remarks>This method is called from thread where events are created (ie. simulation thread).
		/// We must make copy of the event for case caller changes it before it's delivered
		/// to registered listeners.
		/// Call blocks until event can be stored to internal queues.
		/// See <see cref="ProxyMultiThreadListener">ProxyMultiThreadListener</see>,
		/// <see cref="Initialize">Initialize</see> for more detail.
		/// </remarks>
		public void OnEvent( IEvent Event )
		{			
			_mutex.WaitOne();

			IEvent eventCopy;
			bool finished = false;

			// if event has special meaning, we don't have to copy it
			// because in such case we couldn't later determine it's meaning
			if( Event==CompositionManager.SimulationFinishedEvent
				|| Event==CompositionManager.SimulationFailedEvent )
			{
				eventCopy = Event;
				finished = true;
			}
			else
				eventCopy = new EventCopy( Event );			

			// add this event to registered listener queues
			foreach( InternalListenerRecord record in _internalListeners )
				if( record.listenedEventTypes[(int)eventCopy.Type] 
					|| finished )
					record.eventQueue.Enqueue( eventCopy );

			_mutex.ReleaseMutex();			
		}