示例#1
0
        internal void NotifySignalListeners(IAdapterSignal signal)
        {
            int signalHashCode = signal.GetHashCode();

            IList <SIGNAL_LISTENER_ENTRY> listenerList = null;

            lock (m_signalListeners)
            {
                if (m_signalListeners.ContainsKey(signalHashCode))
                {
                    // make a local copy of the listener list
                    listenerList = m_signalListeners[signalHashCode].ToArray();
                }
                else
                {
                    // can't do anything
                    return;
                }
            }

            // call out event handlers out of the lock to avoid
            // deadlock risk
            foreach (SIGNAL_LISTENER_ENTRY entry in listenerList)
            {
                IAdapterSignalListener listener = entry.Listener;
                object listenerContext          = entry.Context;
                listener.AdapterSignalHandler(signal, listenerContext);
            }
        }
示例#2
0
        internal uint NotifySignalListener(IAdapterSignal Signal)
        {
            if (Signal == null)
            {
                return(ERROR_INVALID_HANDLE);
            }

            int signalHashCode = Signal.GetHashCode();

            lock (this.signalListeners)
            {
                if (!this.signalListeners.ContainsKey(signalHashCode))
                {
                    Debug.WriteLine("Error: Signal not found!");
                    return(ERROR_SUCCESS);
                }

                IList <SIGNAL_LISTENER_ENTRY> listenerList = this.signalListeners[signalHashCode];
                foreach (SIGNAL_LISTENER_ENTRY entry in listenerList)
                {
                    IAdapterSignalListener listener = entry.Listener;
                    object listenerContext          = entry.Context;
                    listener.AdapterSignalHandler(Signal, listenerContext);
                }
            }

            return(ERROR_SUCCESS);
        }
示例#3
0
        public uint RegisterSignalListener(IAdapterSignal Signal, IAdapterSignalListener Listener, object ListenerContext)
        {
            if (Signal == null || Listener == null)
            {
                return(ERROR_INVALID_HANDLE);
            }

            int signalHashCode = Signal.GetHashCode();

            SIGNAL_LISTENER_ENTRY newEntry;

            newEntry.Signal   = Signal;
            newEntry.Listener = Listener;
            newEntry.Context  = ListenerContext;

            lock (this.signalListeners)
            {
                if (this.signalListeners.ContainsKey(signalHashCode))
                {
                    this.signalListeners[signalHashCode].Add(newEntry);
                }
                else
                {
                    IList <SIGNAL_LISTENER_ENTRY> newEntryList = new List <SIGNAL_LISTENER_ENTRY>();
                    newEntryList.Add(newEntry);
                    this.signalListeners.Add(signalHashCode, newEntryList);
                }
            }

            return(ERROR_SUCCESS);
        }
示例#4
0
        public uint NotifySignalListener(IAdapterSignal Signal)
        {
            if (Signal == null)
            {
                return(ERROR_INVALID_HANDLE);
            }

            int signalHashCode = Signal.GetHashCode();

            lock (this.signalListeners)
            {
                IList <SIGNAL_LISTENER_ENTRY> listenerList = this.signalListeners[signalHashCode];
                foreach (SIGNAL_LISTENER_ENTRY entry in listenerList)
                {
                    IAdapterSignalListener listener = entry.Listener;
                    object listenerContext          = entry.Context;
                    listener.AdapterSignalHandler(Signal, listenerContext);
                }
            }
            return(ERROR_SUCCESS);
        }
示例#5
0
        public uint RegisterSignalListener(
            IAdapterSignal Signal,
            IAdapterSignalListener Listener,
            object ListenerContext)
        {
            // sanity check
            if (Signal == null || Listener == null)
            {
                return(ERROR_INVALID_PARAMETER);
            }

            int signalHashCode = Signal.GetHashCode();

            SIGNAL_LISTENER_ENTRY newEntry;

            newEntry.Signal   = Signal;
            newEntry.Listener = Listener;
            newEntry.Context  = ListenerContext;

            lock (m_signalListeners)
            {
                if (m_signalListeners.ContainsKey(signalHashCode))
                {
                    m_signalListeners[signalHashCode].Add(newEntry);
                }
                else
                {
                    var newEntryList = new List <SIGNAL_LISTENER_ENTRY> {
                        newEntry
                    };
                    m_signalListeners.Add(signalHashCode, newEntryList);
                }
            }

            return(ERROR_SUCCESS);
        }
 public uint UnregisterSignalListener(
     IAdapterSignal Signal,
     IAdapterSignalListener Listener)
 {
     return ERROR_SUCCESS;
 }
        public uint RegisterSignalListener(
            IAdapterSignal Signal,
            IAdapterSignalListener Listener,
            object ListenerContext)
        {
            if (Signal == null || Listener == null)
            {
                return ERROR_INVALID_HANDLE;
            }

            int signalHashCode = Signal.GetHashCode();

            SIGNAL_LISTENER_ENTRY newEntry;
            newEntry.Signal = Signal;
            newEntry.Listener = Listener;
            newEntry.Context = ListenerContext;

            lock (this.signalListeners)
            {
                if (this.signalListeners.ContainsKey(signalHashCode))
                {
                    this.signalListeners[signalHashCode].Add(newEntry);
                }
                else
                {
                    IList<SIGNAL_LISTENER_ENTRY> newEntryList;

                    try
                    {
                        newEntryList = new List<SIGNAL_LISTENER_ENTRY>();
                    }
                    catch (OutOfMemoryException ex)
                    {
                        throw;
                    }

                    newEntryList.Add(newEntry);
                    this.signalListeners.Add(signalHashCode, newEntryList);
                }
            }

            return ERROR_SUCCESS;
        }
示例#8
0
 public uint UnregisterSignalListener(IAdapterSignal Signal, IAdapterSignalListener Listener)
 {
     return(_adapter.UnregisterSignalListener(Signal, Listener));
 }
示例#9
0
 public uint RegisterSignalListener(IAdapterSignal Signal, IAdapterSignalListener Listener, object ListenerContext)
 {
     return(_adapter.RegisterSignalListener(Signal, Listener, ListenerContext));
 }
示例#10
0
 public uint UnregisterSignalListener(
     IAdapterSignal Signal,
     IAdapterSignalListener Listener)
 {
     return(ERROR_SUCCESS);
 }
示例#11
0
 public uint RegisterSignalListener(
     IAdapterSignal Signal,
     IAdapterSignalListener Listener,
     object ListenerContext)
 {
     return ERROR_SUCCESS;
 }