Пример #1
0
 protected virtual void HandleChanged(IInputChannel sender, object newValue)
 {
     if (newValue is double)
     {
         this.rule.Value = (double)newValue;
     }
 }
Пример #2
0
 private static Task<Message> ReceiveAsync(IInputChannel channel)
 {
     return Task.Factory.FromAsync(
         (c, s) => ((IInputChannel)s).BeginReceive(c, s),
         r => ((IInputChannel)r.AsyncState).EndReceive(r),
         channel);
 }
        bool VerifiableDecryptionProtocol_Verify_Update(
            BigInteger c_1,
            IInputChannel input_channel)
        {
            BigInteger d_j    = input_channel.Recieve();
            BigInteger h_j_fp = input_channel.Recieve();

            // public key stored?
            String str = h_j_fp.ToString();

            if (!h_j.ContainsKey(str))
            {
                return(false);
            }
            // verify the in-group property
            if (!CheckElement(d_j))
            {
                return(false);
            }

            // invoke CP(d_j, h_j, c_1, g; x_j) as verifier
            if (!CP_Verify(d_j, h_j[str], c_1, g, input_channel, false))
            {
                return(false);
            }
            // update the value of $d$
            d = d * d_j;
            d = d * p;

            // finish
            return(true);
        }
Пример #4
0
 public LayeredDuplexChannel(ChannelManagerBase channelManager, IInputChannel innerInputChannel, EndpointAddress localAddress, IOutputChannel innerOutputChannel) : base(channelManager, innerInputChannel)
 {
     this.localAddress                = localAddress;
     this.innerOutputChannel          = innerOutputChannel;
     this.onInnerOutputChannelFaulted = new EventHandler(this.OnInnerOutputChannelFaulted);
     this.innerOutputChannel.Faulted += this.onInnerOutputChannelFaulted;
 }
Пример #5
0
        private TObjectType ReceiveMessage <TObjectType>()
        {
            Uri endpoint = new Uri("amqp:message_queue");
            IChannelListener <IInputChannel> listener = Util.GetBinding().BuildChannelListener <IInputChannel>(endpoint, new BindingParameterCollection());

            listener.Open();
            IInputChannel service = listener.AcceptChannel(TimeSpan.FromSeconds(10));

            service.Open();
            Message receivedMessage = service.Receive(TimeSpan.FromSeconds(10));

            Assert.NotNull(receivedMessage, "Message was not received");
            try
            {
                TObjectType receivedObject = receivedMessage.GetBody <TObjectType>();
                return(receivedObject);
            }
            catch (SerializationException)
            {
                Assert.Fail("Deserialized object not of correct type");
            }
            finally
            {
                receivedMessage.Close();
                service.Close();
                listener.Close();
            }

            return(default(TObjectType));
        }
 public LayeredDuplexChannel(ChannelManagerBase channelManager, IInputChannel innerInputChannel, EndpointAddress localAddress, IOutputChannel innerOutputChannel) : base(channelManager, innerInputChannel)
 {
     this.localAddress = localAddress;
     this.innerOutputChannel = innerOutputChannel;
     this.onInnerOutputChannelFaulted = new EventHandler(this.OnInnerOutputChannelFaulted);
     this.innerOutputChannel.Faulted += this.onInnerOutputChannelFaulted;
 }
Пример #7
0
        private void ReceiveNonTryMessages(TimeSpan channelTimeout, TimeSpan messageTimeout)
        {
            IChannelListener inputChannelParentListener;
            IInputChannel    inputChannel = this.RetrieveAsyncChannel(this.endpoint, channelTimeout, out inputChannelParentListener);

            inputChannel.Open();

            IAsyncResult[] resultArray = new IAsyncResult[MessageCount];
            try
            {
                for (int i = 0; i < MessageCount; i++)
                {
                    resultArray[i] = inputChannel.BeginReceive(messageTimeout, null, null);
                }

                for (int j = 0; j < MessageCount; j++)
                {
                    inputChannel.EndReceive(resultArray[j]);
                }
            }
            finally
            {
                IAsyncResult channelCloseResult = inputChannel.BeginClose(channelTimeout, null, null);
                Thread.Sleep(TimeSpan.FromMilliseconds(50.0)); // Dummy work
                inputChannel.EndClose(channelCloseResult);

                // Asynchronous listener close has not been implemented.
                ////IAsyncResult listenerCloseResult = inputChannelParentListener.BeginClose(channelTimeout, null, null);
                ////Thread.Sleep(TimeSpan.FromMilliseconds(50.0)); // Dummy work
                ////inputChannelParentListener.EndClose(listenerCloseResult);

                inputChannelParentListener.Close();
            }
        }
