// Обработка запросов от пользователя. При получении пакета с кодом disconnect прекращаем private void Process_User(ref TcpClient client, int id) { bool connected = true; try { MessageClass message; while (connected) { message = GetFromStream(ref client); switch (message.code) { // При получении публичного ключа отсылаем свой. case codes.PUBLIC_KEY: connectedUsers[id] = JsonConvert.DeserializeObject <RSAParameters>(message.info); // Вывод значений в textbox-формы textDecrypt.BeginInvoke(new Action(() => textDecrypt.Text = "Sent to user " + id)); textStatus.BeginInvoke(new Action(() => textStatus.Text = message.info)); SendToStream(new MessageClass(codes.PUBLIC_KEY, rs.PublicKeyString()), ref client); break; // При получении зашифрованного сообщения расшифровываем своим приватным ключом, добавляем текст, // шифруем и отсылаем case codes.ENCRYPTED_MESSAGE: textDecrypt.Text = message.info; SendToStream(new MessageClass(codes.ENCRYPTED_MESSAGE, rs.Encrypt("Пажилое сообщение: " + rs.Decrypt(message.info), connectedUsers[id])), ref client); break; // Удаляем пользователя, захотевшего уйти case codes.DISCONNECT_MESSAGE: connectedUsers.Remove(id); connected = false; break; } } } catch (Exception e) { MessageBox.Show("In Process_User: " + e.Message); } }
// При загрузке формы выводится публичный ключ клиента и отключается кнопка отправки private void MainForm_Load(object sender, EventArgs e) { textPublicKey.Text = rs.PublicKeyString(); buttonSend.Enabled = false; }