HistorieSender.cpp 2.3 KB

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