Exemple #1
0
        /// <summary>
        /// Sends the message to all recipients.
        /// </summary>
        /// <param name="keepWindowOpen">Set to true to keep the window open, else the window will close.</param>
        private void SendMessage(bool keepWindowOpen)
        {
            System.Messaging.Message[] messages = null;
            bool success = false;

            try
            {
                //check the license allows the operation
                if (_license.ValidateFeatureUse(_mode == Mode.NewMessage ? Licensing.Feature.NewMessage : Licensing.Feature.FowardMessage))
                {
                    //generate an array of all target queues
                    System.Messaging.MessageQueue[] messageQueues = new System.Messaging.MessageQueue[recipientsListView.Items.Count];
                    for (int i = 0; i < recipientsListView.Items.Count; i++)
                    {
                        messageQueues[i] = (System.Messaging.MessageQueue)((QSetQueueItem)recipientsListView.Items[i].Tag).QSetMessageQueue;
                    }

                    //create a new message, or prepare existing ones, to send to recipients
                    if (_mode == Mode.NewMessage)
                    {
                        //create the message from the releavent source
                        messages = new System.Messaging.Message[1] {
                            new System.Messaging.Message()
                        };
                        FillMessageBody(messages[0]);
                        messages[0].Label = labelTextBox.Text;

                        //set message options
                        messages[0].Recoverable        = optionsRecoverableMenuItem.Checked;
                        messages[0].UseAuthentication  = optionsUseAuthenticationMenuItem.Checked;
                        messages[0].UseDeadLetterQueue = optionsUseDeadLetterQueueMenuItem.Checked;
                        messages[0].UseEncryption      = optionsUseEncryptionMenuItem.Checked;
                        messages[0].UseJournalQueue    = optionsUseJournalQueueMenuItem.Checked;
                        messages[0].UseTracing         = optionsUseTracingMenuItem.Checked;
                        messages[0].Priority           = GetSelectedMessagePriority();
                    }
                    else
                    {
                        //prepare existing messages...

                        messages = new System.Messaging.Message[messagesListView.Items.Count];
                        for (int i = 0; i < messagesListView.Items.Count; i++)
                        {
                            messages[i] = _queueTaskManager.DuplicateMessage(_sourceQueueItem.QSetMessageQueue, ((System.Messaging.Message)messagesListView.Items[i].Tag).Id);
                        }
                    }

                    if (keepWindowOpen)
                    {
                        Cursor = Cursors.WaitCursor;
                    }
                    else
                    {
                        this.Hide();
                    }

                    //send the messages
                    foreach (System.Messaging.Message message in messages)
                    {
                        _queueTaskManager.BulkSend(messageQueues, message, Convert.ToInt32(numberOfCopiesComboBoxItem.ComboBox.Text));
                    }

                    success = true;
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show(
                    this,
                    string.Format("Encountered an error while preparing to send message:\n\n{0}", exc.Message),
                    this.Text,
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            finally
            {
                if (_mode == Mode.NewMessage && messages != null)
                {
                    foreach (System.Messaging.Message message in messages)
                    {
                        message.Dispose();
                    }
                }

                Cursor = Cursors.Default;

                if (!keepWindowOpen && success)
                {
                    DialogResult = DialogResult.OK;
                    this.Close();
                }
            }
        }