public async Task SendConnectionlessMessageAsync(Message message, Target target) { IConnectionlessMessenger messenger = this.listener; if (messenger != null) { await messenger.SendConnectionlessMessageAsync(message, target).ConfigureAwait(false); } }
public void Stop() { IConnectionlessMessenger messenger = this.listener; if (messenger != null) { messenger.ConnectionlessMessageReceived -= OnListenerConnectionlessMessageReceived; messenger.Stop(); messenger.Dispose(); } }
/// <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); } }
/// <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; }
/// <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; }