/// <summary> /// Sends the specified messages to a Bayeux server asynchronously. /// </summary> /// <param name="listener">The listener used to process the request response.</param> /// <param name="messages">The list of messages will be sent in one request.</param> public virtual void Send(ITransportListener listener, params IMutableMessage[] messages) { if (messages == null) { throw new ArgumentNullException("messages"); } List <IMutableMessage> validMessages = new List <IMutableMessage>(); foreach (IMutableMessage message in messages) { if (message != null) { string msgId = message.Id; if (String.IsNullOrEmpty(msgId)) { msgId = _session.NewMessageId(); message.Id = msgId; } if (!String.IsNullOrEmpty(_clientId)) // TODO: && String.IsNullOrEmpty(message.ClientId) { message.ClientId = _clientId; } if (_session.ExtendSend(message)) { // Extensions may have modified the messageId, but we need to own // the messageId in case of meta messages to link request/response // in non request/response transports such as websocket message.Id = msgId; validMessages.Add(message); } } } if (validMessages.Count > 0) { // DEBUG Debug.Print("Sending messages: {0}", ObjectConverter.Serialize(validMessages)); _transport.Send(listener, validMessages.ToArray()); } }