123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include "SpielServerKlient.h"
- #include <Datei.h>
- // 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<Text*>(fehler->getThis());
- }
- Text* SpielServerKlient::zLetzterFehler() const
- {
- return fehler;
- }
|