public ImReceivedMessageEventArgs(IMLibrary.Message message)
 {
     this._message = message;
 }
        private void ChatDialogoue_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            IMLibrary.Client selectedClient = (IMLibrary.Client)ListBuddies.Items[ListBuddies.SelectedIndex];
            if (selectedClient == null)
            {
                return;
            }
            if (e.Key != Key.Enter)
            {
                return;
            }

            e.Handled = true;
            if (_clientPromtList.Find(c => c.Item1.UserName == selectedClient.UserName).Item2.txtSend.Text == "")
            {
                return;
            }

            string message = _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.txtSend.Text; /* Actual message that is to be sent, this is where we can encrypt it*/

            GeneratedClientList.ToList().Find(cli => cli.UserName == selectedClient.UserName).NewMessages = false;
            GeneratedClientList.ToList().Find(cli => cli.UserName == selectedClient.UserName).Received    = 0;
            string encryptedMessage = "";

            try
            {
                if (_clientKeyIvDictionary.ContainsKey(selectedClient.UserName))
                {
                    int selectedEncryptionMethod = _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.EncryptionMethod.SelectedIndex;
                    switch (selectedEncryptionMethod)
                    {
                    case 0:     //symmetrical encryption
                        int selectedStandard = _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.EncryptionStandard.SelectedIndex;
                        switch (selectedStandard)
                        {
                        case 0:
                            encryptedMessage = Cryptography.Encrypt <AesManaged>(message, _clientKeyIvDictionary[selectedClient.UserName].Item1, Encoding.Unicode.GetString(_clientKeyIvDictionary[selectedClient.UserName].Item2));
                            break;

                        case 1:         //
                            encryptedMessage = Cryptography.Encrypt <TripleDESCryptoServiceProvider>(message, _clientKeyIvDictionary[selectedClient.UserName].Item1, Encoding.Unicode.GetString(_clientKeyIvDictionary[selectedClient.UserName].Item2));
                            break;
                            //case 2:
                            //    encryptedMessage = Cryptography.Encrypt<RC2CryptoServiceProvider>(message, _clientKeyIvDictionary[selectedClient.UserName].Item1, Encoding.Unicode.GetString(_clientKeyIvDictionary[selectedClient.UserName].Item2));
                            //    break;
                        }
                        break;

                    case 1:     //one-time-pad
                        if (_clientPromtList.Find(c => c.Item1 == selectedClient).Item2.txtOneTimePad.Text.Length >= message.Length)
                        {
                            encryptedMessage = Cryptography.EncryptMessageWithPad(_clientPromtList.Find(c => c.Item1 == selectedClient).Item2.txtOneTimePad.Text, message);
                        }
                        break;
                    }
                }
                else
                {
                    encryptedMessage = Cryptography.EncryptData(message, selectedClient.PublicKey);
                }
                var  isChecked = _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.SynchroniseCheckBox.IsChecked;
                bool syncFlag  = isChecked != null && (bool)isChecked;
                int  encryptionStandardFlag = _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.EncryptionStandard.SelectedIndex;
                int  encryptionMethodFlag   = _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.EncryptionMethod.SelectedIndex;

                IMLibrary.Message messagePacket = new IMLibrary.Message(encryptedMessage, selectedClient.UserName, this._clientHandler.ClientInfo.UserName, encryptionStandardFlag, encryptionMethodFlag, syncFlag);
                _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.RecieveText.AppendNewLine(String.Format("[{0}] << {1}", DateTime.Now.ToString("HH:mm:ss"), _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.txtSend.Text));
                _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.txtSend.Text = "";
                this._clientHandler.SendMessage(messagePacket);
            }
            catch
            {
                _clientPromtList.Find(c => c.Item1 == selectedClient).Item2.RecieveText.AppendNewLine(String.Format("[{0}] << {1}", DateTime.Now.ToString("HH:mm:ss"), "This user may have removed their public key from the server; this message cannot be sent to ensure security integrity."));
            }
        }