Как бы вы справились с ситуацией один сервер — много клиентов?

Я занимаюсь разработкой классического проекта обучения сервера / клиента.

На сервере есть список подключенных клиентов ServerClient. Я хотел бы иметь дело с ситуацией закрытия клиентского соединения от моего объекта ServerClient, а затем уничтожить себя …

Я разработал класс Server, который возвращает объект ServerClient при подключении клиента. Затем класс ServerClient имеет функцию-член close (), которая должна закрыть клиентский сокет сервера и уничтожить объект ServerClient.

class ServerClient {
private:
Socket *socket;
Server *server;
public:
ServerClient::ServerClient (Socket *cs, Server *ss) : server(0), socket(0) {
socket = cs;
server = ss;
}
Socket *getSocket() {
return socket;
}
void close() {
server->closeClient(this);
}
}

class Server {
private:
std::vector<ServerClient*> clients;
public:
ServerClient *acceptClient() {
... // accept client etc...
ServerClient *sc = new ServerClient(this);
clients.push_back(sc);
return sc;
}
void closeClient(ServerClient *client) {
// close the client socket
client->getSocket()->close();
... // remove the client from the clients list
// delete the client reference (I'll have care never using client object outside)
delete client;
}
}

// this way I can close the client connection and update server clients list
....
client->close();

Это код, который я хотел разработать … но я нахожу эту модель довольно странной.
Как вы думаете, мог бы быть лучший способ справиться с ситуацией?

Спасибо

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]