PSKlient.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. #include "PSKlient.h"
  2. // Inhalt der PSKlient Klasse aus PSKlient.h
  3. // Konstruktor
  4. PSKlient::PSKlient( const char *ip, int port )
  5. : LTSKlient( ip, port )
  6. {
  7. }
  8. // Destruktor
  9. PSKlient::~PSKlient()
  10. {
  11. }
  12. // nicht constant
  13. bool PSKlient::getDateiListe( int *systemAnzahl, Array< int > *dateiAnzahl, RCArray< Text > *systeme, RCArray< RCArray< Text > > *dateien )
  14. {
  15. if( !verbunden )
  16. verbinden();
  17. if( !verbunden )
  18. return 0;
  19. lock();
  20. k->sende( "\xB", 1 );
  21. unsigned char res = 0;
  22. k->getNachricht( (char*)&res, 1 );
  23. if( res == 3 )
  24. {
  25. k->getNachricht( (char*)&res, 1 );
  26. char *txt = new char[ res + 1 ];
  27. k->getNachricht( txt, res );
  28. txt[ res ] = 0;
  29. fehler->setText( "Fehler während GetDateiListe bei PatchServer.\nServer Rückgabe:" );
  30. fehler->append( txt );
  31. delete[] txt;
  32. unlock();
  33. return 0;
  34. }
  35. *systemAnzahl = 0;
  36. int län = 0;
  37. k->getNachricht( (char*)&län, 4 );
  38. while( län )
  39. { // System Sleife
  40. char *txt = new char[ län + 1 ];
  41. txt[ län ] = 0;
  42. k->getNachricht( txt, län );
  43. systeme->set( new Text( txt ), *systemAnzahl );
  44. delete[] txt;
  45. dateien->set( new RCArray< Text >(), *systemAnzahl );
  46. int dAnzahl = 0;
  47. k->getNachricht( (char*)&län, 4 );
  48. while( län )
  49. { // Datei Schleife
  50. char *txt = new char[ län + 1 ];
  51. txt[ län ] = 0;
  52. k->getNachricht( txt, län );
  53. dateien->z( *systemAnzahl )->set( new Text( txt ), dAnzahl );
  54. delete[] txt;
  55. dAnzahl++;
  56. k->getNachricht( (char*)&län, 4 );
  57. }
  58. dateiAnzahl->set( dAnzahl, *systemAnzahl );
  59. ( *systemAnzahl )++;
  60. k->getNachricht( (char*)&län, 4 );
  61. }
  62. unlock();
  63. return 1;
  64. }
  65. bool PSKlient::updateFertig()
  66. {
  67. if( !verbunden )
  68. verbinden();
  69. if( !verbunden )
  70. return 0;
  71. lock();
  72. k->sende( "\xC", 1 );
  73. unsigned char res = 0;
  74. k->getNachricht( (char*)&res, 1 );
  75. if( res == 3 )
  76. {
  77. k->getNachricht( (char*)&res, 1 );
  78. char *txt = new char[ res + 1 ];
  79. k->getNachricht( txt, res );
  80. txt[ res ] = 0;
  81. fehler->setText( "Fehler während UpdateFertig bei PatchServer.\nServer Rückgabe:" );
  82. fehler->append( txt );
  83. delete[] txt;
  84. unlock();
  85. return 0;
  86. }
  87. unlock();
  88. return 1;
  89. }
  90. bool PSKlient::updateStarten( int dateiGruppeId )
  91. {
  92. if( !verbunden )
  93. verbinden();
  94. if( !verbunden )
  95. return 0;
  96. lock();
  97. k->sende( "\xD", 1 );
  98. unsigned char res = 0;
  99. k->getNachricht( (char*)&res, 1 );
  100. if( res == 3 )
  101. {
  102. k->getNachricht( (char*)&res, 1 );
  103. char *txt = new char[ res + 1 ];
  104. k->getNachricht( txt, res );
  105. txt[ res ] = 0;
  106. fehler->setText( "Fehler während UpdateStarten bei PatchServer.\nServer Rückgabe:" );
  107. fehler->append( txt );
  108. delete[] txt;
  109. unlock();
  110. return 0;
  111. }
  112. k->sende( (char*)&dateiGruppeId, 4 );
  113. k->getNachricht( (char*)&res, 1 );
  114. if( res == 3 )
  115. {
  116. k->getNachricht( (char*)&res, 1 );
  117. char *txt = new char[ res + 1 ];
  118. k->getNachricht( txt, res );
  119. txt[ res ] = 0;
  120. fehler->setText( "Fehler während UpdateStarten bei PatchServer.\nServer Rückgabe:" );
  121. fehler->append( txt );
  122. delete[] txt;
  123. unlock();
  124. return 0;
  125. }
  126. unlock();
  127. return 1;
  128. }
  129. bool PSKlient::getFileGroupInfoList( Array< FileGroupInfo* > *list )
  130. {
  131. if( !verbunden )
  132. verbinden();
  133. if( !verbunden )
  134. return 0;
  135. lock();
  136. k->sende( "\x10", 1 );
  137. unsigned char res = 0;
  138. k->getNachricht( (char*)&res, 1 );
  139. if( res == 1 )
  140. {
  141. int anz = 0;
  142. k->getNachricht( (char*)&anz, 4 );
  143. for( int i = 0; i < anz; i++ )
  144. {
  145. FileGroupInfo *info = new FileGroupInfo();
  146. k->getNachricht( (char*)&info->id, 4 );
  147. unsigned char len = 0;
  148. k->getNachricht( (char*)&len, 1 );
  149. info->name.fillText( ' ', len );
  150. k->getNachricht( info->name, len );
  151. k->getNachricht( (char*)&len, 1 );
  152. info->status.fillText( ' ', len );
  153. k->getNachricht( info->status, len );
  154. unsigned short l = 0;
  155. k->getNachricht( (char*)&l, 2 );
  156. info->path.fillText( ' ', l );
  157. k->getNachricht( info->path, l );
  158. k->getNachricht( (char*)&info->version, 4 );
  159. list->add( info );
  160. }
  161. }
  162. if( res == 3 )
  163. {
  164. k->getNachricht( (char*)&res, 1 );
  165. char *txt = new char[ res + 1 ];
  166. k->getNachricht( txt, res );
  167. txt[ res ] = 0;
  168. fehler->setText( "Fehler während getFileGroupInfoList bei PatchServer.\nServer Rückgabe:" );
  169. fehler->append( txt );
  170. delete[] txt;
  171. unlock();
  172. return 0;
  173. }
  174. unlock();
  175. return 1;
  176. }
  177. bool PSKlient::getSystemInfoList( RCArray< ReferenceCounting< std::pair< int, Text > > > *list )
  178. {
  179. if( !verbunden )
  180. verbinden();
  181. if( !verbunden )
  182. return 0;
  183. lock();
  184. k->sende( "\x11", 1 );
  185. unsigned char res = 0;
  186. k->getNachricht( (char*)&res, 1 );
  187. if( res == 1 )
  188. {
  189. int anz = 0;
  190. k->getNachricht( (char*)&anz, 4 );
  191. for( int i = 0; i < anz; i++ )
  192. {
  193. ReferenceCounting< std::pair< int, Text > > *obj = new ReferenceCounting< std::pair< int, Text > >();
  194. k->getNachricht( (char*)&obj->first, 4 );
  195. unsigned char len = 0;
  196. k->getNachricht( (char*)&len, 1 );
  197. obj->second.fillText( ' ', len );
  198. k->getNachricht( obj->second, len );
  199. list->add( obj );
  200. }
  201. }
  202. if( res == 3 )
  203. {
  204. k->getNachricht( (char*)&res, 1 );
  205. char *txt = new char[ res + 1 ];
  206. k->getNachricht( txt, res );
  207. txt[ res ] = 0;
  208. fehler->setText( "Fehler während getSystemInfoList bei PatchServer.\nServer Rückgabe:" );
  209. fehler->append( txt );
  210. delete[] txt;
  211. unlock();
  212. return 0;
  213. }
  214. unlock();
  215. return 1;
  216. }
  217. bool PSKlient::getFileInfoList( int system, int group, RCArray< ReferenceCounting< FileInfo > > *list )
  218. {
  219. if( !verbunden )
  220. verbinden();
  221. if( !verbunden )
  222. return 0;
  223. lock();
  224. k->sende( "\x12", 1 );
  225. unsigned char res = 0;
  226. k->getNachricht( (char*)&res, 1 );
  227. if( res == 1 )
  228. {
  229. k->sende( (char*)&system, 4 );
  230. k->sende( (char*)&group, 4 );
  231. int anz = 0;
  232. k->getNachricht( (char*)&anz, 4 );
  233. for( int i = 0; i < anz; i++ )
  234. {
  235. ReferenceCounting< FileInfo > *obj = new ReferenceCounting< FileInfo >();
  236. k->getNachricht( (char*)&obj->id, 4 );
  237. unsigned short len = 0;
  238. k->getNachricht( (char*)&len, 2 );
  239. obj->path.fillText( ' ', len );
  240. k->getNachricht( obj->path, len );
  241. k->getNachricht( (char*)&obj->version, 4 );
  242. unsigned char l = 0;
  243. k->getNachricht( (char*)&l, 1 );
  244. obj->time.fillText( ' ', l );
  245. k->getNachricht( obj->time, l );
  246. list->add( obj );
  247. }
  248. }
  249. if( res == 3 )
  250. {
  251. k->getNachricht( (char*)&res, 1 );
  252. char *txt = new char[ res + 1 ];
  253. k->getNachricht( txt, res );
  254. txt[ res ] = 0;
  255. fehler->setText( "Fehler während getSystemInfoList bei PatchServer.\nServer Rückgabe:" );
  256. fehler->append( txt );
  257. delete[] txt;
  258. unlock();
  259. return 0;
  260. }
  261. unlock();
  262. return 1;
  263. }
  264. bool PSKlient::getFileVersion( char *path, int system, int group, int *version )
  265. {
  266. if( !verbunden )
  267. verbinden();
  268. if( !verbunden )
  269. return 0;
  270. lock();
  271. k->sende( "\x13", 1 );
  272. unsigned char res = 0;
  273. k->getNachricht( (char*)&res, 1 );
  274. if( res == 1 )
  275. {
  276. unsigned short len = textLength( path );
  277. k->sende( (char*)&len, 2 );
  278. k->sende( path, len );
  279. k->sende( (char*)&group, 4 );
  280. k->sende( (char*)&system, 4 );
  281. k->getNachricht( (char*)version, 4 );
  282. }
  283. if( res == 3 )
  284. {
  285. k->getNachricht( (char*)&res, 1 );
  286. char *txt = new char[ res + 1 ];
  287. k->getNachricht( txt, res );
  288. txt[ res ] = 0;
  289. fehler->setText( "Fehler während getSystemInfoList bei PatchServer.\nServer Rückgabe:" );
  290. fehler->append( txt );
  291. delete[] txt;
  292. unlock();
  293. return 0;
  294. }
  295. unlock();
  296. return 1;
  297. }
  298. bool PSKlient::updateFile( const char *pfad, Zeit *zLetzteÄnderung, int system, int gruppe )
  299. {
  300. if( !verbunden )
  301. verbinden();
  302. if( !verbunden )
  303. return 0;
  304. lock();
  305. k->sende( "\x14", 1 );
  306. unsigned char res = 0;
  307. k->getNachricht( (char*)&res, 1 );
  308. if( res == 1 )
  309. {
  310. unsigned short len = textLength( pfad );
  311. k->sende( (char*)&len, 2 );
  312. k->sende( pfad, len );
  313. Text *time = zLetzteÄnderung->getZeit( "y-m-d h:i:s" );
  314. unsigned char l = (unsigned char)time->getLength();
  315. k->sende( (char*)&l, 1 );
  316. k->sende( time->getText(), l );
  317. k->sende( (char*)&system, 4 );
  318. k->sende( (char*)&gruppe, 4 );
  319. k->getNachricht( (char*)&res, 1 );
  320. time->release();
  321. }
  322. if( res == 3 )
  323. {
  324. k->getNachricht( (char*)&res, 1 );
  325. char *txt = new char[ res + 1 ];
  326. k->getNachricht( txt, res );
  327. txt[ res ] = 0;
  328. fehler->setText( "Fehler während getSystemInfoList bei PatchServer.\nServer Rückgabe:" );
  329. fehler->append( txt );
  330. delete[] txt;
  331. unlock();
  332. return 0;
  333. }
  334. unlock();
  335. return 1;
  336. }
  337. bool PSKlient::dateiGruppeUpdate( int gruppe )
  338. {
  339. if( !verbunden )
  340. verbinden();
  341. if( !verbunden )
  342. return 0;
  343. lock();
  344. k->sende( "\x15", 1 );
  345. unsigned char res = 0;
  346. k->getNachricht( (char*)&res, 1 );
  347. if( res == 1 )
  348. {
  349. k->sende( (char*)&gruppe, 4 );
  350. k->getNachricht( (char*)&res, 1 );
  351. }
  352. if( res == 3 )
  353. {
  354. k->getNachricht( (char*)&res, 1 );
  355. char *txt = new char[ res + 1 ];
  356. k->getNachricht( txt, res );
  357. txt[ res ] = 0;
  358. fehler->setText( "Fehler während getSystemInfoList bei PatchServer.\nServer Rückgabe:" );
  359. fehler->append( txt );
  360. delete[] txt;
  361. unlock();
  362. return 0;
  363. }
  364. unlock();
  365. return 1;
  366. }
  367. void PSKlient::abbruch()
  368. {
  369. if( verbunden )
  370. k->trenne();
  371. eingeloggt = 0;
  372. verbunden = 0;
  373. }
  374. // Reference Counting
  375. LTSKlient *PSKlient::getThis()
  376. {
  377. ref++;
  378. return this;
  379. }
  380. LTSKlient *PSKlient::release()
  381. {
  382. ref--;
  383. if( !ref )
  384. delete this;
  385. return 0;
  386. }