SpielServerKlient.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include "SpielServerKlient.h"
  2. #include <Datei.h>
  3. // Inhalt der SpielServerKlient Klasse aus SpielServerKlient.h
  4. // Konstruktor
  5. SpielServerKlient::SpielServerKlient()
  6. : ReferenceCounter()
  7. {
  8. k = new SSLKlient();
  9. fehler = new Text();
  10. verbunden = 0;
  11. }
  12. // Destruktor
  13. SpielServerKlient::~SpielServerKlient()
  14. {
  15. if (verbunden)
  16. trenne();
  17. k->release();
  18. fehler->release();
  19. }
  20. // privat
  21. bool SpielServerKlient::verbinde(short port, const char* ip)
  22. {
  23. if (verbunden)
  24. trenne();
  25. if (k->verbinde(port, ip))
  26. {
  27. verbunden = 1;
  28. return 1;
  29. }
  30. return 0;
  31. }
  32. bool SpielServerKlient::trenne()
  33. {
  34. k->sende("\3", 1);
  35. char ret = 0;
  36. k->getNachricht(&ret, 1);
  37. k->trenne();
  38. verbunden = 0;
  39. return 1;
  40. }
  41. // nicht constant
  42. bool SpielServerKlient::downloadSpielHistorie(short port, const char* ip, int spiel, const char* gpf)
  43. {
  44. if (!verbinde(port, ip))
  45. {
  46. fehler->setText("Fehler beim verbinden mit Spiel Server.");
  47. return 0;
  48. }
  49. k->sende("\xB", 1);
  50. unsigned char ret = 0;
  51. k->getNachricht((char*)&ret, 1);
  52. if (ret == 1)
  53. {
  54. k->sende((char*)&spiel, 4);
  55. k->getNachricht((char*)&ret, 1);
  56. if (ret == 1)
  57. {
  58. Text* pfad = new Text(gpf);
  59. pfad->ersetzen('\\', '/');
  60. if (pfad->getText()[pfad->getLength() - 1] != '/')
  61. pfad->append("/");
  62. pfad->append(spiel);
  63. pfad->append("/");
  64. k->getNachricht((char*)&ret, 1);
  65. while (ret)
  66. {
  67. char* pf = new char[ret + 1];
  68. pf[(int)ret] = 0;
  69. k->getNachricht(pf, ret);
  70. __int64 gr = 0;
  71. k->getNachricht((char*)&gr, 8);
  72. Datei* d = new Datei();
  73. d->setDatei(Text(pfad->getText()) += pf);
  74. d->erstellen();
  75. d->open(Datei::Style::schreiben);
  76. char* bytes = new char[2048];
  77. while (gr)
  78. {
  79. short len = gr > 2048 ? 2048 : (short)gr;
  80. k->getNachricht(bytes, len);
  81. d->schreibe(bytes, len);
  82. gr -= len;
  83. }
  84. delete[] bytes;
  85. d->close();
  86. d->release();
  87. delete[] pf;
  88. k->getNachricht((char*)&ret, 1);
  89. }
  90. pfad->release();
  91. }
  92. }
  93. if (ret == 3)
  94. {
  95. *fehler = "Fehler, Spielserver rückgabe: ";
  96. k->getNachricht((char*)&ret, 1);
  97. char* err = new char[ret + 1];
  98. err[(int)ret] = 0;
  99. k->getNachricht(err, ret);
  100. *fehler += err;
  101. delete[] err;
  102. return 0;
  103. }
  104. return 1;
  105. }
  106. // constant
  107. Text* SpielServerKlient::getLetzterFehler() const
  108. {
  109. return dynamic_cast<Text*>(fehler->getThis());
  110. }
  111. Text* SpielServerKlient::zLetzterFehler() const
  112. {
  113. return fehler;
  114. }