Как реализовать чат в клиент-сервером приложении c#?
Сие действие происходит в игре мною ещё не дописанной на c# wpf(крестики-нолики для курсача).
Сделал авторизацию пользователя, создание лобби и тому подобные вещи посредством запросов на сервер тут всё ясно, но вот не ясно как сделать в лобби чат между двумя игроками. Я так думаю что с помощью запросов сделать не получится (возможно чего-то не знаю) тогда как быть ?
Как вариант можно создать отдельный поток и общаться с сервером в цикле, но это по-моему лишняя нагрузка и этот поток будет мешать другим моим запросам к серверу (наверное, ещё не пробовал)
UPD. Виноват, не написал что использую. Использую сокеты, протокол tcp.
Pitonist224, ну так через сокеты и кидайте сообщения в чем проблема? Вы же не думаете для игры крестики нолики создавать отдельно сервер? Сделайте что кто-то может стать хостом, а кто то может приконектиться.
P.S. Когда-то тоже для курсача правда по Java создавал морской бой с ии и с игрой по сети с гуи на JavaFX, тоже делал на сокетах, ну чата не было)
twobomb, у меня есть сервер и для авторизации юзера, создания лобби и тому подобных задач я посылаю на сервер запрос, на сервере обрабатываю и отправляю клиенту ответ.
У клиента это выглядит + - так
Но если делать, к примеру чат, я так понимаю, что, чтобы сообщение от собеседника пришло ко мне я должен держать в другом потоке постоянно открытым "запрос на получение сообщения от сервера", но такой способ усложняет задачу и будет мешать другим моим запросам (конечно, это проблему можно решить).
Или ещё на ум приходит такой вариант: спрашивать у сервера есть ли новые сообщения в цикле через какое-то время. Этот способ похож на прошлый, но скорее всего будет дополнительно нагружать как сервер так и клиент.
Если других адекватных (правильных) способов нет, я пойму. Но если есть, хотелось бы их узнать.
Pitonist224, Можно сделать что и сервер и клиент постоянно ждут некие команды. Тоесть к пример там пусть команды сервера 1 - создание лобби, 2 - получить список лобби, 3- отдать все сообщение определенного лобби ну или не все только последние, команды клиента 1 - пришло новое сообщение, 2 - создано лобби или перезапрос лобби, 3 -....
Ну и общение происходит так к примеру мы законектились, шлем серверу команду 2 чтобы он дал нам список лобби мы получаем обновляем, далее к премеру нажимаем создать лобби , а это значит шлем серверу команду 1, сервер создает лобби шлем клиенту команду 2 что лобби создано, клиент принимает и шлет команду 2 для получение списка лобби (чтобы обновить), к примеру с помощью таких же команд мы зашли в лобби и другие игроки зашли, кто то пишет сообщение отправляет команду серверу получить сообщение, сервер делает запрос клиенту и получает это сообщение, далее он всем клиентам этого лобби шлет команду 1 что пришло новое сообщение, они все дружно шлют команду 3 серверу (отдать все сообщение лобби) и сервер возвращает список сообщений и мы их обновляем и опять ждем команду, это может быть любая команда там начать игру, смена хода, запрос координат еще что нибудь... крч как то так можно
Вы пишете, что "посредством запросов на сервер", но не указываете, что это за сервер.
Если это web сервер, то тут проще применить WebSocket, что в .net реализуется фреймворком SignalR.
Если не web, то тут напрямую работать с TCP сокетами.