public PeerMessageDispatcher(PeerMessageQueueAdapter <ChannelInterfaceType, TChannel> queueHandler, PeerNodeImplementation peerNode, ChannelManagerBase channelManager, EndpointAddress to, Uri via) { this.quotaHelper = new PeerQuotaHelper(0x7fffffff); PeerNodeImplementation.ValidateVia(via); this.queueHandler = queueHandler; this.peerNode = peerNode; this.to = to; this.via = via; this.channelManager = channelManager; EndpointAddress address = null; this.securityProtocol = ((IPeerFactory)channelManager).SecurityManager.CreateSecurityProtocol <ChannelInterfaceType>(to, ServiceDefaults.SendTimeout); if (typeof(IDuplexChannel).IsAssignableFrom(typeof(ChannelInterfaceType))) { address = to; } PeerMessageFilter[] filters = new PeerMessageFilter[] { new PeerMessageFilter(via, address) }; peerNode.RegisterMessageFilter(this, this.via, filters, (ITransportFactorySettings)this.channelManager, new PeerNodeImplementation.MessageAvailableCallback(this.OnMessageAvailable), this.securityProtocol); this.registered = true; }
// internal message filtering internal void RegisterMessageFilter(object registrant, Uri via, PeerMessageFilter[] filters, ITransportFactorySettings settings, MessageAvailableCallback callback, SecurityProtocol securityProtocol) { MessageFilterRegistration registration = new MessageFilterRegistration(); registration.registrant = registrant; registration.via = via; registration.filters = filters; registration.settings = settings; registration.callback = callback; registration.securityProtocol = securityProtocol; lock (ThisLock) { messageFilters.Add(registrant, registration); RefCountedSecurityProtocol protocolWrapper = null; if (!this.uri2SecurityProtocol.TryGetValue(via, out protocolWrapper)) { protocolWrapper = new RefCountedSecurityProtocol(securityProtocol); this.uri2SecurityProtocol.Add(via, protocolWrapper); } else protocolWrapper.AddRef(); } }
internal void RegisterMessageFilter(object registrant, Uri via, PeerMessageFilter[] filters, ITransportFactorySettings settings, MessageAvailableCallback callback, SecurityProtocol securityProtocol) { MessageFilterRegistration registration = new MessageFilterRegistration { registrant = registrant, via = via, filters = filters, settings = settings, callback = callback, securityProtocol = securityProtocol }; lock (this.ThisLock) { this.messageFilters.Add(registrant, registration); RefCountedSecurityProtocol protocol = null; if (!this.uri2SecurityProtocol.TryGetValue(via, out protocol)) { protocol = new RefCountedSecurityProtocol(securityProtocol); this.uri2SecurityProtocol.Add(via, protocol); } else { protocol.AddRef(); } } }