Ejemplo n.º 1
0
        private List <PeerInfo> signalHandlerThreads(List <PeerInfo> waiters)
        {
            var deadWaiters = new List <PeerInfo>();

            foreach (PeerInfo waiter in waiters)
            {
                // TODO: optimize in evening in case if waiter is current instanse
                EventWaitHandle notifier;
                bool            alive = MutextHelper.TryOpenExistingEventWaitHandle(waiter.WaiterName, out notifier);
                if (alive)
                {
                    EventWaitHandle responder;
                    MutextHelper.TryOpenExistingEventWaitHandle(waiter.ResponderName, out responder);
                    notifier.Set();
                    try
                    {
                        responder.WaitOne(_peerResponce);
                    }
                    catch (AbandonedMutexException)//peer crashed without Disposing
                    {
                        deadWaiters.Add(waiter);
                    }
                }
                else
                {
                    deadWaiters.Add(waiter); // peer was closed without Disposing
                }
            }
            return(deadWaiters);
        }
Ejemplo n.º 2
0
 public LocalInterProcessEvent(string name)
 {
     _name             = name;
     _readerWriterLock = MutextHelper.AttachToMutex(_name + "Peer2Peer.ReaderWriter");
     _me = new LocalPeer(name);
     _eventWaitersRegistry = new MemoryMappedFileChannel(_name + "Peer2Peer.Registry", MAX_BYTES);
     _eventData            = new MemoryMappedFileChannel(_name + "Peer2Peer.Data", MAX_BYTES);
 }
Ejemplo n.º 3
0
 public LocalPeer(string eventName)
 {
     PeerId        = string.Format("event:{0},class:{1},pid:{2},appdomain:{3}", eventName, this.GetType().Name, Process.GetCurrentProcess().Id, AppDomain.CurrentDomain.Id);
     WaiterName    = PeerId + " Waiter";
     Waiter        = MutextHelper.AttachToEventWaitHandle(WaiterName, EventResetMode.AutoReset);
     ResponderName = PeerId + " Responder";
     Responder     = MutextHelper.AttachToEventWaitHandle(ResponderName, EventResetMode.AutoReset);
 }