Пример #8
0
        private void ReceiveTryMessages(TimeSpan channelAcceptTimeout, TimeSpan messageReceiveTimeout)
        {
            IChannelListener <IInputChannel> listener = Util.GetBinding().BuildChannelListener <IInputChannel>(this.endpoint, new BindingParameterCollection());

            listener.Open();
            IInputChannel inputChannel  = listener.AcceptChannel(channelAcceptTimeout);
            IAsyncResult  channelResult = inputChannel.BeginOpen(channelAcceptTimeout, null, null);

            Thread.Sleep(TimeSpan.FromMilliseconds(50.0));
            inputChannel.EndOpen(channelResult);

            IAsyncResult[] resultArray = new IAsyncResult[MessageCount];

            for (int i = 0; i < MessageCount; i++)
            {
                resultArray[i] = inputChannel.BeginTryReceive(messageReceiveTimeout, null, null);
            }

            for (int j = 0; j < MessageCount; j++)
            {
                Message tempMessage;
                Assert.True(inputChannel.EndTryReceive(resultArray[j], out tempMessage), "Did not successfully receive message #{0}", j);
            }

            inputChannel.Close();
            listener.Close();
        }
Пример #9
0
 static void Main(string[] args)
 {
     try
     {
         //建立和发送端相同的通道栈
         BindingElement[] bindingElements = new BindingElement[3];
         bindingElements[0] = new TextMessageEncodingBindingElement();//文本编码
         //oneWayBindingElement() 传输通道支持数据报模式
         bindingElements[1] = new OneWayBindingElement();
         bindingElements[2] = new NamedPipeTransportBindingElement();//命名管道
         CustomBinding binding = new CustomBinding(bindingElements);
         //建立ChannelListner倾听者,接收数据
         IChannelListener <IInputChannel> listener = binding.BuildChannelListener <IInputChannel>(new Uri("net.pipe://localhost/InputService"), new BindingParameterCollection());
         listener.Open();//打开ChannelListner
         IInputChannel inputChannel = listener.AcceptChannel();
         //创建IInputChannel
         inputChannel.Open();                      //打开IInputChannel
         Console.WriteLine("开始接受消息..");
         Message message = inputChannel.Receive(); //接受并打印
         Console.WriteLine($"接收一条消息,action为{message.Headers.Action},Body为{message.GetBody<string>()}");
         message.Close();                          //关闭消息
         inputChannel.Close();                     //关闭通道
         listener.Close();                         //关闭监听器
         Console.Read();
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.ToString());
     }
     finally
     {
         Console.Read();
     }
 }
    public PedersenCommitmentScheme(
        int n,
        IInputChannel chanal,
        long fieldsize,
        long subgroupsize)

    {
        F_size = fieldsize;
        G_size = subgroupsize;
        Debug.Assert(n >= 1);

        // Initialize the parameters of the commitment scheme.
        p = chanal.Recieve();
        q = chanal.Recieve();
        k = chanal.Recieve();
        h = chanal.Recieve();

        System.Diagnostics.Debug.WriteLine("PedersenCommitmentScheme::PedersenCommitmentScheme p " + p.BitLength());
        System.Diagnostics.Debug.WriteLine("PedersenCommitmentScheme::PedersenCommitmentScheme q " + q.BitLength());
        System.Diagnostics.Debug.WriteLine("PedersenCommitmentScheme::PedersenCommitmentScheme k " + k.BitLength());
        System.Diagnostics.Debug.WriteLine("PedersenCommitmentScheme::PedersenCommitmentScheme h " + h.BitLength());

        g = new List <BigInteger>();
        for (int i = 0; i < n; i++)
        {
            g.Add(chanal.Recieve());
        }
    }
Пример #11
0
 public GrothSKC(
     int n,
     IInputChannel input_channel,
     long ell_e)
     :  this(n, input_channel, ell_e, TMCG_DDH_SIZE, TMCG_DLSE_SIZE)
 {
 }
