Сначала создайте абстрактную структуру сервера. Таким образом, вы пишете программу, которая принимает соединения TCP в одном потоке и передает их в рабочий поток, который может читать и отправлять сообщения.
Вы должны хранить один синглтон, содержащий ссылку (или указатель, по вашему выбору) на Worker с подключенным в данный момент клиентом (или ноль, если не подключен ни один).
Для простоты поток-получатель должен создавать новый поток Worker каждый раз, когда он принимает соединение, и поток Worker прерывается, когда разрывается соединение.
Теперь вам нужно подумать о протоколе. Для этой простой задачи 5 сообщений должно быть достаточно. Возможно, каждое сообщение оканчивается на endl, поэтому вы можете использовать такие методы, как readline, если что-то подобное есть в C ++.
Во-первых, сообщение CONNECT
. Сервер должен вернуть OK
(второе сообщение), если к нему никто не подключен, и ERROR
(третье сообщение), если оно уже подключено.
Четвертое сообщение - CONNECTWITHDISCONNECT
, оно соединяет клиента с сервером и отключает любого другого клиента. Вновь подключенный клиент должен получить с сервера сообщение OK
, а отключенный - DISCONNECT
(пятое сообщение).
Теперь вы можете использовать сообщение о разъединении также с клиентом, чтобы можно было отключиться, не требуя подключения другого.
Клиент должен сначала отправить CONNECT
, если он получает ERROR
, затем он может попросить пользователя отключить другого клиента, а если пользователь хочет, клиент отправит CONNECTWITHDISCONNECT
.