示例#1
0
 public AsyncQueueReader(InputQueue <T> inputQueue, TimeSpan timeout, AsyncCallback callback, object state)
     : base(callback, state)
 {
     this.inputQueue = inputQueue;
     if (timeout != TimeSpan.MaxValue)
     {
         this.timer = new Timer(timerCallback, this, timeout, TimeSpan.FromMilliseconds(-1));//到期后将自身从队列中移除,只执行一次
     }
 }
示例#2
0
        internal UdpChannelListener(UdpTransportBindingElement bindingElement, BindingContext context)
            : base(context.Binding)
        {
            this.maxMessageSize = (int)bindingElement.MaxReceivedMessageSize;
            this.multicast      = bindingElement.Multicast;
            this.bufferManager  = BufferManager.CreateBufferManager(bindingElement.MaxBufferPoolSize, this.maxMessageSize);
            MessageEncodingBindingElement messageEncoderBindingElement = context.BindingParameters.Remove <MessageEncodingBindingElement>();

            if (messageEncoderBindingElement != null)
            {
                this.messageEncoderFactory = messageEncoderBindingElement.CreateMessageEncoderFactory();
            }
            else
            {
                this.messageEncoderFactory = UdpConstants.DefaultMessageEncoderFactory;
            }
            this.channelQueue       = new InputQueue <IInputChannel>();
            this.currentChannelLock = new object();
            this.listenSockets      = new List <Socket>(2);

            Uri baseAddress = context.ListenUriBaseAddress;

            if (baseAddress == null)
            {
                if (context.ListenUriMode == ListenUriMode.Unique)
                {
                    UriBuilder uriBuilder = new UriBuilder(this.Scheme, Dns.GetHostEntry(String.Empty).HostName);
                    uriBuilder.Path = Guid.NewGuid().ToString();
                    baseAddress     = uriBuilder.Uri;
                }
                else
                {
                    throw new InvalidOperationException(
                              "Null is only a supported value for ListenUriBaseAddress when using ListenUriMode.Unique.");
                }
            }

            this.InitializeUri(baseAddress, context.ListenUriRelativeAddress, context.ListenUriMode);
        }
示例#3
0
 internal UdpInputChannel(UdpChannelListener listener)
     : base(listener)
 {
     this.encoder      = listener.MessageEncoderFactory.Encoder;
     this.messageQueue = new InputQueue <Message>();
 }
示例#4
0
 public WaitQueueReader(InputQueue <T> inputQueue)
 {
     this.inputQueue = inputQueue;
     waitEvent       = new ManualResetEvent(false);
 }