HistorieSender.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "HistorieSender.h"
  2. #ifdef WIN32
  3. #include "../SpielServer.h"
  4. #else
  5. #include "SpielServer.h"
  6. #endif
  7. #include <Datei.h>
  8. // Inhalt der HistorieSender Klasse aus HistorieSender.h
  9. // Konstruktor
  10. HistorieSender::HistorieSender( SpielServer *zSS )
  11. {
  12. this->zSS = zSS;
  13. beenden = 0;
  14. }
  15. // Destruktor
  16. HistorieSender::~HistorieSender()
  17. {
  18. }
  19. // nicht constant
  20. void HistorieSender::setEnde()
  21. {
  22. beenden = 1;
  23. }
  24. void HistorieSender::thread()
  25. {
  26. Datei *d = new Datei();
  27. d->setDatei( "../spiel log" );
  28. while( !beenden )
  29. {
  30. Sleep( 10000 );
  31. int anz = d->getUnterdateiAnzahl();
  32. RCArray< Text > *list = d->getDateiListe();
  33. int min = 0;
  34. for( int i = 0; i < anz; i++ )
  35. {
  36. if( !list->z( i ) )
  37. continue;
  38. Text pf( d->zPfad()->getText() );
  39. pf += "/";
  40. pf += list->z( i )->getText();
  41. pf += "/fertig";
  42. if( !DateiExistiert( pf ) )
  43. continue;
  44. if( !min || min >( int )*list->z( i ) )
  45. min = *list->z( i );
  46. }
  47. list->release();
  48. if( min )
  49. {
  50. short port = 0;
  51. Text *ip = new Text();
  52. if( zSS->zDB()->suchHistorieServer( &port, ip ) )
  53. {
  54. Klient *k = new Klient();
  55. unsigned char key[ 20 ] = { 207, 30, 72, 46, 30, 50, 56, 213, 82, 107, 14, 201, 149, 58, 110, 138, 228, 241, 52, 54 };
  56. k->setSendeKey( (char*)key, 20 );
  57. k->setEmpfangKey( (char*)key, 20 );
  58. if( k->verbinde( port, *ip ) )
  59. {
  60. zSS->addSpielHistorieId( min );
  61. unsigned char ret = 0;
  62. k->sendeEncrypted( "\5", 1 );
  63. k->getNachrichtEncrypted( (char*)&ret, 1 );
  64. if( ret == 1 )
  65. {
  66. int server = zSS->getId();
  67. k->sendeEncrypted( (char*)&server, 4 );
  68. k->sendeEncrypted( (char*)&min, 4 );
  69. k->getNachrichtEncrypted( (char*)&ret, 1 );
  70. if( ret == 1 )
  71. DateiRemove( Text( "../spiel log/" ) += min );
  72. }
  73. if( ret == 3 )
  74. {
  75. k->getNachrichtEncrypted( (char*)&ret, 1 );
  76. char *err = new char[ ret ];
  77. k->getNachrichtEncrypted( err, ret );
  78. delete[] err;
  79. }
  80. k->sendeEncrypted( "\3", 1 );
  81. k->getNachrichtEncrypted( (char*)&ret, 1 );
  82. k->trenne();
  83. k->release();
  84. zSS->removeSpielHistorieId( min );
  85. }
  86. }
  87. ip->release();
  88. }
  89. }
  90. d->release();
  91. run = 0;
  92. }