private void PrivateMessageTab_TextCommandReceived(object sender, ClientEventArgs <string> e)
        {
            try
            {
                if (e.Value.StartsWith("."))
                {
                    switch (e.Value.ToLower())
                    {
                    case ".close":
                        Dispose();
                        break;

                    case ".clear":
                        RichTextBox.Clear();
                        break;

                    case ".copy":
                        if (!string.IsNullOrEmpty(RichTextBox.Text))
                        {
                            Clipboard.SetText(RichTextBox.Text);
                            WriteMessage(Color.Yellow, "Messages have been copied to your clipboard.");
                        }
                        break;

                    case ".showname":
                        RequestRealName(this, new RealNameRequestedEventArgs(tabIdentifier));
                        break;

                    case ".atis":
                        WriteMessage(Color.Yellow, $"Requesting ATIS for { tabIdentifier }");
                        if (!string.IsNullOrEmpty(realName))
                        {
                            mNetworkManager.RequestRealName(tabIdentifier);
                        }
                        mNetworkManager.RequestControllerInfo(tabIdentifier);
                        break;

                    default:
                        throw new ApplicationException($"Unknown text command: { e.Value.ToLower() }");
                    }
                }
                else
                {
                    PrivateMessageSent(this, new PrivateMessageSentEventArgs(mNetworkManager.OurCallsign, tabIdentifier, e.Value));
                }
            }
            catch (Exception ex)
            {
                WriteMessage(Color.Red, $"Error processing text command: { ex.Message }");
                PlaySoundRequested(this, new PlaySoundEventArgs(SoundEvent.Error));
            }
        }