Пример #12
0
 static void Main(string[] args)
 {
     try
     {
         //建立和发送端相同的通道栈
         BindingElement[] bindingElements = new BindingElement[3];
         bindingElements[0] = new TextMessageEncodingBindingElement();
         bindingElements[1] = new OneWayBindingElement();
         bindingElements[2] = new HttpTransportBindingElement();
         CustomBinding binding = new CustomBinding(bindingElements);
         //建立ChannelListner
         IChannelListener <IInputChannel> listener = binding.BuildChannelListener <IInputChannel>(new Uri("http://localhost/InputService"), new BindingParameterCollection());
         listener.Open();
         //创建IInputChannel
         IInputChannel inputChannel = listener.AcceptChannel();
         inputChannel.Open();
         Console.WriteLine("开始接受消息。。。");
         //接受并打印消息
         Message message = inputChannel.Receive();
         Console.WriteLine("接受到一条消息,action为:{0},body为:{1}", message.Headers.Action, message.GetBody <String>());
         message.Close();
         inputChannel.Close();
         listener.Close();
         Console.Read();
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.ToString());
     }
     finally
     {
         Console.Read();
     }
 }
Пример #13
0
        public bool VerifiableMaskingProtocol_Verify(
            BigInteger m,
            BigInteger c_1,
            BigInteger c_2,
            IInputChannel input_channel)
        {
            // verify the in-group properties
            if (!CheckElement(c_1) || !CheckElement(c_2))
            {
                return(false);
            }

            // invoke CP(c_1, c_2/m, g, h; r) as verifier
            if (ToolsMathBigInteger.AreCoprime(m, p))
            {
                return(false);
            }
            BigInteger foo = m.ModInverse(p);

            foo = foo * c_2;
            foo = foo % p;
            if (!CP_Verify(c_1, foo, g, h, input_channel, true))
            {
                return(false);
            }

            // finish
            return(true);
        }
Пример #14
0
 private static Task <Message> ReceiveAsync(IInputChannel channel)
 {
     return(Task.Factory.FromAsync(
                (c, s) => ((IInputChannel)s).BeginReceive(c, s),
                r => ((IInputChannel)r.AsyncState).EndReceive(r),
                channel));
 }
Пример #15
0
        /// <summary>
        /// Creates an EloquentObjects server with ability to specify custom settings and dependencies.
        /// </summary>
        /// <param name="address">Address of the server that hosts object. Can be prefixed with 'tcp://' for TCP binding or 'pipe://' for Named Pipes binding</param>
        /// <param name="settings">Custom settings</param>
        /// <param name="serializerFactory">Factory that can create serializer to be used for serializing/deserializing data sent between server and client</param>
        public EloquentServer(string address, EloquentSettings settings, [CanBeNull] ISerializerFactory serializerFactory = null)
        {
            _serializerFactory = serializerFactory ?? new DefaultSerializerFactory();

            var uri = new Uri(address);

            var scheme = uri.GetComponents(UriComponents.Scheme, UriFormat.Unescaped);

            var binding = new BindingFactory().Create(scheme, settings);

            var serverHostAddress = HostAddress.CreateFromUri(uri);

            _contractDescriptionFactory = new CachedContractDescriptionFactory(new ContractDescriptionFactory());

            try
            {
                _inputChannel = binding.CreateInputChannel(serverHostAddress);
            }
            catch (Exception e)
            {
                throw new IOException("Failed creating input channel", e);
            }

            _objectsRepository = new ObjectsRepository();

            _server = new Server(binding, _inputChannel, _objectsRepository);
        }
 private static Exception CreateReceiveTimedOutException(IInputChannel channel, TimeSpan timeout)
 {
     if (channel.LocalAddress != null)
     {
         return(new TimeoutException(System.ServiceModel.SR.GetString("ReceiveTimedOut", new object[] { channel.LocalAddress.Uri.AbsoluteUri, timeout })));
     }
     return(new TimeoutException(System.ServiceModel.SR.GetString("ReceiveTimedOutNoLocalAddress", new object[] { timeout })));
 }
Пример #17
0
 public bool Verify_interactive(
     BigInteger c,
     List <BigInteger> m,
     IInputChannel input_channel,
     IOutputChannel output_channel)
 {
     return(Verify_interactive(c, m, input_channel, output_channel, true));
 }
