private void btnJoin_Click(object sender, EventArgs e)
        {
            clientSocket = new TcpClient();
            try
            {
                clientSocket.Connect(Dns.Resolve(serverHost.Text).AddressList, Int32.Parse(serverPort.Text));
            }
            catch
            {
                MessageBox.Show("Wrong Room ID or unavailable partner.", "Error");
                clientSocket = null;
                return;
            }

            clientShellWindow = new ClientShellWindow(this, clientSocket, btnShell);
            clientShellWindow.Show();
            clientInboxWindow = new ClientInboxWindow(this, clientSocket, btnInbox);
            clientInboxWindow.Show();
            listenThread = new Thread(o => ListenThread(this));
            listenThread.Start();

            NetworkStream stream = new NetworkStream(clientSocket.Client, false);

            byte[] buffer = Encoding.UTF8.GetBytes(publicIP);
            stream.Write(buffer, 0, buffer.Length);
            stream.Close();

            serverPort.Enabled = btnJoin.Enabled = false;
            btnShell.Enabled   = btnInbox.Enabled = btnClose.Enabled = true;
        }
        private void SendInbox(ClientForm parent, ClientInboxWindow main, TcpClient clientSocket)
        {
            string data = main.clientInboxInput.Text;

            Storage.RichTextBoxAppend(main.clientInbox, $"You: {data}");
            parent.clientInbox += $"You: {data}";

            NetworkStream stream = new NetworkStream(clientSocket.Client, false);

            byte[] buffer = Encoding.UTF8.GetBytes($"i{data}");
            stream.Write(buffer, 0, buffer.Length);
            stream.Close();

            Storage.TextBoxClear(main.clientInboxInput);
        }
        // Func
        private void __destructor()
        {
            if (clientSocket != null)
            {
                try
                {
                    NetworkStream stream = new NetworkStream(clientSocket.Client, false);
                    byte[]        buffer = Encoding.UTF8.GetBytes(@"!@#$%^&*()_+EXIT!@#$%^&*()_+");
                    stream.Write(buffer, 0, buffer.Length);
                    stream.Close();
                }
                catch { }
            }

            if (listenThread != null)
            {
                listenThread.Abort();
                listenThread = null;
            }
            if (clientShellWindow != null)
            {
                clientShellWindow.Close();
                clientShellWindow = null;
            }
            if (clientInboxWindow != null)
            {
                clientInboxWindow.Close();
                clientInboxWindow = null;
            }
            if (clientSocket != null)
            {
                try
                {
                    clientSocket.Client.Shutdown(SocketShutdown.Both);
                }
                catch { }
                clientSocket.Close();
                clientSocket = null;
            }
        }