PatchServer.cpp 57 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577
  1. #include "PatchServer.h"
  2. #include <TextFeld.h>
  3. #include <MausEreignis.h>
  4. #include "..\..\Login\Login.h"
  5. #include <Datei.h>
  6. #include <iostream>
  7. // Inhalt der PSUpdate Klasse aus PatchServer.h
  8. // Kontruktor
  9. PSUpdate::PSUpdate( PatchServer *zPSA, AdminAccount *account )
  10. : Thread()
  11. {
  12. this->account = account;
  13. this->zPSA = zPSA;
  14. gruppeAnzahl = 0;
  15. gruppeId = 0;
  16. this->psc = 0;
  17. id = 0;
  18. }
  19. // Destruktor
  20. PSUpdate::~PSUpdate()
  21. {
  22. if( psc )
  23. {
  24. psc->abbruch();
  25. psc->release();
  26. }
  27. account->release();
  28. delete[] gruppeId;
  29. }
  30. // nicht constant
  31. void PSUpdate::setServer( const char *ip, unsigned short port )
  32. {
  33. if( psc )
  34. {
  35. psc->abbruch();
  36. psc->release();
  37. }
  38. psc = new PSKlient( ip, port );
  39. }
  40. void PSUpdate::setUpdateListe( int gAnzahl, Array< int > *gId )
  41. {
  42. gruppeAnzahl = gAnzahl;
  43. delete[] gruppeId;
  44. gruppeId = 0;
  45. if( gAnzahl )
  46. {
  47. gruppeId = new int[ gAnzahl ];
  48. for( int i = 0; i < gAnzahl; i++ )
  49. gruppeId[ i ] = gId->get( i );
  50. }
  51. }
  52. void PSUpdate::thread()
  53. {
  54. if( !psc )
  55. {
  56. for( int g = 0; g < gruppeAnzahl; g++ )
  57. zPSA->setUpdateFertig( 1, gruppeId[ g ] );
  58. return;
  59. }
  60. if( !psc->login( account->zName()->getText(), account->zPasswort()->getText() ) )
  61. {
  62. for( int g = 0; g < gruppeAnzahl; g++ )
  63. zPSA->setUpdateFertig( 1, gruppeId[ g ] );
  64. return;
  65. }
  66. Array< FileGroupInfo* > fileGroupList;
  67. psc->getFileGroupInfoList( &fileGroupList );
  68. RCArray< ReferenceCounting< std::pair< int, Text > > > systemT;
  69. psc->getSystemInfoList( &systemT );
  70. int gAnz = fileGroupList.getEintragAnzahl();
  71. for( int g = 0; g < gruppeAnzahl; g++ )
  72. {
  73. Text *initPfad = new Text( "data/" );
  74. for( int i = 0; i < gAnz; i++ )
  75. {
  76. if( gruppeId[ g ] == fileGroupList.get( i )->id )
  77. {
  78. initPfad->append( (char*)fileGroupList.get( i )->name );
  79. break;
  80. }
  81. }
  82. initPfad->append( ".ini" );
  83. InitDatei *systemInit = new InitDatei( initPfad );
  84. systemInit->laden();
  85. bool cont = 0;
  86. int sAnz = systemT.getEintragAnzahl();
  87. for( int i = 0; i < sAnz; i++ ) // Prüfen, ob Lokale Version aktuell ist
  88. {
  89. if( !systemInit->wertExistiert( systemT.z( i )->second ) )
  90. {
  91. systemInit->release();
  92. zPSA->setUpdateFertig( 1, gruppeId[ g ] );
  93. cont = 1;
  94. break;
  95. }
  96. Text *pfad = new Text( systemInit->zWert( (char*)systemT.z( i )->second )->getText() );
  97. pfad->append( "/" );
  98. RCArray< ReferenceCounting< FileInfo > > dateiT;
  99. psc->getFileInfoList( systemT.z( i )->first, gruppeId[ g ], &dateiT );
  100. int dAnz = dateiT.getEintragAnzahl();
  101. bool br = 0;
  102. for( int j = 0; j < dAnz; j++ )
  103. {
  104. Text *pf = new Text( pfad->getText() );
  105. pf->append( dateiT.z( j )->path.getText() );
  106. if( !DateiExistiert( pf->getThis() ) )
  107. {
  108. pfad->release();
  109. pf->release();
  110. systemInit->release();
  111. zPSA->setUpdateFertig( 1, gruppeId[ g ] );
  112. cont = 1;
  113. br = 1;
  114. break;
  115. }
  116. if( !DateiIstVerzeichnis( pf->getThis() ) )
  117. {
  118. Datei *d = new Datei();
  119. d->setDatei( pf->getText() );
  120. Zeit *zeit = d->getLastChange();
  121. d->release();
  122. if( !zeit->istGleich( "y-m-d h:i:s", dateiT.z( j )->time.getText() ) )
  123. {
  124. zeit->release();
  125. pfad->release();
  126. pf->release();
  127. systemInit->release();
  128. zPSA->setUpdateFertig( 1, gruppeId[ g ] );
  129. cont = 1;
  130. br = 1;
  131. break;
  132. }
  133. zeit->release();
  134. }
  135. pf->release();
  136. }
  137. if( br )
  138. break;
  139. pfad->release();
  140. }
  141. if( cont )
  142. continue;
  143. if( psc->updateStarten( gruppeId[ g ] ) )
  144. {
  145. RCArray< Text > *systemA = new RCArray< Text >();
  146. RCArray< RCArray< Text > > *dateiA = new RCArray< RCArray< Text > >();
  147. Array< int > *dateiAnzahlA = new Array< int >();
  148. int systemAnzahl = 0;
  149. bool ok = psc->getDateiListe( &systemAnzahl, dateiAnzahlA, systemA, dateiA );
  150. if( !ok )
  151. {
  152. systemA->release();
  153. dateiA->release();
  154. dateiAnzahlA->release();
  155. systemInit->release();
  156. zPSA->setUpdateFertig( 1, gruppeId[ g ] );
  157. continue;
  158. }
  159. __int64 maxAktionen = 0;
  160. for( int i = 0; i < systemAnzahl; i++ )
  161. {
  162. for( int j = 0; j < dateiAnzahlA->get( i ); j++ )
  163. {
  164. Text *pfad = new Text( systemInit->zWert( systemA->z( i )->getText() )->getText() );
  165. pfad->append( "/" );
  166. pfad->append( dateiA->z( i )->z( j )->getText() );
  167. Datei *d = new Datei();
  168. d->setDatei( pfad );
  169. if( !d->istOrdner() )
  170. maxAktionen += d->getSize();
  171. d->release();
  172. }
  173. }
  174. __int64 aktionen = 0;
  175. int prozent = 0;
  176. bool br = 0;
  177. for( int i = 0; i < systemAnzahl; i++ )
  178. {
  179. for( int j = 0; j < dateiAnzahlA->get( i ); j++ )
  180. {
  181. Text *pfad = new Text( systemInit->zWert( systemA->z( i )->getText() )->getText() );
  182. pfad->append( "/" );
  183. pfad->append( dateiA->z( i )->z( j )->getText() );
  184. Datei *d = new Datei();
  185. d->setDatei( pfad );
  186. if( d->istOrdner() )
  187. {
  188. d->release();
  189. continue;
  190. }
  191. __int64 gr = d->getSize();
  192. d->open( Datei::Style::lesen );
  193. int version;
  194. int system = 0;
  195. for( int s = 0; s < sAnz; s++ )
  196. {
  197. if( systemT.z( s )->second.istGleich( systemA->z( i )->getText() ) )
  198. system = systemT.z( s )->first;
  199. }
  200. psc->getFileVersion( dateiA->z( i )->z( j )->getText(), system, gruppeId[ g ], &version );
  201. psc->lock();
  202. psc->zKlient()->sende( "\xE", 1 );
  203. char ret = 0;
  204. psc->zKlient()->getNachricht( &ret, 1 );
  205. if( ret == 1 )
  206. {
  207. psc->zKlient()->sende( (char*)&system, 4 );
  208. psc->zKlient()->sende( (char*)&version, 4 );
  209. short län = dateiA->z( i )->z( j )->getLength();
  210. psc->zKlient()->sende( (char*)&län, 2 );
  211. psc->zKlient()->sende( dateiA->z( i )->z( j )->getText(), län );
  212. psc->zKlient()->getNachricht( &ret, 1 );
  213. if( ret == 1 )
  214. {
  215. while( gr )
  216. {
  217. if( gr >= 2048 )
  218. {
  219. gr -= 2048;
  220. län = 2048;
  221. }
  222. else
  223. {
  224. län = (int)gr;
  225. gr = 0;
  226. }
  227. if( län < 0 )
  228. break;
  229. psc->zKlient()->sende( (char*)&län, 2 );
  230. char *buff = new char[ län ];
  231. d->lese( buff, län );
  232. psc->zKlient()->sende( buff, län );
  233. delete[] buff;
  234. aktionen += län;
  235. if( prozent != 100 / ( maxAktionen / (long double)aktionen ) )
  236. {
  237. prozent = (int)( 100 / ( maxAktionen / (long double)aktionen ) );
  238. zPSA->setUpdateProzent( prozent, gruppeId[ g ] );
  239. }
  240. }
  241. psc->zKlient()->sende( "\0\0", 2 );
  242. psc->zKlient()->getNachricht( &ret, 1 );
  243. }
  244. }
  245. if( prozent != 100 / ( maxAktionen / (long double)aktionen ) )
  246. {
  247. prozent = (int)( 100 / ( maxAktionen / (long double)aktionen ) );
  248. zPSA->setUpdateProzent( prozent, gruppeId[ g ] );
  249. }
  250. if( ret == 3 )
  251. {
  252. d->close();
  253. d->release();
  254. systemA->release();
  255. dateiA->release();
  256. dateiAnzahlA->release();
  257. char l = 0;
  258. psc->zKlient()->getNachricht( &l, 1 );
  259. char *txt = new char[ l + 1 ];
  260. txt[ l ] = 0;
  261. if( l )
  262. psc->zKlient()->getNachricht( txt, l );
  263. std::cout << "Error: " << txt << "\n";
  264. delete[] txt;
  265. psc->unlock();
  266. zPSA->setUpdateProzent( 0, gruppeId[ g ] );
  267. zPSA->setUpdateFertig( 1, gruppeId[ g ] );
  268. br = 1;
  269. break;
  270. }
  271. psc->unlock();
  272. d->close();
  273. d->release();
  274. }
  275. if( br )
  276. break;
  277. }
  278. if( br )
  279. continue;
  280. psc->updateFertig();
  281. systemA->release();
  282. dateiA->release();
  283. dateiAnzahlA->release();
  284. }
  285. else
  286. {
  287. systemInit->release();
  288. zPSA->setUpdateProzent( 0, gruppeId[ g ] );
  289. zPSA->setUpdateFertig( 1, gruppeId[ g ] );
  290. continue;
  291. }
  292. zPSA->setUpdateProzent( 0, gruppeId[ g ] );
  293. zPSA->setUpdateFertig( 0, gruppeId[ g ] );
  294. systemInit->release();
  295. }
  296. for( int i = 0; i < gAnz; i++ )
  297. delete fileGroupList.get( i );
  298. zPSA->setUpdateFertig( 0, 0 );
  299. run = 0;
  300. }
  301. // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
  302. Thread *PSUpdate::release()
  303. {
  304. if( ref == 2 && run )
  305. ende();
  306. return Thread::release();
  307. }
  308. // Inhalt der PSDetails Klasse aus PatchServer.h
  309. // Konstruktor
  310. PSDetails::PSDetails( PatchServer *zPSA, MSKlient *mk )
  311. : Thread()
  312. {
  313. this->zPSA = zPSA;
  314. this->mk = mk;
  315. id = 0;
  316. }
  317. // Destruktor
  318. PSDetails::~PSDetails()
  319. {
  320. mk->release();
  321. }
  322. // nicht constant
  323. void PSDetails::setServerId( int id )
  324. {
  325. this->id = id;
  326. }
  327. void PSDetails::thread()
  328. {
  329. ServerDetails detail;
  330. mk->getPatchServerDetails( id, &detail );
  331. if( !mk->getPatchServerDetails( id, &detail ) )
  332. {
  333. Text *err = new Text( "Fehler: Server Rückgabe: " );
  334. err->append( mk->getLetzterFehler() );
  335. zPSA->setServerDetails( id, "", "", 0, 0, 0, 0, -2, err );
  336. }
  337. else
  338. {
  339. PSKlient *psc = new PSKlient( detail.ip, detail.adminPort );
  340. int st = psc->getStatus();
  341. if( st >= 0 )
  342. psc->trenne();
  343. psc->release();
  344. zPSA->setServerDetails( id,
  345. detail.name,
  346. detail.ip,
  347. detail.port,
  348. detail.adminPort,
  349. detail.tasks,
  350. detail.maxTasks,
  351. st,
  352. 0 );
  353. }
  354. run = 0;
  355. }
  356. // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
  357. Thread *PSDetails::release()
  358. {
  359. if( ref == 2 && run )
  360. ende();
  361. return Thread::release();
  362. }
  363. // Inhalt der PSSuche Klasse aus PatchServer.h
  364. // Konstruktor
  365. PSSuche::PSSuche( PatchServer *zPSA, MSKlient *mk )
  366. : Thread()
  367. {
  368. this->zPSA = zPSA;
  369. this->mk = mk;
  370. }
  371. // Destruktor
  372. PSSuche::~PSSuche()
  373. {
  374. mk->release();
  375. }
  376. // nicht constant
  377. void PSSuche::thread()
  378. {
  379. Array< ServerData* > list;
  380. if( mk->getPatchServerListe( &list ) )
  381. {
  382. int anz = list.getEintragAnzahl();
  383. for( int i = 0; i < anz; i++ )
  384. {
  385. int st = -1;
  386. ServerData *s = list.get( i );
  387. if( !s->status.istGleich( "Unerreichbar" ) )
  388. {
  389. PSKlient *psc = new PSKlient( s->ip.getText(), s->adminPort );
  390. st = psc->getStatus();
  391. switch( st )
  392. {
  393. case -2:
  394. s->status = "Unbekannt";
  395. break;
  396. case -1:
  397. s->status = "Unerreichbar";
  398. break;
  399. case 0:
  400. s->status = "Offline";
  401. break;
  402. case 1:
  403. s->status = "Pausiert";
  404. break;
  405. case 2:
  406. s->status = "Online";
  407. break;
  408. case 3:
  409. s->status = "Veraltet";
  410. break;
  411. }
  412. if( st >= 0 )
  413. psc->trenne();
  414. psc->release();
  415. }
  416. zPSA->addServer( s->id,
  417. s->name,
  418. s->ip,
  419. s->port,
  420. s->adminPort,
  421. s->status );
  422. delete s;
  423. }
  424. }
  425. zPSA->sucheAbgeschlossen();
  426. run = 0;
  427. }
  428. // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
  429. Thread *PSSuche::release()
  430. {
  431. if( ref == 2 && run )
  432. ende();
  433. return Thread::release();
  434. }
  435. TextFeld *getTabellenEintrag( const char *txt, Schrift *s, int farbe )
  436. {
  437. TextFeld *tmp = new TextFeld();
  438. tmp->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center );
  439. tmp->setSchriftZ( s );
  440. tmp->setText( txt );
  441. tmp->setSchriftFarbe( farbe );
  442. return tmp;
  443. }
  444. // Inhalt der PatchServer Klasse aus PatchServer.h
  445. // Konstruktor
  446. PatchServer::PatchServer( Schrift *s, InitDatei *d, MSKlient *msk, RessourceBild *rb, AdminAccount *acc, Bildschirm *b )
  447. : Abschnitt( b )
  448. {
  449. fenster = 0;
  450. this->msk = msk;
  451. iD = d;
  452. account = acc;
  453. schrift = s;
  454. psc = 0;
  455. f = new Fenster();
  456. f->setStyle( Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered );
  457. f->setRFarbe( 0xFFFFFFFF );
  458. f->setRBreite( 1 );
  459. f->setTitel( "Patch Server" );
  460. f->setTSchriftZ( s->getThis() );
  461. f->setTSFarbe( 0xFFFFFFFF );
  462. f->setTSSize( 12 );
  463. f->setTAfFarbe( 0x1000FF00 );
  464. f->setTAfStrength( -15 );
  465. f->setTRFarbe( 0xFFFFFFFF );
  466. f->setTRBreite( 1 );
  467. f->zTTextFeld()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Rahmen );
  468. f->zTTextFeld()->setSize( 0, 20 );
  469. f->setSize( 492, 277 );
  470. liste = new Fenster();
  471. liste->setStyle( Fenster::Style::Sichtbar | Fenster::Style::Erlaubt );
  472. liste->setSize( 490, 255 );
  473. f->addMember( liste->getThis() );
  474. details = new Fenster();
  475. details->setStyle( Fenster::Style::Erlaubt );
  476. details->setSize( 490, 255 );
  477. f->addMember( details->getThis() );
  478. updateF = new Fenster();
  479. updateF->setStyle( Fenster::Style::Erlaubt );
  480. updateF->setSize( 490, 255 );
  481. f->addMember( updateF->getThis() );
  482. tabelle = new ObjTabelle();
  483. tabelle->setStyle( ObjTabelle::Style::Sichtbar | ObjTabelle::Style::VScroll | ObjTabelle::Style::Rahmen | ObjTabelle::Style::Raster | ObjTabelle::Style::Erlaubt );
  484. tabelle->setMausEreignis( _ret1ME );
  485. tabelle->setRahmenFarbe( 0xFFFFFFFF );
  486. tabelle->setRasterFarbe( 0xFFA0A0A0 );
  487. tabelle->setRasterBreite( 1 );
  488. tabelle->setPosition( 5, 5 );
  489. tabelle->setSize( 480, 220 );
  490. tabelle->setVertikalKlickScroll( 5 );
  491. tabelle->addSpalte( "id" );
  492. tabelle->setSpaltenBreite( 0, 40 );
  493. tabelle->addSpalte( "name" );
  494. tabelle->setSpaltenBreite( 1, 105 );
  495. tabelle->addSpalte( "ip" );
  496. tabelle->setSpaltenBreite( 2, 90 );
  497. tabelle->addSpalte( "port" );
  498. tabelle->setSpaltenBreite( 3, 50 );
  499. tabelle->addSpalte( "aport" );
  500. tabelle->setSpaltenBreite( 4, 50 );
  501. tabelle->addSpalte( "status" );
  502. tabelle->setSpaltenBreite( 5, 100 );
  503. tabelle->addSpalte( "auswahl" );
  504. tabelle->setSpaltenBreite( 6, 20 );
  505. tabelle->addZeile( "Überschrifft" );
  506. tabelle->setZeilenHeight( 0, 20 );
  507. tabelle->setZeichnungZ( 0, 0, getTabellenEintrag( "Id", s->getThis(), 0xFFFFFFFF ) );
  508. tabelle->setZeichnungZ( 1, 0, getTabellenEintrag( "Name", s->getThis(), 0xFFFFFFFF ) );
  509. tabelle->setZeichnungZ( 2, 0, getTabellenEintrag( "Ip", s->getThis(), 0xFFFFFFFF ) );
  510. tabelle->setZeichnungZ( 3, 0, getTabellenEintrag( "Port", s->getThis(), 0xFFFFFFFF ) );
  511. tabelle->setZeichnungZ( 4, 0, getTabellenEintrag( "APort", s->getThis(), 0xFFFFFFFF ) );
  512. tabelle->setZeichnungZ( 5, 0, getTabellenEintrag( "Status", s->getThis(), 0xFFFFFFFF ) );
  513. tabelle->setZeichnungZ( 6, 0, 0 );
  514. liste->addMember( tabelle->getThis() );
  515. aktualisieren = new Knopf();
  516. aktualisieren->setText( "" );
  517. aktualisieren->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
  518. aktualisieren->setHintergrundBildZ( rb->get( "neuladen.png" ) );
  519. aktualisieren->setPosition( 236, 230 );
  520. aktualisieren->setSize( 20, 20 );
  521. aktualisieren->setMausEreignisParameter( this );
  522. aktualisieren->setMausEreignis( patchServerAktualisierenMausEreignis );
  523. f->addMember( aktualisieren->getThis() );
  524. weiter = new Knopf();
  525. weiter->setText( "" );
  526. weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
  527. weiter->setHintergrundBildZ( rb->get( "weiter.png" ) );
  528. weiter->setPosition( 261, 230 );
  529. weiter->setSize( 20, 20 );
  530. weiter->setMausEreignisParameter( this );
  531. weiter->setMausEreignis( patchServerWeiterMausEreignis );
  532. f->addMember( weiter->getThis() );
  533. zurück = new Knopf();
  534. zurück->setText( "" );
  535. zurück->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
  536. zurück->setHintergrundBildZ( rb->get( "zurück.png" ) );
  537. zurück->setPosition( 211, 230 );
  538. zurück->setSize( 20, 20 );
  539. zurück->setMausEreignisParameter( this );
  540. zurück->setMausEreignis( patchServerZurückMausEreignis );
  541. f->addMember( zurück->getThis() );
  542. serverId = new TextFeld();
  543. serverId->setStyle( TextFeld::Style::Sichtbar );
  544. serverId->setSchriftZ( s->getThis() );
  545. serverId->setSchriftFarbe( 0xFFFFFFFF );
  546. serverId->setSchriftSize( 12 );
  547. serverId->setText( "ID: " );
  548. serverId->setSize( 100, 20 );
  549. serverId->setPosition( 10, 10 );
  550. details->addMember( serverId->getThis() );
  551. serverName = new TextFeld();
  552. serverName->setStyle( TextFeld::Style::Sichtbar );
  553. serverName->setSchriftZ( s->getThis() );
  554. serverName->setSchriftFarbe( 0xFFFFFFFF );
  555. serverName->setSchriftSize( 12 );
  556. serverName->setText( "Name: " );
  557. serverName->setSize( 150, 20 );
  558. serverName->setPosition( 120, 10 );
  559. details->addMember( serverName->getThis() );
  560. serverIp = new TextFeld();
  561. serverIp->setStyle( TextFeld::Style::Sichtbar );
  562. serverIp->setSchriftZ( s->getThis() );
  563. serverIp->setSchriftFarbe( 0xFFFFFFFF );
  564. serverIp->setSchriftSize( 12 );
  565. serverIp->setText( "IP: " );
  566. serverIp->setSize( 120, 20 );
  567. serverIp->setPosition( 280, 10 );
  568. details->addMember( serverIp->getThis() );
  569. serverPort = new TextFeld();
  570. serverPort->setStyle( TextFeld::Style::Sichtbar );
  571. serverPort->setSchriftZ( s->getThis() );
  572. serverPort->setSchriftFarbe( 0xFFFFFFFF );
  573. serverPort->setSchriftSize( 12 );
  574. serverPort->setText( "Port: " );
  575. serverPort->setSize( 100, 20 );
  576. serverPort->setPosition( 10, 40 );
  577. details->addMember( serverPort->getThis() );
  578. serverAPort = new TextFeld();
  579. serverAPort->setStyle( TextFeld::Style::Sichtbar );
  580. serverAPort->setSchriftZ( s->getThis() );
  581. serverAPort->setSchriftFarbe( 0xFFFFFFFF );
  582. serverAPort->setSchriftSize( 12 );
  583. serverAPort->setText( "Admin Port: " );
  584. serverAPort->setSize( 200, 20 );
  585. serverAPort->setPosition( 120, 40 );
  586. details->addMember( serverAPort->getThis() );
  587. serverClients = new TextFeld();
  588. serverClients->setStyle( TextFeld::Style::Sichtbar );
  589. serverClients->setSchriftZ( s->getThis() );
  590. serverClients->setSchriftFarbe( 0xFFFFFFFF );
  591. serverClients->setSchriftSize( 12 );
  592. serverClients->setText( "Clients: " );
  593. serverClients->setSize( 100, 20 );
  594. serverClients->setPosition( 10, 70 );
  595. details->addMember( serverClients->getThis() );
  596. serverMaxClients = new TextFeld();
  597. serverMaxClients->setStyle( TextFeld::Style::Sichtbar );
  598. serverMaxClients->setSchriftZ( s->getThis() );
  599. serverMaxClients->setSchriftFarbe( 0xFFFFFFFF );
  600. serverMaxClients->setSchriftSize( 12 );
  601. serverMaxClients->setText( "Max Clients: " );
  602. serverMaxClients->setSize( 80, 20 );
  603. serverMaxClients->setPosition( 120, 70 );
  604. details->addMember( serverMaxClients->getThis() );
  605. maxClients = new TextFeld();
  606. maxClients->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Erlaubt | TextFeld::Style::Rahmen | TextFeld::Style::Buffered | TextFeld::Style::VCenter );
  607. maxClients->setSchriftZ( s->getThis() );
  608. maxClients->setSchriftFarbe( 0xFFFFFFFF );
  609. maxClients->setSchriftSize( 12 );
  610. maxClients->setRahmenBreite( 1 );
  611. maxClients->setRahmenFarbe( 0xFFFFFFFF );
  612. maxClients->setAlphaFeldFarbe( 0x1000FF00 );
  613. maxClients->setAlphaFeldStrength( -5 );
  614. maxClients->setText( "" );
  615. maxClients->setSize( 100, 20 );
  616. maxClients->setPosition( 200, 68 );
  617. maxClients->setMausEreignis( _ret1ME );
  618. maxClients->setTastaturEreignisParameter( this );
  619. maxClients->setTastaturEreignis( patchServerMaxClientsTastaturEreignis );
  620. details->addMember( maxClients->getThis() );
  621. serverStatus = new TextFeld();
  622. serverStatus->setStyle( TextFeld::Style::Sichtbar );
  623. serverStatus->setSchriftZ( s->getThis() );
  624. serverStatus->setSchriftFarbe( 0xFFFFFFFF );
  625. serverStatus->setSchriftSize( 12 );
  626. serverStatus->setText( "Status: " );
  627. serverStatus->setSize( 150, 20 );
  628. serverStatus->setPosition( 10, 100 );
  629. details->addMember( serverStatus->getThis() );
  630. serverFehler = new TextFeld();
  631. serverFehler->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Mehrzeilig );
  632. serverFehler->setSchriftZ( s->getThis() );
  633. serverFehler->setSchriftFarbe( 0xFFFFFFFF );
  634. serverFehler->setSchriftSize( 12 );
  635. serverFehler->setText( "" );
  636. serverFehler->setSize( 470, 60 );
  637. serverFehler->setPosition( 10, 130 );
  638. details->addMember( serverFehler->getThis() );
  639. update = new Knopf();
  640. update->setStyle( Knopf::Style::Normal & ~Knopf::Style::Erlaubt );
  641. update->setText( "Update" );
  642. update->setSchriftZ( s->getThis() );
  643. update->setMausEreignisParameter( this );
  644. update->setMausEreignis( patchServerUpdateMausEreignis );
  645. update->setSize( 80, 20 );
  646. update->setPosition( 400, 100 );
  647. details->addMember( update->getThis() );
  648. pausieren = new Knopf();
  649. pausieren->setStyle( Knopf::Style::Normal & ~Knopf::Style::Erlaubt );
  650. pausieren->setText( "Pausieren" );
  651. pausieren->setSchriftZ( s->getThis() );
  652. pausieren->setMausEreignisParameter( this );
  653. pausieren->setMausEreignis( patchServerPausierenMausEreignis );
  654. pausieren->setSize( 80, 20 );
  655. pausieren->setPosition( 10, 200 );
  656. details->addMember( pausieren->getThis() );
  657. stoppen = new Knopf();
  658. stoppen->setStyle( Knopf::Style::Normal & ~Knopf::Style::Erlaubt );
  659. stoppen->setText( "Stoppen" );
  660. stoppen->setSchriftZ( s->getThis() );
  661. stoppen->setMausEreignisParameter( this );
  662. stoppen->setMausEreignis( patchServerStoppenMausEreignis );
  663. stoppen->setSize( 80, 20 );
  664. stoppen->setPosition( 100, 200 );
  665. details->addMember( stoppen->getThis() );
  666. beenden = new Knopf();
  667. beenden->setStyle( Knopf::Style::Normal & ~Knopf::Style::Erlaubt );
  668. beenden->setText( "Beenden" );
  669. beenden->setSchriftZ( s->getThis() );
  670. beenden->setMausEreignisParameter( this );
  671. beenden->setMausEreignis( patchServerBeendenMausEreignis );
  672. beenden->setSize( 80, 20 );
  673. beenden->setPosition( 190, 200 );
  674. details->addMember( beenden->getThis() );
  675. terminieren = new Knopf();
  676. terminieren->setStyle( Knopf::Style::Normal & ~Knopf::Style::Erlaubt );
  677. terminieren->setText( "Terminieren" );
  678. terminieren->setSchriftZ( s->getThis() );
  679. terminieren->setMausEreignisParameter( this );
  680. terminieren->setMausEreignis( patchServerTerminierenMausEreignis );
  681. terminieren->setSize( 80, 20 );
  682. terminieren->setPosition( 280, 200 );
  683. details->addMember( terminieren->getThis() );
  684. setMaxClients = new Knopf();
  685. setMaxClients->setStyle( Knopf::Style::Normal & ~Knopf::Style::Erlaubt );
  686. setMaxClients->setText( "set Max Clients" );
  687. setMaxClients->setSchriftZ( s->getThis() );
  688. setMaxClients->setMausEreignisParameter( this );
  689. setMaxClients->setMausEreignis( patchServerSetMaxClientsMausEreignis );
  690. setMaxClients->setSize( 110, 20 );
  691. setMaxClients->setPosition( 370, 200 );
  692. details->addMember( setMaxClients->getThis() );
  693. updateT = new ObjTabelle();
  694. updateT->setStyle( ObjTabelle::Style::Sichtbar | ObjTabelle::Style::Erlaubt | ObjTabelle::Style::Rahmen | ObjTabelle::Style::VScroll );
  695. updateT->setVertikalKlickScroll( 10 );
  696. updateT->setMausEreignis( _ret1ME );
  697. updateT->setRahmenFarbe( 0xFFFFFFFF );
  698. updateT->setPosition( 5, 5 );
  699. updateT->setSize( 480, 190 );
  700. updateT->addSpalte( "Name" );
  701. updateT->addSpalte( "Status" );
  702. updateT->addSpalte( "Auswahl" );
  703. updateT->addSpalte( "Update" );
  704. updateT->setSpaltenBreite( 0, 340 );
  705. updateT->setSpaltenBreite( 1, 100 );
  706. updateT->setSpaltenBreite( 2, 22 );
  707. updateT->setSpaltenBreite( 3, 0 );
  708. updateT->addZeile( "Titel" );
  709. updateT->setZeilenHeight( 0, 20 );
  710. TextFeld *uTN = new TextFeld();
  711. uTN->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Center );
  712. uTN->setSchriftZ( s->getThis() );
  713. uTN->setSchriftFarbe( 0xFFFFFFFF );
  714. uTN->setSchriftSize( 12 );
  715. uTN->setRahmenFarbe( 0xFFFFFFFF );
  716. uTN->setText( "Name" );
  717. updateT->setZeichnungZ( 0, 0, uTN );
  718. TextFeld *uTS = new TextFeld();
  719. uTS->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Center );
  720. uTS->setSchriftZ( s->getThis() );
  721. uTS->setSchriftFarbe( 0xFFFFFFFF );
  722. uTS->setSchriftSize( 12 );
  723. uTS->setRahmenFarbe( 0xFFFFFFFF );
  724. uTS->setText( "Status" );
  725. updateT->setZeichnungZ( 1, 0, uTS );
  726. updateT->setMausEreignis( _ret1ME );
  727. updateT->setTastaturEreignis( _ret1TE );
  728. updateF->addMember( updateT->getThis() );
  729. updateStarten = new Knopf();
  730. updateStarten->setStyle( Knopf::Style::Normal );
  731. updateStarten->setText( "Start" );
  732. updateStarten->setSchriftZ( s->getThis() );
  733. updateStarten->setMausEreignisParameter( this );
  734. updateStarten->setMausEreignis( patchServerUpdateStartenMausEreignis );
  735. updateStarten->setSize( 80, 20 );
  736. updateStarten->setPosition( 205, 200 );
  737. updateF->addMember( updateStarten->getThis() );
  738. obj = new Zeichnung();
  739. suchen = new PSSuche( this, msk->getThis() );
  740. getDetails = new PSDetails( this, msk->getThis() );
  741. updateTh = new PSUpdate( this, account->getThis() );
  742. rb->release();
  743. ref = 1;
  744. }
  745. // Destruktor
  746. PatchServer::~PatchServer()
  747. {
  748. delete obj;
  749. if( psc )
  750. {
  751. psc->trenne();
  752. psc->release();
  753. }
  754. if( fenster )
  755. {
  756. fenster->removeMember( f );
  757. fenster->release();
  758. }
  759. account->release();
  760. msk->release();
  761. iD->release();
  762. f->release();
  763. liste->release();
  764. details->release();
  765. updateF->release();
  766. updateStarten->release();
  767. updateT->release();
  768. aktualisieren->release();
  769. weiter->release();
  770. zurück->release();
  771. update->release();
  772. pausieren->release();
  773. stoppen->release();
  774. beenden->release();
  775. terminieren->release();
  776. setMaxClients->release();
  777. serverId->release();
  778. serverName->release();
  779. serverIp->release();
  780. serverPort->release();
  781. serverAPort->release();
  782. serverClients->release();
  783. serverMaxClients->release();
  784. serverStatus->release();
  785. serverFehler->release();
  786. maxClients->release();
  787. suchen->release();
  788. getDetails->release();
  789. updateTh->release();
  790. tabelle->release();
  791. schrift->release();
  792. }
  793. // nicht constant
  794. void PatchServer::setFenster( Fenster *f )
  795. {
  796. if( fenster )
  797. fenster->release();
  798. this->f->setPosition( f->getBreite() / 2 - this->f->getBreite() / 2, f->getHeight() / 2 - this->f->getHeight() / 2 );
  799. fenster = f;
  800. }
  801. void PatchServer::setSichtbar( bool s )
  802. {
  803. sichtbar = s;
  804. if( s )
  805. {
  806. if( !suchen->isRunning() && liste->hatStyle( Fenster::Style::Sichtbar ) )
  807. {
  808. for( int y = 1; y < tabelle->getZeilenAnzahl(); y++ )
  809. tabelle->removeZeile( 1 );
  810. weiter->removeStyle( Knopf::Style::Erlaubt );
  811. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  812. tabelle->removeStyle( ObjTabelle::Style::Erlaubt );
  813. suchen->start();
  814. }
  815. fenster->addMember( f->getThis() );
  816. }
  817. else
  818. fenster->removeMember( f );
  819. }
  820. void PatchServer::addServer( int id, char *name, char *ip, int port, int adminPort, char *status )
  821. {
  822. Text *txt = new Text();
  823. txt->append( id );
  824. tabelle->addZeile( txt->getText() );
  825. int y = tabelle->getZeilenNummer( txt->getText() );
  826. tabelle->setZeilenHeight( y, 20 );
  827. tabelle->setZeichnungZ( 0, y, getTabellenEintrag( txt->getText(), schrift->getThis(), 0xFFFFFFFF ) );
  828. tabelle->setZeichnungZ( 1, y, getTabellenEintrag( name, schrift->getThis(), 0xFFFFFFFF ) );
  829. tabelle->setZeichnungZ( 2, y, getTabellenEintrag( ip, schrift->getThis(), 0xFFFFFFFF ) );
  830. txt->setText( "" );
  831. txt->append( port );
  832. tabelle->setZeichnungZ( 3, y, getTabellenEintrag( txt->getText(), schrift->getThis(), 0xFFFFFFFF ) );
  833. txt->setText( "" );
  834. txt->append( adminPort );
  835. tabelle->setZeichnungZ( 4, y, getTabellenEintrag( txt->getText(), schrift->getThis(), 0xFFFFFFFF ) );
  836. txt->release();
  837. tabelle->setZeichnungZ( 5, y, getTabellenEintrag( status, schrift->getThis(), getColorFromStatus( status ) ) );
  838. KontrollKnopf *knopf = new KontrollKnopf();
  839. knopf->setStyle( KontrollKnopf::Style::Sichtbar | KontrollKnopf::Style::Erlaubt | KontrollKnopf::Style::KlickBuffer );
  840. knopf->loadData( "data/bilder/icons.ltdb" );
  841. knopf->setMausEreignisParameter( this );
  842. knopf->setMausEreignis( patchServerAuswahlKnopfMausEreignis );
  843. tabelle->setZeichnungZ( 6, y, knopf );
  844. }
  845. void PatchServer::setServerDetails( int id, char *name, char *ip, int port, int adminPort, int clients, int maxClients, int status, Text *error )
  846. {
  847. if( !psc )
  848. {
  849. psc = new PSKlient( ip, adminPort );
  850. psc->verbinden();
  851. psc->login( account->zName()->getText(), account->zPasswort()->getText() );
  852. updateTh->setServer( ip, adminPort );
  853. }
  854. if( !error )
  855. {
  856. serverId->setText( "ID: " );
  857. serverId->zText()->append( id );
  858. serverName->setText( "Name: " );
  859. serverName->zText()->append( name );
  860. serverIp->setText( "IP: " );
  861. serverIp->zText()->append( ip );
  862. serverPort->setText( "Port: " );
  863. serverPort->zText()->append( port );
  864. serverAPort->setText( "Admin Port: " );
  865. serverAPort->zText()->append( adminPort );
  866. serverClients->setText( "Clients: " );
  867. serverClients->zText()->append( clients );
  868. this->maxClients->setText( "" );
  869. this->maxClients->zText()->append( maxClients );
  870. serverFehler->setText( "" );
  871. serverFehler->setSchriftFarbe( 0xFFFFFFFF );
  872. switch( status )
  873. {
  874. case -2: // Unbekannt
  875. serverStatus->setText( "Status: Unbekannt" );
  876. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFFFF8800 );
  877. break;
  878. case -1: // Unerreichbar
  879. serverStatus->setText( "Status: Unerreichbar" );
  880. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFFFF0000 );
  881. break;
  882. case 0: // Offline
  883. serverStatus->setText( "Status: Offline" );
  884. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFFFFFF00 );
  885. stoppen->setText( "Starten" );
  886. stoppen->addStyle( Knopf::Style::Erlaubt );
  887. beenden->addStyle( Knopf::Style::Erlaubt );
  888. terminieren->addStyle( Knopf::Style::Erlaubt );
  889. this->maxClients->addStyle( TextFeld::Style::Erlaubt );
  890. break;
  891. case 1: // Pausiert
  892. serverStatus->setText( "Status: Pausiert" );
  893. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFF88FF00 );
  894. pausieren->setText( "Fortsetzen" );
  895. pausieren->addStyle( Knopf::Style::Erlaubt );
  896. stoppen->setText( "Stoppen" );
  897. stoppen->addStyle( Knopf::Style::Erlaubt );
  898. beenden->addStyle( Knopf::Style::Erlaubt );
  899. terminieren->addStyle( Knopf::Style::Erlaubt );
  900. this->maxClients->addStyle( TextFeld::Style::Erlaubt );
  901. break;
  902. case 2: // Online
  903. serverStatus->setText( "Status: Online" );
  904. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFF00FF00 );
  905. pausieren->setText( "Pausieren" );
  906. pausieren->addStyle( Knopf::Style::Erlaubt );
  907. terminieren->addStyle( Knopf::Style::Erlaubt );
  908. this->maxClients->addStyle( TextFeld::Style::Erlaubt );
  909. break;
  910. case 3: // Veraltet
  911. serverStatus->setText( "Status: Veraltet" );
  912. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFFB0FF00 );
  913. pausieren->setText( "Pausieren" );
  914. pausieren->addStyle( Knopf::Style::Erlaubt );
  915. update->addStyle( Knopf::Style::Erlaubt );
  916. beenden->addStyle( Knopf::Style::Erlaubt );
  917. terminieren->addStyle( Knopf::Style::Erlaubt );
  918. this->maxClients->addStyle( TextFeld::Style::Erlaubt );
  919. break;
  920. }
  921. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  922. zurück->addStyle( Knopf::Style::Erlaubt );
  923. update->addStyle( Knopf::Style::Erlaubt );
  924. }
  925. else
  926. {
  927. serverId->setText( "ID: " );
  928. serverName->setText( "Name: " );
  929. serverIp->setText( "IP: " );
  930. serverPort->setText( "Port: " );
  931. serverAPort->setText( "APort: " );
  932. serverClients->setText( "Clients: " );
  933. this->maxClients->setText( "" );
  934. this->serverStatus->setText( "Status: " );
  935. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  936. zurück->addStyle( Knopf::Style::Erlaubt );
  937. serverFehler->setText( error );
  938. }
  939. }
  940. void PatchServer::sucheAbgeschlossen()
  941. {
  942. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  943. tabelle->addStyle( ObjTabelle::Style::Erlaubt );
  944. }
  945. void PatchServer::setUpdateProzent( int prozent, int gruppe )
  946. {
  947. for( int i = 0; i < updateT->getZeilenAnzahl(); i++ )
  948. {
  949. if( gruppe == TextZuInt( updateT->zZeilenName( i )->getText(), 10 ) )
  950. {
  951. if( updateT->zZeichnung( 3, i ) != obj )
  952. {
  953. updateT->lockZeichnung();
  954. FBalken *fb = new FBalken();
  955. fb->setStyle( FBalken::Style::Sichtbar | FBalken::Style::L_R | FBalken::Style::FFarbe | FBalken::Style::Hintergrund | FBalken::Style::Prozent | FBalken::Style::Rahmen | FBalken::Style::FRahmen );
  956. fb->setFBgFarbe( 0xFF00FF00 );
  957. fb->setHintergrundFarbe( 0xFFFFFFFF );
  958. fb->setSFarbe( 0xFF000000 );
  959. fb->setSchriftZ( schrift->getThis() );
  960. fb->setSSize( 12 );
  961. fb->setRahmenBreite( 1 );
  962. fb->setRahmenFarbe( 0xFF55FF55 );
  963. fb->setFRFarbe( 0xFF55FF55 );
  964. fb->reset();
  965. fb->setAktionAnzahl( 100 );
  966. updateT->setZeichnungZ( 1, i, fb );
  967. updateT->setZeichnungZ( 3, i, obj->getThis() );
  968. updateT->unlockZeichnung();
  969. }
  970. ( (FBalken*)updateT->zZeichnung( 1, i ) )->reset();
  971. ( (FBalken*)updateT->zZeichnung( 1, i ) )->aktionPlus( prozent );
  972. return;
  973. }
  974. }
  975. }
  976. void PatchServer::setUpdateFertig( bool error, int gruppe )
  977. {
  978. if( !gruppe )
  979. { // gesamter Vorgang abgeschlossen
  980. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  981. zurück->addStyle( Knopf::Style::Erlaubt );
  982. updateStarten->addStyle( Knopf::Style::Erlaubt );
  983. updateT->addStyle( ObjTabelle::Style::Erlaubt );
  984. MausEreignis me;
  985. me.id = ME_RLinks;
  986. b->lock();
  987. aktualisierenMausEreignis( 0, me );
  988. b->unlock();
  989. }
  990. else
  991. { // einzelner Schritt abgeschlossen
  992. for( int i = 0; i < updateT->getZeilenAnzahl(); i++ )
  993. {
  994. if( gruppe == TextZuInt( updateT->zZeilenName( i )->getText(), 10 ) )
  995. {
  996. updateT->lockZeichnung();
  997. TextFeld *uTS = new TextFeld();
  998. uTS->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Center );
  999. uTS->setSchriftZ( schrift->getThis() );
  1000. uTS->setSchriftSize( 12 );
  1001. uTS->setRahmenFarbe( 0xFFFFFFFF );
  1002. if( error )
  1003. {
  1004. uTS->setText( "Fehler" );
  1005. uTS->setSchriftFarbe( 0xFFFF0000 );
  1006. }
  1007. else
  1008. {
  1009. uTS->setText( "Aktuell" );
  1010. uTS->setSchriftFarbe( 0xFF00FF00 );
  1011. }
  1012. updateT->setZeichnungZ( 1, i, uTS );
  1013. updateT->setZeichnungZ( 3, i, 0 );
  1014. updateT->unlockZeichnung();
  1015. return;
  1016. }
  1017. }
  1018. }
  1019. }
  1020. bool PatchServer::aktualisierenMausEreignis( void *o, MausEreignis me )
  1021. {
  1022. if( me.id == ME_RLinks )
  1023. {
  1024. if( liste->hatStyle( Fenster::Style::Sichtbar ) )
  1025. {
  1026. if( !suchen->isRunning() )
  1027. {
  1028. for( int y = 1; y < tabelle->getZeilenAnzahl(); y++ )
  1029. tabelle->removeZeile( 1 );
  1030. weiter->removeStyle( Knopf::Style::Erlaubt );
  1031. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1032. tabelle->removeStyle( ObjTabelle::Style::Erlaubt );
  1033. suchen->start();
  1034. }
  1035. }
  1036. else if( details->hatStyle( Fenster::Style::Sichtbar ) )
  1037. {
  1038. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1039. zurück->removeStyle( Knopf::Style::Erlaubt );
  1040. update->removeStyle( Knopf::Style::Erlaubt );
  1041. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1042. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1043. beenden->removeStyle( Knopf::Style::Erlaubt );
  1044. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1045. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1046. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1047. getDetails->start();
  1048. }
  1049. else if( updateF->hatStyle( Fenster::Style::Sichtbar ) )
  1050. {
  1051. int id = -1;
  1052. for( int i = 1; i < tabelle->getZeilenAnzahl(); i++ )
  1053. {
  1054. if( ( (KontrollKnopf*)tabelle->zZeichnung( 6, i ) )->hatStyle( KontrollKnopf::Style::Selected ) )
  1055. {
  1056. id = TextZuInt( tabelle->zZeilenName( i )->getText(), 10 );
  1057. break;
  1058. }
  1059. }
  1060. Array< FileGroupInfo* > list;
  1061. if( psc->getFileGroupInfoList( &list ) )
  1062. {
  1063. for( int i = 1; i < updateT->getZeilenAnzahl(); )
  1064. updateT->removeZeile( i );
  1065. int anz = list.getEintragAnzahl();
  1066. for( int i = 0; i < anz; i++ )
  1067. {
  1068. FileGroupInfo *info = list.get( i );
  1069. updateT->addZeile( new Text( info->id ) );
  1070. TextFeld *uTN = new TextFeld();
  1071. uTN->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::VCenter );
  1072. uTN->setSchriftZ( schrift->getThis() );
  1073. uTN->setSchriftFarbe( 0xFFFFFFFF );
  1074. uTN->setSchriftSize( 12 );
  1075. uTN->setRahmenFarbe( 0xFFFFFFFF );
  1076. uTN->setText( info->name );
  1077. updateT->setZeichnungZ( 0, i + 1, uTN );
  1078. TextFeld *uTS = new TextFeld();
  1079. uTS->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Center );
  1080. uTS->setRahmenFarbe( 0xFFFFFFFF );
  1081. uTS->setSchriftZ( schrift->getThis() );
  1082. uTS->setSchriftSize( 12 );
  1083. if( info->status.istGleich( "Fehlt" ) )
  1084. uTS->setSchriftFarbe( 0xFFFF0000 );
  1085. if( info->status.istGleich( "Aktuell" ) )
  1086. uTS->setSchriftFarbe( 0xFF00FF00 );
  1087. if( info->status.istGleich( "Veraltet" ) )
  1088. uTS->setSchriftFarbe( 0xFFFFFF00 );
  1089. if( info->status.istGleich( "Update" ) )
  1090. uTS->setSchriftFarbe( 0xFFFFFFFF );
  1091. uTS->setText( info->status.getText() );
  1092. updateT->setZeichnungZ( 1, i + 1, uTS );
  1093. if( info->status.istGleich( "Veraltet" ) || info->status.istGleich( "Fehlt" ) )
  1094. {
  1095. KontrollKnopf *auswahl = new KontrollKnopf();
  1096. auswahl->setStyle( KontrollKnopf::Style::Sichtbar | KontrollKnopf::Style::Erlaubt | KontrollKnopf::Style::KlickBuffer | KontrollKnopf::Style::Rahmen );
  1097. auswahl->loadData( "data/bilder/icons.ltdb" );
  1098. auswahl->setMausEreignisParameter( this );
  1099. auswahl->setMausEreignis( patchServerAuswahlKnopfMausEreignis );
  1100. auswahl->setRahmenFarbe( 0xFFFFFFFF );
  1101. updateT->setZeichnungZ( 2, i + 1, auswahl );
  1102. }
  1103. delete info;
  1104. }
  1105. }
  1106. else
  1107. WMessageBox( 0, new Text( "Fehler" ), new Text( psc->getLetzterFehler() ), MB_ICONERROR );
  1108. }
  1109. }
  1110. return 1;
  1111. }
  1112. bool PatchServer::auswahlKnopfMausEreignis( void *o, MausEreignis me )
  1113. {
  1114. if( !o )
  1115. return 0;
  1116. if( me.id == ME_RLinks )
  1117. {
  1118. if( liste->hatStyle( Fenster::Style::Sichtbar ) )
  1119. {
  1120. for( int i = 1; i < tabelle->getZeilenAnzahl(); i++ )
  1121. ( (KontrollKnopf*)tabelle->zZeichnung( 6, i ) )->removeStyle( KontrollKnopf::Style::Selected );
  1122. weiter->addStyle( Knopf::Style::Erlaubt );
  1123. }
  1124. }
  1125. return 1;
  1126. }
  1127. bool PatchServer::weiterMausEreignis( void *o, MausEreignis me )
  1128. {
  1129. if( me.id == ME_RLinks )
  1130. {
  1131. liste->removeStyle( Fenster::Style::Sichtbar );
  1132. details->addStyle( Fenster::Style::Sichtbar );
  1133. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1134. zurück->removeStyle( Knopf::Style::Erlaubt );
  1135. update->removeStyle( Knopf::Style::Erlaubt );
  1136. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1137. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1138. beenden->removeStyle( Knopf::Style::Erlaubt );
  1139. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1140. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1141. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1142. int id = -1;
  1143. for( int i = 1; i < tabelle->getZeilenAnzahl(); i++ )
  1144. {
  1145. if( ( (KontrollKnopf*)tabelle->zZeichnung( 6, i ) )->hatStyle( KontrollKnopf::Style::Selected ) )
  1146. {
  1147. id = TextZuInt( tabelle->zZeilenName( i )->getText(), 10 );
  1148. break;
  1149. }
  1150. }
  1151. getDetails->setServerId( id );
  1152. getDetails->start();
  1153. }
  1154. return 1;
  1155. }
  1156. bool PatchServer::zurückMausEreignis( void *o, MausEreignis me )
  1157. {
  1158. if( me.id == ME_RLinks )
  1159. {
  1160. if( details->hatStyle( Fenster::Style::Sichtbar ) )
  1161. {
  1162. details->removeStyle( Fenster::Style::Sichtbar );
  1163. liste->addStyle( Fenster::Style::Sichtbar );
  1164. if( !suchen->isRunning() )
  1165. {
  1166. for( int y = 1; y < tabelle->getZeilenAnzahl(); y++ )
  1167. tabelle->removeZeile( 1 );
  1168. weiter->removeStyle( Knopf::Style::Erlaubt );
  1169. zurück->removeStyle( Knopf::Style::Erlaubt );
  1170. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1171. suchen->start();
  1172. }
  1173. if( psc )
  1174. {
  1175. psc->trenne();
  1176. psc = (PSKlient*)psc->release();
  1177. }
  1178. }
  1179. else if( updateF->hatStyle( Fenster::Style::Sichtbar ) )
  1180. {
  1181. updateF->removeStyle( Fenster::Style::Sichtbar );
  1182. details->addStyle( Fenster::Style::Sichtbar );
  1183. aktualisierenMausEreignis( 0, me );
  1184. }
  1185. }
  1186. return 1;
  1187. }
  1188. bool PatchServer::updateMausEreignis( void *o, MausEreignis me )
  1189. {
  1190. if( me.id == ME_RLinks )
  1191. {
  1192. zurück->addStyle( Knopf::Style::Erlaubt );
  1193. weiter->removeStyle( Knopf::Style::Erlaubt );
  1194. details->removeStyle( Fenster::Style::Sichtbar );
  1195. updateF->addStyle( Fenster::Style::Sichtbar );
  1196. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  1197. aktualisierenMausEreignis( 0, me );
  1198. }
  1199. return 1;
  1200. }
  1201. bool PatchServer::pausierenMausEreignis( void *o, MausEreignis me )
  1202. {
  1203. if( me.id == ME_RLinks )
  1204. {
  1205. if( pausieren->zText()->istGleich( "Pausieren" ) )
  1206. {
  1207. if( psc->pause() )
  1208. {
  1209. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1210. zurück->removeStyle( Knopf::Style::Erlaubt );
  1211. update->removeStyle( Knopf::Style::Erlaubt );
  1212. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1213. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1214. beenden->removeStyle( Knopf::Style::Erlaubt );
  1215. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1216. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1217. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1218. getDetails->start();
  1219. }
  1220. else
  1221. serverFehler->setText( psc->getLetzterFehler() );
  1222. }
  1223. else
  1224. {
  1225. if( psc->fortsetzen() )
  1226. {
  1227. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1228. zurück->removeStyle( Knopf::Style::Erlaubt );
  1229. update->removeStyle( Knopf::Style::Erlaubt );
  1230. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1231. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1232. beenden->removeStyle( Knopf::Style::Erlaubt );
  1233. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1234. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1235. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1236. getDetails->start();
  1237. }
  1238. else
  1239. serverFehler->setText( psc->getLetzterFehler() );
  1240. }
  1241. }
  1242. return 1;
  1243. }
  1244. bool PatchServer::stoppenMausEreignis( void *o, MausEreignis me )
  1245. {
  1246. if( me.id == ME_RLinks )
  1247. {
  1248. if( stoppen->zText()->istGleich( "Stoppen" ) )
  1249. {
  1250. if( psc->stop() )
  1251. {
  1252. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1253. zurück->removeStyle( Knopf::Style::Erlaubt );
  1254. update->removeStyle( Knopf::Style::Erlaubt );
  1255. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1256. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1257. beenden->removeStyle( Knopf::Style::Erlaubt );
  1258. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1259. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1260. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1261. getDetails->start();
  1262. }
  1263. else
  1264. serverFehler->setText( psc->getLetzterFehler() );
  1265. }
  1266. else
  1267. {
  1268. if( psc->start() )
  1269. {
  1270. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1271. zurück->removeStyle( Knopf::Style::Erlaubt );
  1272. update->removeStyle( Knopf::Style::Erlaubt );
  1273. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1274. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1275. beenden->removeStyle( Knopf::Style::Erlaubt );
  1276. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1277. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1278. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1279. getDetails->start();
  1280. }
  1281. else
  1282. serverFehler->setText( psc->getLetzterFehler() );
  1283. }
  1284. }
  1285. return 1;
  1286. }
  1287. bool PatchServer::beendenMausEreignis( void *o, MausEreignis me )
  1288. {
  1289. if( me.id == ME_RLinks )
  1290. {
  1291. if( psc->beenden() )
  1292. {
  1293. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1294. zurück->removeStyle( Knopf::Style::Erlaubt );
  1295. update->removeStyle( Knopf::Style::Erlaubt );
  1296. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1297. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1298. beenden->removeStyle( Knopf::Style::Erlaubt );
  1299. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1300. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1301. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1302. zurückMausEreignis( 0, me );
  1303. }
  1304. else
  1305. serverFehler->setText( psc->getLetzterFehler() );
  1306. }
  1307. return 1;
  1308. }
  1309. bool PatchServer::terminierenMausEreignis( void *o, MausEreignis me )
  1310. {
  1311. if( me.id == ME_RLinks )
  1312. {
  1313. if( psc->terminieren() )
  1314. {
  1315. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1316. zurück->removeStyle( Knopf::Style::Erlaubt );
  1317. update->removeStyle( Knopf::Style::Erlaubt );
  1318. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1319. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1320. beenden->removeStyle( Knopf::Style::Erlaubt );
  1321. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1322. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1323. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1324. zurückMausEreignis( 0, me );
  1325. }
  1326. else
  1327. serverFehler->setText( psc->getLetzterFehler() );
  1328. }
  1329. return 1;
  1330. }
  1331. bool PatchServer::setMaxClientsMausEreignis( void *o, MausEreignis me )
  1332. {
  1333. if( me.id == ME_RLinks )
  1334. {
  1335. if( psc->setMaxTasks( TextZuInt( maxClients->zText()->getText(), 10 ) ) )
  1336. {
  1337. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1338. zurück->removeStyle( Knopf::Style::Erlaubt );
  1339. update->removeStyle( Knopf::Style::Erlaubt );
  1340. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1341. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1342. beenden->removeStyle( Knopf::Style::Erlaubt );
  1343. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1344. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1345. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1346. getDetails->start();
  1347. }
  1348. else
  1349. serverFehler->setText( psc->getLetzterFehler() );
  1350. }
  1351. return 1;
  1352. }
  1353. bool PatchServer::updateStartenMausEreignis( void *o, MausEreignis me )
  1354. {
  1355. if( me.id == ME_RLinks )
  1356. {
  1357. int id = -1;
  1358. for( int i = 1; i < tabelle->getZeilenAnzahl(); i++ )
  1359. {
  1360. if( ( (KontrollKnopf*)tabelle->zZeichnung( 6, i ) )->hatStyle( KontrollKnopf::Style::Selected ) )
  1361. {
  1362. id = TextZuInt( tabelle->zZeilenName( i )->getText(), 10 );
  1363. break;
  1364. }
  1365. }
  1366. if( id > 0 )
  1367. {
  1368. int anzahl = 0;
  1369. Array< int > *gruppen = new Array< int >();
  1370. for( int i = 1; i < updateT->getZeilenAnzahl(); i++ )
  1371. {
  1372. if( updateT->zZeichnung( 2, i ) && ( (KontrollKnopf*)updateT->zZeichnung( 2, i ) )->hatStyle( KontrollKnopf::Style::Selected ) )
  1373. {
  1374. int gId = TextZuInt( updateT->zZeilenName( i )->getText(), 10 );
  1375. gruppen->set( gId, anzahl );
  1376. anzahl++;
  1377. }
  1378. }
  1379. if( anzahl )
  1380. {
  1381. updateStarten->removeStyle( Knopf::Style::Erlaubt );
  1382. zurück->removeStyle( Knopf::Style::Erlaubt );
  1383. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1384. updateT->removeStyle( ObjTabelle::Style::Erlaubt );
  1385. updateTh->setUpdateListe( anzahl, gruppen );
  1386. updateTh->start();
  1387. }
  1388. gruppen->release();
  1389. }
  1390. }
  1391. return 1;
  1392. }
  1393. bool PatchServer::maxClientsTastaturEreignis( void *o, TastaturEreignis te )
  1394. {
  1395. bool ret = 0;
  1396. if( te.taste >= '0' && te.taste <= '9' )
  1397. ret = 1;
  1398. if( te.taste == T_Entf || te.taste == T_BackSpace )
  1399. ret = 1;
  1400. if( te.taste == T_Links || te.taste == T_Rechts )
  1401. ret = 1;
  1402. if( ret )
  1403. setMaxClients->addStyle( Knopf::Style::Erlaubt );
  1404. return ret;
  1405. }
  1406. // constant
  1407. // Reference Counting
  1408. Abschnitt *PatchServer::getThis()
  1409. {
  1410. ref++;
  1411. return this;
  1412. }
  1413. Abschnitt *PatchServer::release()
  1414. {
  1415. ref--;
  1416. if( !ref )
  1417. delete this;
  1418. return 0;
  1419. }
  1420. // Ereignisse
  1421. bool patchServerAktualisierenMausEreignis( void *p, void *o, MausEreignis me )
  1422. {
  1423. if( !p )
  1424. return 0;
  1425. return ( (PatchServer*)p )->aktualisierenMausEreignis( o, me );
  1426. }
  1427. bool patchServerAuswahlKnopfMausEreignis( void *p, void *o, MausEreignis me )
  1428. {
  1429. if( !p )
  1430. return 0;
  1431. return ( (PatchServer*)p )->auswahlKnopfMausEreignis( o, me );
  1432. }
  1433. bool patchServerWeiterMausEreignis( void *p, void *o, MausEreignis me )
  1434. {
  1435. if( !p )
  1436. return 0;
  1437. return ( (PatchServer*)p )->weiterMausEreignis( o, me );
  1438. }
  1439. bool patchServerZurückMausEreignis( void *p, void *o, MausEreignis me )
  1440. {
  1441. if( !p )
  1442. return 0;
  1443. return ( (PatchServer*)p )->zurückMausEreignis( o, me );
  1444. }
  1445. bool patchServerUpdateMausEreignis( void *p, void *o, MausEreignis me )
  1446. {
  1447. if( !p )
  1448. return 0;
  1449. return ( (PatchServer*)p )->updateMausEreignis( o, me );
  1450. }
  1451. bool patchServerPausierenMausEreignis( void *p, void *o, MausEreignis me )
  1452. {
  1453. if( !p )
  1454. return 0;
  1455. return ( (PatchServer*)p )->pausierenMausEreignis( o, me );
  1456. }
  1457. bool patchServerStoppenMausEreignis( void *p, void *o, MausEreignis me )
  1458. {
  1459. if( !p )
  1460. return 0;
  1461. return ( (PatchServer*)p )->stoppenMausEreignis( o, me );
  1462. }
  1463. bool patchServerBeendenMausEreignis( void *p, void *o, MausEreignis me )
  1464. {
  1465. if( !p )
  1466. return 0;
  1467. return ( (PatchServer*)p )->beendenMausEreignis( o, me );
  1468. }
  1469. bool patchServerTerminierenMausEreignis( void *p, void *o, MausEreignis me )
  1470. {
  1471. if( !p )
  1472. return 0;
  1473. return ( (PatchServer*)p )->terminierenMausEreignis( o, me );
  1474. }
  1475. bool patchServerSetMaxClientsMausEreignis( void *p, void *o, MausEreignis me )
  1476. {
  1477. if( !p )
  1478. return 0;
  1479. return ( (PatchServer*)p )->setMaxClientsMausEreignis( o, me );
  1480. }
  1481. bool patchServerUpdateStartenMausEreignis( void *p, void *o, MausEreignis me )
  1482. {
  1483. if( !p )
  1484. return 0;
  1485. return ( (PatchServer*)p )->updateStartenMausEreignis( o, me );
  1486. }
  1487. bool patchServerMaxClientsTastaturEreignis( void *p, void *o, TastaturEreignis te )
  1488. {
  1489. if( !p )
  1490. return 0;
  1491. return ( (PatchServer*)p )->maxClientsTastaturEreignis( o, te );
  1492. }