Пример #18
0
 // Token: 0x06001567 RID: 5479 RVA: 0x0000E5C2 File Offset: 0x0000C7C2
 public UserInputMap(string description, GameInputKey s, IInputChannel channel = null, bool isConfigurable = true, bool isEventSender = true, KeyCode prefix = KeyCode.None)
 {
     this._prefix        = prefix;
     this.IsConfigurable = isConfigurable;
     this.IsEventSender  = isEventSender;
     this.Channel        = channel;
     this.Slot           = s;
     this.Description    = description;
 }
 public DurableInstanceContextInputChannel(
     ChannelManagerBase channelManager,
     ContextType contextType,
     IInputChannel innerChannel)
     : base(channelManager, innerChannel)
 {
     this.contextType       = contextType;
     this.innerInputChannel = innerChannel;
 }
Пример #20
0
 internal InputChannelBinder(IInputChannel channel, Uri listenUri)
 {
     if (channel == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("channel");
     }
     this.channel   = channel;
     this.listenUri = listenUri;
 }
 public DurableInstanceContextInputChannel(
     ChannelManagerBase channelManager,
     ContextType contextType,
     IInputChannel innerChannel)
     : base(channelManager, innerChannel)
 {
     this.contextType = contextType;
     this.innerInputChannel = innerChannel;
 }
 void ProcessInput(IInputChannel input, Message message)
 {
     try {
         ProcessInputCore(input, message);
     } catch (Exception ex) {
         // FIXME: log it.
         Console.WriteLine(ex);
     }
 }
Пример #23
0
        private static void ReceiveMessages()
        {
            // Read messages from queue until queue is empty
            Console.WriteLine("Reading messages from queue {0}...", SampleManager.SessionlessQueueName);
            Console.WriteLine("Receiver Type: Receive and Delete");

            // Create channel listener and channel using NetMessagingBinding
            NetMessagingBinding             messagingBinding = new NetMessagingBinding("messagingBinding");
            EndpointAddress                 address          = SampleManager.GetEndpointAddress(SampleManager.SessionlessQueueName, serviceBusNamespace);
            TransportClientEndpointBehavior securityBehavior = new TransportClientEndpointBehavior();

            securityBehavior.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(serviceBusKeyName, serviceBusKey);

            IChannelListener <IInputChannel> inputChannelListener = null;
            IInputChannel inputChannel = null;

            try
            {
                inputChannelListener = messagingBinding.BuildChannelListener <IInputChannel>(address.Uri, securityBehavior);
                inputChannelListener.Open();
                inputChannel = inputChannelListener.AcceptChannel();
                inputChannel.Open();

                while (true)
                {
                    try
                    {
                        // Receive message from queue. If no more messages available, the operation throws a TimeoutException.
                        Message receivedMessage = inputChannel.Receive(receiveMessageTimeout);
                        SampleManager.OutputMessageInfo("Receive", receivedMessage);

                        // Since the message body contains a serialized string one can access it like this:
                        //string soapBody = receivedMessage.GetBody<string>();
                    }
                    catch (TimeoutException)
                    {
                        break;
                    }
                }

                // Close
                inputChannel.Close();
                inputChannelListener.Close();
            }
            catch (Exception)
            {
                if (inputChannel != null)
                {
                    inputChannel.Abort();
                }
                if (inputChannelListener != null)
                {
                    inputChannelListener.Abort();
                }
                throw;
            }
        }
 internal InputChannelBinder(IInputChannel channel, Uri listenUri)
 {
     if (channel == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("channel");
     }
     this.channel = channel;
     this.listenUri = listenUri;
 }
Пример #25
0
        internal static Message HelpReceive(IInputChannel channel, TimeSpan timeout)
        {
            Message message;

            if (!channel.TryReceive(timeout, out message))
            {
                throw Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility.ThrowHelperError(Microsoft.ServiceBus.Channels.InputChannel.CreateReceiveTimedOutException(channel, timeout));
            }
            return(message);
        }
Пример #26
0
 internal void Init(IInputChannel channel, Uri listenUri)
 {
     if (!((channel != null)))
     {
         Fx.Assert("InputChannelBinder.InputChannelBinder: (channel != null)");
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(channel));
     }
     _channel  = channel;
     ListenUri = listenUri;
 }
            public IChannelBinder EndAccept(IAsyncResult result)
            {
                IInputChannel channel = this.listener.EndAcceptChannel(result);

                if (channel == null)
                {
                    return(null);
                }
                return(new InputChannelBinder(channel, this.listener.Uri));
            }
            public IChannelBinder Accept(TimeSpan timeout)
            {
                IInputChannel channel = this.listener.AcceptChannel(timeout);

                if (channel == null)
                {
                    return(null);
                }
                return(new InputChannelBinder(channel, this.listener.Uri));
            }
 internal InputChannelBinder(IInputChannel channel, Uri listenUri)
 {
     if (!((channel != null)))
     {
         Fx.Assert("InputChannelBinder.InputChannelBinder: (channel != null)");
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("channel");
     }
     this.channel = channel;
     this.listenUri = listenUri;
 }
