PatchServer.cpp 56 KB

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