Frage zu Serverimplementierung



  • Hallo allerseits,
    ich habe eine Klasse AbstractServer, die, wie der Name schon vermuten lässt, einen abstrakten Server darstellt. Nun habe ich eine pure virtual Methode

    virtual const &std::string handleMessage(const std::string &message, Client *cl) const = 0;
    

    definiert, da ja die abgeleiteten, konkreten Server jeweils anders mit Nachrichten umgehen sollen.

    Die Server sollen quasi bei run() solange laufen, bis die Stop-funktion aus einem anderen Thread heraus aufgerufen wird. Ich möchte alle konkreten Server in einem ServerManager verwalten, das heisst, ich möchte die Server dort in einem Vector speichern. Nun habe ich dazu mehrere Fragen:

    I: Wie implementiert man die run()-Methode der Server am elegantesten, damit ich nach aussen hin lediglich

    Server x = new Server();
    x.run();

    x.stop();

    aufrufen kann, ohne nach aussen hin irgendwelche Threads starten zu müssen? Ich hatte die Idee, in der run-Methode einen Thread zu erzeugen, und der ThreadFunc als Argument this mitzugeben, damit ich auf die handleMessage-Methode zugreifen kann. die run()-Methode speichert ein Handle auf den Thread und wartet solange, bis der Thread beendet wurde (also ein anderer Thread server.stop() aufgerufen hat. Was haltet ihr von dieser Idee? Habt ihr bessere, elegantere Vorschläge?

    II: Kann ich eigentlich folgendes machen, um im Servermanager die Server zu speichern?

    std::vector<AbstractServer*> x;
    x.push_back(new WebServer());  // konkrete Klasse, abgeleitet von AbstractServer
    x.push_back(new FileServer()); // konkrete Klasse, abgeleitet von AbstractServer
    

Anmelden zum Antworten