Пример #30
0
 internal InputChannelBinder(IInputChannel channel, Uri listenUri)
 {
     if (!((channel != null)))
     {
         Fx.Assert("InputChannelBinder.InputChannelBinder: (channel != null)");
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("channel");
     }
     this.channel   = channel;
     this.listenUri = listenUri;
 }
Пример #31
0
        internal override IInputChannel OnCreateInputChannel(SubscriberConfigurator configurator)
        {
            IInputChannel inputChannel = CreateInputChannel(configurator.BufferManager, configurator.QueueName);

            if (inputChannel == null)
            {
                throw new NoIncomingConnectionAcceptedException();
            }

            return(inputChannel);
        }
Пример #32
0
            public async Task <IChannelBinder> AcceptAsync(CancellationToken token)
            {
                IInputChannel channel = await listener.AcceptChannelAsync(token);

                if (channel == null)
                {
                    return(null);
                }

                return(new InputChannelBinder(channel, listener.Uri));
            }
Пример #33
0
 private static Exception CreateReceiveTimedOutException(IInputChannel channel, TimeSpan timeout)
 {
     if (channel.LocalAddress != null)
     {
         return(new TimeoutException(SR.Format(SR.ReceiveTimedOut, channel.LocalAddress.Uri.AbsoluteUri, timeout)));
     }
     else
     {
         return(new TimeoutException(SR.Format(SR.ReceiveTimedOutNoLocalAddress, timeout)));
     }
 }
Пример #34
0
        public ISubscription RegisterSubscription <T>(T instance, Action <ISubscriberConfigurator> configure = null)
        {
            var configurator = CreateConfigurator(configure);

            IInputChannel inputChannel = OnCreateInputChannel(configurator);

            IMessageFilter messageFilter = OnCreateMessageFilter(inputChannel);

            ISubscriptionDispatcher dispatcher = new SubscriptionDispatcher(configurator.ErrorSubscriber, BusId);

            return(new TypeSubscription(inputChannel, messageFilter, dispatcher, instance));
        }
Пример #35
0
 void worker(TimeSpan timeout, object state)
 {
     try
     {
         IInputChannel inputChannel = ChannelListener.AcceptChannel(timeout);
         Message       message      = inputChannel.Receive();
         Runtime.PublishOneWay(new PublishRequest(typeof(IPassThroughServiceContract), message.Headers.Action, message));
     }
     catch (TimeoutException)
     {
     }
 }
Пример #36
0
		void ProcessInput (IInputChannel input, Message message)
		{
			try {
				if (!MessageMatchesEndpointDispatcher (message, Runtime.CallbackDispatchRuntime.EndpointDispatcher))
					throw new EndpointNotFoundException (String.Format ("The request message has the target '{0}' with action '{1}' which is not reachable in this service contract", message.Headers.To, message.Headers.Action));
				new InputOrReplyRequestProcessor (Runtime.CallbackDispatchRuntime, input).ProcessInput (message);
			} catch (Exception ex) {
				// FIXME: log it.
				Console.WriteLine (ex);
			} finally {
				// unless it is closed by session/call manager, move it back to the loop to receive the next message.
				if (loop && input.State != CommunicationState.Closed)
					ProcessRequestOrInput (input);
			}
		}
Пример #37
0
		void ProcessRequestOrInput (IInputChannel input)
		{
			while (true) {
				if (!loop)
					return;

				if (receive_synchronously) {
					Message msg;
					if (input.TryReceive (receive_timeout, out msg))
						ProcessInput (input, msg);
				} else {
					input.BeginTryReceive (receive_timeout, TryReceiveDone, input);
					loop_handle.WaitOne (receive_timeout);
				}
			}
		}
 protected ReceiveMessageAndVerifySecurityAsyncResultBase(IInputChannel innerChannel, TimeSpan timeout, AsyncCallback callback, object state)
     : base(callback, state)
 {
     this.timeoutHelper = new TimeoutHelper(timeout);
     this.innerChannel = innerChannel;
 }
