Ejemplo n.º 1
0
        public async Task SendConnectionlessMessageAsync(Message message, Target target)
        {
            IConnectionlessMessenger messenger = this.listener;

            if (messenger != null)
            {
                await messenger.SendConnectionlessMessageAsync(message, target).ConfigureAwait(false);
            }
        }
Ejemplo n.º 2
0
        public void Stop()
        {
            IConnectionlessMessenger messenger = this.listener;

            if (messenger != null)
            {
                messenger.ConnectionlessMessageReceived -= OnListenerConnectionlessMessageReceived;
                messenger.Stop();
                messenger.Dispose();
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Adds and starts the connection <paramref name="provider"/>.
        /// </summary>
        /// <param name="provider">The connection provider to add.</param>
        /// <param name="mode">The <see cref="ExecutionMode"/> for <paramref name="provider"/>.</param>
        /// <exception cref="ArgumentNullException"><paramref name="provider"/> is <c>null</c>.</exception>
        public void AddConnectionProvider(IConnectionProvider provider, ExecutionMode mode = ExecutionMode.ConnectionOrder)
        {
            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }

            lock (this.providers)
                this.providers.Add(provider, mode);

            IConnectionlessMessenger connectionless = provider as IConnectionlessMessenger;

            switch (mode)
            {
            case ExecutionMode.ConnectionOrder:
                provider.ConnectionMade += OnConnectionMade;

                if (connectionless != null)
                {
                    connectionless.ConnectionlessMessageReceived += OnConnectionlessMessageReceived;
                }

                break;

            case ExecutionMode.GlobalOrder:
                var q = this.mqueue;
                if (q == null)
                {
                    q = new ConcurrentQueue <EventArgs>();
                    Interlocked.CompareExchange(ref this.mqueue, q, null);
                }

                provider.ConnectionMade += OnConnectionMadeGlobal;

                if (connectionless != null)
                {
                    connectionless.ConnectionlessMessageReceived += OnConnectionlessMessageReceivedGlobal;
                }

                break;
            }

            if (this.running)
            {
                provider.Start(this.messageTypes);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectionlessMessageEventArgs"/> class.
        /// </summary>
        /// <param name="message">The message that was received connectionlessly.</param>
        /// <param name="from">The <see cref="Target"/> the message came from.</param>
        /// <param name="messenger">The <see cref="IConnectionlessMessenger"/> the message was received from.</param>
        /// <exception cref="ArgumentNullException"><paramref name="message"/> or <paramref name="from"/> is <c>null</c>.</exception>
        public ConnectionlessMessageEventArgs(Message message, Target from, IConnectionlessMessenger messenger)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }
            if (from == null)
            {
                throw new ArgumentNullException("from");
            }
            if (messenger == null)
            {
                throw new ArgumentNullException("messenger");
            }

            Message   = message;
            From      = from;
            Messenger = messenger;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectionlessMessageEventArgs"/> class.
        /// </summary>
        /// <param name="message">The message that was received connectionlessly.</param>
        /// <param name="from">The <see cref="Target"/> the message came from.</param>
        /// <param name="messenger">The <see cref="IConnectionlessMessenger"/> the message was received from.</param>
        /// <exception cref="ArgumentNullException"><paramref name="message"/> or <paramref name="from"/> is <c>null</c>.</exception>
        public ConnectionlessMessageEventArgs(Message message, Target from, IConnectionlessMessenger messenger)
        {
            if (message == null)
                throw new ArgumentNullException ("message");
            if (from == null)
                throw new ArgumentNullException ("from");
            if (messenger == null)
                throw new ArgumentNullException ("messenger");

            Message = message;
            From = from;
            Messenger = messenger;
        }