コード例 #1
0
        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 = "";
        }
コード例 #2
0
ファイル: ChatSessionForm.cs プロジェクト: Buzzefall/TCP-Chat
        //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();
        }
コード例 #3
0
 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);
         }
     }
 }
コード例 #4
0
        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");
        }