Пример #39
0
 internal override IMessageFilter OnCreateMessageFilter(IInputChannel channel)
 {
     return new NullMessageFilter();
 }
 protected MessagePumpSubscriptionBase(IInputChannel inputChannel, IMessageFilter messageFilter, IDispatcher dispatcher)
     : base(inputChannel, messageFilter, dispatcher)
 {
     _receiver = new Thread(MessagePump);
 }
		void ProcessInput (IInputChannel input, Message message)
		{
			try {
				ProcessInputCore (input, message);
			} catch (Exception ex) {
				// FIXME: log it.
				Console.WriteLine (ex);
			}
		}
		void ProcessInputCore (IInputChannel input, Message message)
		{
				bool isReply = message != null && Contract.Operations.Any (od => (od.DeclaringContract.CallbackContractType == od.DeclaringContract.ContractType || !od.InCallbackContract) && od.Messages.Any (md => md.Action == message.Headers.Action));
				if (isReply) {
					if (ReplyHandlerQueue.Count > 0) {
						if (isReply) {
							var h = ReplyHandlerQueue.Dequeue ();
							h (message);
							return;
						}
					}
				}
				
				if (message.IsFault) {
					Exception ex;
					var mf = MessageFault.CreateFault (message, 0x10000);
					if (FaultConverter.GetDefaultFaultConverter (message.Version).TryCreateException (message, mf, out ex)) // FIXME: get maxMessageSize somehow
						throw ex;
					else
						throw new FaultException (mf);
				}
				
				if (!MessageMatchesEndpointDispatcher (message, Runtime.CallbackDispatchRuntime.EndpointDispatcher))
					throw new EndpointNotFoundException (String.Format ("The request message has the target '{0}' with action '{1}' which is not reachable in this service contract", message.Headers.To, message.Headers.Action));
				new InputOrReplyRequestProcessor (Runtime.CallbackDispatchRuntime, input).ProcessInput (message);
		}
Пример #43
0
		void ProcessInput (IInputChannel input, Message message)
		{
			try {
				ProcessInputCore (input, message);
			} catch (Exception ex) {
				// FIXME: log it.
				Console.WriteLine (ex);
			} finally {
				// unless it is closed by session/call manager, move it back to the loop to receive the next message.
				if (loop && input.State != CommunicationState.Closed)
					ProcessRequestOrInput (input);
			}
		}
Пример #44
0
        public void Run()
        {
            IRawBodyUtility bodyUtil = new RawEncoderUtility();

            IOutputChannel readyQueue = null;
            IOutputChannel doneQueue = null;
            UInt64 batchSize = (UInt64)opts.subTxSize;
            bool txPending = false;
            byte[] data = null;

            try
            {
                this.subscribeQueue = QueueChannelFactory.CreateReaderChannel(this.queue);
                readyQueue = QueueChannelFactory.CreateWriterChannel("", this.Fqn("sub_ready"));
                doneQueue = QueueChannelFactory.CreateWriterChannel("", this.Fqn("sub_done"));

                Message msg = bodyUtil.CreateMessage("ready");
                readyQueue.Send(msg, TimeSpan.MaxValue);
                msg.Close();

                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();

                Console.WriteLine("receiving {0}", this.msgCount);
                UInt64 expect = 0;

                if (batchSize > 0)
                {
                    Transaction.Current = new CommittableTransaction();
                }

                for (UInt64 i = 0; i < this.msgCount; i++)
                {
                    msg = subscribeQueue.Receive(TimeSpan.MaxValue);

                    data = bodyUtil.GetBytes(msg, data);
                    msg.Close();
                    if (data.Length != this.msgSize)
                    {
                        throw new Exception("subscribe message size mismatch");
                    }

                    UInt64 n = GetSequenceNumber(data);
                    if (n != expect)
                    {
                        throw new Exception(String.Format("message sequence error. expected {0} got {1}", expect, n));
                    }
                    expect = n + 1;

                    if (batchSize > 0)
                    {
                        txPending = true;
                        if (((i + 1) % batchSize) == 0)
                        {
                            ((CommittableTransaction)Transaction.Current).Commit();
                            txPending = false;
                            Transaction.Current = new CommittableTransaction();
                        }
                    }
                }

                if (txPending)
                {
                    ((CommittableTransaction)Transaction.Current).Commit();
                }

                Transaction.Current = null;

                stopwatch.Stop();

                double mps = (msgCount / stopwatch.Elapsed.TotalSeconds);

                msg = bodyUtil.CreateMessage(String.Format("{0:0.##}", mps));
                doneQueue.Send(msg, TimeSpan.MaxValue);
                msg.Close();

                subscribeQueue.Close();
            }
            finally
            {
                Close((IChannel)doneQueue);
                Close((IChannel)this.subscribeQueue);
                Close(readyQueue);
            }
        }
