private void SendMessage() { TextMessage msg = new TextMessage(String.Format("{0}: {1}", Nickname, Message.Text)); switch (_role) { case "Server": LogMessage(msg.Text); _listenSocket.SendToAllClients(msg.Buffer); break; case "Client": _sNetClient?.Send(msg.Buffer); break; default: break; } Message.Text = ""; }
//public ChatSessionForm() //{ // InitializeComponent(); // //CurrentSession = (Owner as ChatClientForm).CurrentSession; // //CurrentSession.sessionForm = this; //} // Далее - обработчики событий, работающие с клиентской моделью ChatSession (Control) private void MessageBox_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar != (char)Keys.Enter) { return; } e.Handled = true; if (string.IsNullOrWhiteSpace(MessageBox.Text) || MessageBox.Text == "\0") { return; } var message = new TextMessage() { Text = MessageBox.Text }; CurrentSession?.SendMessage(message); MessageBox.Clear(); //MessageBox.Update(); }
void OnMessage(chat.Message msg) { if( msg.HasNotification ) { if (msg.Notification.HasWelcome) { this.Title = msg.Notification.Welcome.Text.ToStringUtf8(); }else if( msg.Notification.HasFriend ) { var name = msg.Notification.Friend.Name.ToStringUtf8(); if( msg.Notification.Friend.Online ) { my_friends.Add(name); } else { my_friends.Remove(name); } } else if (msg.Notification.HasMsg) { var txtMsg = new TextMessage(msg.Notification.Msg); text_messages.Add(txtMsg); } } }
static void Main(string[] args) { // TextMessage tMessage = new TextMessage // { // Text = "Hello world", // Id = Guid.NewGuid(), // MessageType = MessageType.TextMessage // }; // string json = JsonConvert.SerializeObject(tMessage // ,Formatting.Indented); // System.Console.WriteLine(json); // var readetData = Console.ReadLine(); // AcceptMessage accMessage // = JsonConvert.DeserializeObject<AcceptMessage>(readetData); // System.Console.WriteLine($"received id: {accMessage.ReceivedMessageId}"); // System.Console.WriteLine($"Type: {accMessage.MessageType}"); //Устанавливаем максимальное время ожидания сообщения в 1000 милисекунд client.Client.ReceiveTimeout = 1000; //Переменная message будет хранить в себе сообщение, считанное с консоли string message; //source является точкой генерации токенов для отмены работы потоков CancellationTokenSource source = new CancellationTokenSource(); //Создаем отдельный поток выполнения для прослушивания сети //Передаем лямбду, в которой вызываем метод Listen с токеном для отмены прослушки var thread = new Thread(() => Listen(source.Token)); //Запускаем поток thread.Start(); //мы создем адресс рассылки, Broadcast говорит о том, что сообщение будет разослано //всем в локальной сети, а 5000 определяет порт, на котором должны быть получатели IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, 5000); //Считываем строку с консоли, сохраняем это значение в переменную message //И если это сообщение не равно строке exit то выполняем тело цикла while ((message = Console.ReadLine()) != "exit") { //Формируем TextMessage, описывающий набранное нами сообщение TextMessage textMessage = new TextMessage { //Поле Text есть считанная строка Text = message, //Идентификатор это новосгенерированный Guid Id = Guid.NewGuid() }; //Добавляем сообщение в список отправленных нами сообщений sendedMessages.Add(textMessage); //Получаем JSON представление данных, хранимых в нашем текстовом сообщении var jsonString = JsonConvert.SerializeObject(textMessage); //Преобразуем JSON строку в массив байт, для передачи по сети var data = Encoding.UTF8.GetBytes(jsonString); //Отправляем все данные на ранее объявленую конечяную точку client.Send(data, data.Length, endPoint); } //Была введена строка exit и надо завершить все потоки source.Cancel(); //Выводим сообщение о конце работы основоного потока System.Console.WriteLine("THE BIG END"); }