#include "SpielServerKlient.h" #include // Inhalt der SpielServerKlient Klasse aus SpielServerKlient.h // Konstruktor SpielServerKlient::SpielServerKlient() : ReferenceCounter() { k = new SSLKlient(); fehler = new Text(); verbunden = 0; } // Destruktor SpielServerKlient::~SpielServerKlient() { if (verbunden) trenne(); k->release(); fehler->release(); } // privat bool SpielServerKlient::verbinde(short port, const char* ip) { if (verbunden) trenne(); if (k->verbinde(port, ip)) { verbunden = 1; return 1; } return 0; } bool SpielServerKlient::trenne() { k->sende("\3", 1); char ret = 0; k->getNachricht(&ret, 1); k->trenne(); verbunden = 0; return 1; } // nicht constant bool SpielServerKlient::downloadSpielHistorie(short port, const char* ip, int spiel, const char* gpf) { if (!verbinde(port, ip)) { fehler->setText("Fehler beim verbinden mit Spiel Server."); return 0; } k->sende("\xB", 1); unsigned char ret = 0; k->getNachricht((char*)&ret, 1); if (ret == 1) { k->sende((char*)&spiel, 4); k->getNachricht((char*)&ret, 1); if (ret == 1) { Text* pfad = new Text(gpf); pfad->ersetzen('\\', '/'); if (pfad->getText()[pfad->getLength() - 1] != '/') pfad->append("/"); pfad->append(spiel); pfad->append("/"); k->getNachricht((char*)&ret, 1); while (ret) { char* pf = new char[ret + 1]; pf[(int)ret] = 0; k->getNachricht(pf, ret); __int64 gr = 0; k->getNachricht((char*)&gr, 8); Datei* d = new Datei(); d->setDatei(Text(pfad->getText()) += pf); d->erstellen(); d->open(Datei::Style::schreiben); char* bytes = new char[2048]; while (gr) { short len = gr > 2048 ? 2048 : (short)gr; k->getNachricht(bytes, len); d->schreibe(bytes, len); gr -= len; } delete[] bytes; d->close(); d->release(); delete[] pf; k->getNachricht((char*)&ret, 1); } pfad->release(); } } if (ret == 3) { *fehler = "Fehler, Spielserver rückgabe: "; k->getNachricht((char*)&ret, 1); char* err = new char[ret + 1]; err[(int)ret] = 0; k->getNachricht(err, ret); *fehler += err; delete[] err; return 0; } return 1; } // constant Text* SpielServerKlient::getLetzterFehler() const { return dynamic_cast(fehler->getThis()); } Text* SpielServerKlient::zLetzterFehler() const { return fehler; }