Пример #45
0
 protected SubscriptionBase(IInputChannel inputChannel, IMessageFilter messageFilter, IDispatcher dispatcher)
 {
     _inputChannel = inputChannel;
     _messageFilter = messageFilter;
     _dispatcher = dispatcher;
 }
Пример #46
0
        private Message ReceiveMessage(IInputChannel channel, bool commit)
        {
            Message message = null;

            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
            {
                bool messageDetected = false;
                if (this.Parameters.AsyncWaitForMessage)
                {
                    IAsyncResult result = channel.BeginWaitForMessage(this.Parameters.WaitForMessageTimeout, null, null);
                    messageDetected = channel.EndWaitForMessage(result);
                }
                else
                {
                    messageDetected = channel.WaitForMessage(this.Parameters.WaitForMessageTimeout);
                }

                if (this.Parameters.WaitForMessage)
                {
                    lock (this.Results)
                    {
                        this.Results.Add(String.Format("WaitForMessage returned {0}", messageDetected));
                    }
                }

                if (messageDetected)
                {
                    if (this.Parameters.AsyncReceive)
                    {
                        if (this.Parameters.TryReceive)
                        {
                            IAsyncResult result = channel.BeginTryReceive(this.Parameters.ReceiveTimeout, null, null);
                            bool ret = channel.EndTryReceive(result, out message);

                            lock (this.Results)
                            {
                                this.Results.Add(String.Format("TryReceive returned {0}", ret));
                            }
                        }
                        else
                        {
                            try
                            {
                                IAsyncResult result = channel.BeginReceive(this.Parameters.ReceiveTimeout, null, null);
                                message = channel.EndReceive(result);
                            }
                            catch (TimeoutException)
                            {
                                message = null;
                            }
                        }
                    }
                    else
                    {
                        if (this.Parameters.TryReceive)
                        {
                            bool ret = channel.TryReceive(this.Parameters.ReceiveTimeout, out message);

                            lock (this.Results)
                            {
                                this.Results.Add(String.Format("TryReceive returned {0}", ret));
                            }
                        }
                        else
                        {
                            try
                            {
                                message = channel.Receive(this.Parameters.ReceiveTimeout);
                            }
                            catch (TimeoutException)
                            {
                                message = null;
                            }
                        }
                    }
                }
                else
                {
                    if (this.Parameters.TryReceive)
                    {
                        bool ret = false;
                        if (this.Parameters.AsyncReceive)
                        {
                            IAsyncResult result = channel.BeginTryReceive(this.Parameters.ReceiveTimeout, null, null);
                            if (this.Parameters.TryReceiveNullIAsyncResult)
                            {
                                try
                                {
                                    channel.EndTryReceive(null, out message);
                                }
                                catch (Exception e)
                                {
                                    lock (this.Results)
                                    {
                                        this.Results.Add(String.Format("TryReceive threw {0}", e.GetType().Name));
                                    }
                                }
                            }

                            ret = channel.EndTryReceive(result, out message);
                        }
                        else
                        {
                            ret = channel.TryReceive(this.Parameters.ReceiveTimeout, out message);
                        }

                        lock (this.Results)
                        {
                            this.Results.Add(String.Format("TryReceive returned {0}", ret));
                            this.Results.Add(String.Format("Message was {0}", (message == null ? "null" : "not null")));
                        }
                    }

                    message = null;
                }

                if (commit && message != null)
                {
                    lock (this.Results)
                    {
                        this.Results.Add(String.Format("Received message with Action '{0}'", message.Headers.Action));
                    }

                    ts.Complete();
                }
                else
                {
                    Transaction.Current.Rollback();
                }
            }

            return message;
        }
Пример #47
0
 public TypeSubscription(IInputChannel inputChannel, IMessageFilter messageFilter, ISubscriptionDispatcher dispatcher, object instance)
     : base(inputChannel, messageFilter, dispatcher)
 {
     _dispatcher = dispatcher;
     _instance = instance;
 }