PatchServer.cpp 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645
  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, ( char * )"", ( char * )"", 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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0, 0xFFFFFFFF ) );
  508. tabelle->setZeichnungZ( 1, 0, getTabellenEintrag( "Name", s ? s->getThis() : 0, 0xFFFFFFFF ) );
  509. tabelle->setZeichnungZ( 2, 0, getTabellenEintrag( "Ip", s ? s->getThis() : 0, 0xFFFFFFFF ) );
  510. tabelle->setZeichnungZ( 3, 0, getTabellenEintrag( "Port", s ? s->getThis() : 0, 0xFFFFFFFF ) );
  511. tabelle->setZeichnungZ( 4, 0, getTabellenEintrag( "APort", s ? s->getThis() : 0, 0xFFFFFFFF ) );
  512. tabelle->setZeichnungZ( 5, 0, getTabellenEintrag( "Status", s ? s->getThis() : 0, 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 ? rb->get( "neuladen.png" ) : 0 );
  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 ? rb->get( "weiter.png" ) : 0 );
  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 ? rb->get( "zurück.png" ) : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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 ? s->getThis() : 0 );
  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. if( rb )
  743. rb->release();
  744. ref = 1;
  745. }
  746. // Destruktor
  747. PatchServer::~PatchServer()
  748. {
  749. delete obj;
  750. if( psc )
  751. {
  752. psc->trenne();
  753. psc->release();
  754. }
  755. if( fenster )
  756. {
  757. fenster->removeMember( f );
  758. fenster->release();
  759. }
  760. account->release();
  761. msk->release();
  762. iD->release();
  763. f->release();
  764. liste->release();
  765. details->release();
  766. updateF->release();
  767. updateStarten->release();
  768. updateT->release();
  769. aktualisieren->release();
  770. weiter->release();
  771. zurück->release();
  772. update->release();
  773. pausieren->release();
  774. stoppen->release();
  775. beenden->release();
  776. terminieren->release();
  777. setMaxClients->release();
  778. serverId->release();
  779. serverName->release();
  780. serverIp->release();
  781. serverPort->release();
  782. serverAPort->release();
  783. serverClients->release();
  784. serverMaxClients->release();
  785. serverStatus->release();
  786. serverFehler->release();
  787. maxClients->release();
  788. suchen->release();
  789. getDetails->release();
  790. updateTh->release();
  791. tabelle->release();
  792. if( schrift )
  793. schrift->release();
  794. }
  795. // nicht constant
  796. void PatchServer::setFenster( Fenster * f )
  797. {
  798. if( fenster )
  799. fenster->release();
  800. this->f->setPosition( f->getBreite() / 2 - this->f->getBreite() / 2, f->getHeight() / 2 - this->f->getHeight() / 2 );
  801. fenster = f;
  802. }
  803. void PatchServer::setSichtbar( bool s )
  804. {
  805. sichtbar = s;
  806. if( s )
  807. {
  808. if( !suchen->isRunning() && liste->hatStyle( Fenster::Style::Sichtbar ) )
  809. {
  810. for( int y = 1; y < tabelle->getZeilenAnzahl(); y++ )
  811. tabelle->removeZeile( 1 );
  812. weiter->removeStyle( Knopf::Style::Erlaubt );
  813. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  814. tabelle->removeStyle( ObjTabelle::Style::Erlaubt );
  815. suchen->start();
  816. }
  817. if( fenster )
  818. fenster->addMember( f->getThis() );
  819. }
  820. else if( fenster )
  821. fenster->removeMember( f );
  822. }
  823. void PatchServer::addServer( int id, char *name, char *ip, int port, int adminPort, char *status )
  824. {
  825. Text *txt = new Text();
  826. txt->append( id );
  827. tabelle->addZeile( txt->getText() );
  828. int y = tabelle->getZeilenNummer( txt->getText() );
  829. tabelle->setZeilenHeight( y, 20 );
  830. tabelle->setZeichnungZ( 0, y, getTabellenEintrag( txt->getText(), schrift ? schrift->getThis() : 0, 0xFFFFFFFF ) );
  831. tabelle->setZeichnungZ( 1, y, getTabellenEintrag( name, schrift ? schrift->getThis() : 0, 0xFFFFFFFF ) );
  832. tabelle->setZeichnungZ( 2, y, getTabellenEintrag( ip, schrift ? schrift->getThis() : 0, 0xFFFFFFFF ) );
  833. txt->setText( "" );
  834. txt->append( port );
  835. tabelle->setZeichnungZ( 3, y, getTabellenEintrag( txt->getText(), schrift ? schrift->getThis() : 0, 0xFFFFFFFF ) );
  836. txt->setText( "" );
  837. txt->append( adminPort );
  838. tabelle->setZeichnungZ( 4, y, getTabellenEintrag( txt->getText(), schrift ? schrift->getThis() : 0, 0xFFFFFFFF ) );
  839. txt->release();
  840. tabelle->setZeichnungZ( 5, y, getTabellenEintrag( status, schrift ? schrift->getThis() : 0, getColorFromStatus( status ) ) );
  841. KontrollKnopf *knopf = new KontrollKnopf();
  842. knopf->setStyle( KontrollKnopf::Style::Sichtbar | KontrollKnopf::Style::Erlaubt | KontrollKnopf::Style::KlickBuffer );
  843. knopf->loadData( "data/bilder/icons.ltdb" );
  844. knopf->setMausEreignisParameter( this );
  845. knopf->setMausEreignis( patchServerAuswahlKnopfMausEreignis );
  846. tabelle->setZeichnungZ( 6, y, knopf );
  847. }
  848. void PatchServer::setServerDetails( int id, char *name, char *ip, int port, int adminPort, int clients, int maxClients, int status, Text * error )
  849. {
  850. if( !psc )
  851. {
  852. psc = new PSKlient( ip, adminPort );
  853. psc->verbinden();
  854. psc->login( account->zName()->getText(), account->zPasswort()->getText() );
  855. updateTh->setServer( ip, adminPort );
  856. }
  857. if( !error )
  858. {
  859. serverId->setText( "ID: " );
  860. serverId->zText()->append( id );
  861. serverName->setText( "Name: " );
  862. serverName->zText()->append( name );
  863. serverIp->setText( "IP: " );
  864. serverIp->zText()->append( ip );
  865. serverPort->setText( "Port: " );
  866. serverPort->zText()->append( port );
  867. serverAPort->setText( "Admin Port: " );
  868. serverAPort->zText()->append( adminPort );
  869. serverClients->setText( "Clients: " );
  870. serverClients->zText()->append( clients );
  871. this->maxClients->setText( "" );
  872. this->maxClients->zText()->append( maxClients );
  873. serverFehler->setText( "" );
  874. serverFehler->setSchriftFarbe( 0xFFFFFFFF );
  875. switch( status )
  876. {
  877. case -2: // Unbekannt
  878. serverStatus->setText( "Status: Unbekannt" );
  879. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFFFF8800 );
  880. break;
  881. case -1: // Unerreichbar
  882. serverStatus->setText( "Status: Unerreichbar" );
  883. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFFFF0000 );
  884. break;
  885. case 0: // Offline
  886. serverStatus->setText( "Status: Offline" );
  887. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFFFFFF00 );
  888. stoppen->setText( "Starten" );
  889. stoppen->addStyle( Knopf::Style::Erlaubt );
  890. beenden->addStyle( Knopf::Style::Erlaubt );
  891. terminieren->addStyle( Knopf::Style::Erlaubt );
  892. this->maxClients->addStyle( TextFeld::Style::Erlaubt );
  893. break;
  894. case 1: // Pausiert
  895. serverStatus->setText( "Status: Pausiert" );
  896. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFF88FF00 );
  897. pausieren->setText( "Fortsetzen" );
  898. pausieren->addStyle( Knopf::Style::Erlaubt );
  899. stoppen->setText( "Stoppen" );
  900. stoppen->addStyle( Knopf::Style::Erlaubt );
  901. beenden->addStyle( Knopf::Style::Erlaubt );
  902. terminieren->addStyle( Knopf::Style::Erlaubt );
  903. this->maxClients->addStyle( TextFeld::Style::Erlaubt );
  904. break;
  905. case 2: // Online
  906. serverStatus->setText( "Status: Online" );
  907. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFF00FF00 );
  908. pausieren->setText( "Pausieren" );
  909. pausieren->addStyle( Knopf::Style::Erlaubt );
  910. terminieren->addStyle( Knopf::Style::Erlaubt );
  911. this->maxClients->addStyle( TextFeld::Style::Erlaubt );
  912. break;
  913. case 3: // Veraltet
  914. serverStatus->setText( "Status: Veraltet" );
  915. serverStatus->setSchriftFarbe( 8, serverStatus->zText()->getLength(), 0xFFB0FF00 );
  916. pausieren->setText( "Pausieren" );
  917. pausieren->addStyle( Knopf::Style::Erlaubt );
  918. update->addStyle( Knopf::Style::Erlaubt );
  919. beenden->addStyle( Knopf::Style::Erlaubt );
  920. terminieren->addStyle( Knopf::Style::Erlaubt );
  921. this->maxClients->addStyle( TextFeld::Style::Erlaubt );
  922. break;
  923. }
  924. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  925. zurück->addStyle( Knopf::Style::Erlaubt );
  926. update->addStyle( Knopf::Style::Erlaubt );
  927. }
  928. else
  929. {
  930. serverId->setText( "ID: " );
  931. serverName->setText( "Name: " );
  932. serverIp->setText( "IP: " );
  933. serverPort->setText( "Port: " );
  934. serverAPort->setText( "APort: " );
  935. serverClients->setText( "Clients: " );
  936. this->maxClients->setText( "" );
  937. this->serverStatus->setText( "Status: " );
  938. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  939. zurück->addStyle( Knopf::Style::Erlaubt );
  940. serverFehler->setText( error );
  941. }
  942. }
  943. void PatchServer::sucheAbgeschlossen()
  944. {
  945. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  946. tabelle->addStyle( ObjTabelle::Style::Erlaubt );
  947. }
  948. void PatchServer::setUpdateProzent( int prozent, int gruppe )
  949. {
  950. for( int i = 0; i < updateT->getZeilenAnzahl(); i++ )
  951. {
  952. if( gruppe == TextZuInt( updateT->zZeilenName( i )->getText(), 10 ) )
  953. {
  954. if( updateT->zZeichnung( 3, i ) != obj )
  955. {
  956. updateT->lockZeichnung();
  957. FBalken *fb = new FBalken();
  958. fb->setStyle( FBalken::Style::Sichtbar | FBalken::Style::L_R | FBalken::Style::FFarbe | FBalken::Style::Hintergrund | FBalken::Style::Prozent | FBalken::Style::Rahmen | FBalken::Style::FRahmen );
  959. fb->setFBgFarbe( 0xFF00FF00 );
  960. fb->setHintergrundFarbe( 0xFFFFFFFF );
  961. fb->setSFarbe( 0xFF000000 );
  962. fb->setSchriftZ( schrift ? schrift->getThis() : 0 );
  963. fb->setSSize( 12 );
  964. fb->setRahmenBreite( 1 );
  965. fb->setRahmenFarbe( 0xFF55FF55 );
  966. fb->setFRFarbe( 0xFF55FF55 );
  967. fb->reset();
  968. fb->setAktionAnzahl( 100 );
  969. updateT->setZeichnungZ( 1, i, fb );
  970. updateT->setZeichnungZ( 3, i, obj->getThis() );
  971. updateT->unlockZeichnung();
  972. }
  973. ( (FBalken *)updateT->zZeichnung( 1, i ) )->reset();
  974. ( (FBalken *)updateT->zZeichnung( 1, i ) )->aktionPlus( prozent );
  975. return;
  976. }
  977. }
  978. }
  979. void PatchServer::setUpdateFertig( bool error, int gruppe )
  980. {
  981. if( !gruppe )
  982. { // gesamter Vorgang abgeschlossen
  983. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  984. zurück->addStyle( Knopf::Style::Erlaubt );
  985. updateStarten->addStyle( Knopf::Style::Erlaubt );
  986. updateT->addStyle( ObjTabelle::Style::Erlaubt );
  987. MausEreignis me;
  988. me.id = ME_RLinks;
  989. if( b )
  990. b->lock();
  991. aktualisierenMausEreignis( 0, me );
  992. if( b )
  993. b->unlock();
  994. }
  995. else
  996. { // einzelner Schritt abgeschlossen
  997. for( int i = 0; i < updateT->getZeilenAnzahl(); i++ )
  998. {
  999. if( gruppe == TextZuInt( updateT->zZeilenName( i )->getText(), 10 ) )
  1000. {
  1001. updateT->lockZeichnung();
  1002. TextFeld *uTS = new TextFeld();
  1003. uTS->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Center );
  1004. uTS->setSchriftZ( schrift ? schrift->getThis() : 0 );
  1005. uTS->setSchriftSize( 12 );
  1006. uTS->setRahmenFarbe( 0xFFFFFFFF );
  1007. if( error )
  1008. {
  1009. uTS->setText( "Fehler" );
  1010. uTS->setSchriftFarbe( 0xFFFF0000 );
  1011. }
  1012. else
  1013. {
  1014. uTS->setText( "Aktuell" );
  1015. uTS->setSchriftFarbe( 0xFF00FF00 );
  1016. }
  1017. updateT->setZeichnungZ( 1, i, uTS );
  1018. updateT->setZeichnungZ( 3, i, 0 );
  1019. updateT->unlockZeichnung();
  1020. return;
  1021. }
  1022. }
  1023. }
  1024. }
  1025. bool PatchServer::aktualisierenMausEreignis( void *o, MausEreignis me )
  1026. {
  1027. if( me.id == ME_RLinks )
  1028. {
  1029. if( liste->hatStyle( Fenster::Style::Sichtbar ) )
  1030. {
  1031. if( !suchen->isRunning() )
  1032. {
  1033. for( int y = 1; y < tabelle->getZeilenAnzahl(); y++ )
  1034. tabelle->removeZeile( 1 );
  1035. weiter->removeStyle( Knopf::Style::Erlaubt );
  1036. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1037. tabelle->removeStyle( ObjTabelle::Style::Erlaubt );
  1038. suchen->start();
  1039. }
  1040. }
  1041. else if( details->hatStyle( Fenster::Style::Sichtbar ) )
  1042. {
  1043. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1044. zurück->removeStyle( Knopf::Style::Erlaubt );
  1045. update->removeStyle( Knopf::Style::Erlaubt );
  1046. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1047. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1048. beenden->removeStyle( Knopf::Style::Erlaubt );
  1049. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1050. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1051. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1052. getDetails->start();
  1053. }
  1054. else if( updateF->hatStyle( Fenster::Style::Sichtbar ) )
  1055. {
  1056. int id = -1;
  1057. for( int i = 1; i < tabelle->getZeilenAnzahl(); i++ )
  1058. {
  1059. if( ( (KontrollKnopf *)tabelle->zZeichnung( 6, i ) )->hatStyle( KontrollKnopf::Style::Selected ) )
  1060. {
  1061. id = TextZuInt( tabelle->zZeilenName( i )->getText(), 10 );
  1062. break;
  1063. }
  1064. }
  1065. Array< FileGroupInfo * > list;
  1066. if( psc->getFileGroupInfoList( &list ) )
  1067. {
  1068. for( int i = 1; i < updateT->getZeilenAnzahl(); )
  1069. updateT->removeZeile( i );
  1070. int anz = list.getEintragAnzahl();
  1071. for( int i = 0; i < anz; i++ )
  1072. {
  1073. FileGroupInfo *info = list.get( i );
  1074. updateT->addZeile( new Text( info->id ) );
  1075. TextFeld *uTN = new TextFeld();
  1076. uTN->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::VCenter );
  1077. uTN->setSchriftZ( schrift ? schrift->getThis() : 0 );
  1078. uTN->setSchriftFarbe( 0xFFFFFFFF );
  1079. uTN->setSchriftSize( 12 );
  1080. uTN->setRahmenFarbe( 0xFFFFFFFF );
  1081. uTN->setText( info->name );
  1082. updateT->setZeichnungZ( 0, i + 1, uTN );
  1083. TextFeld * uTS = new TextFeld();
  1084. uTS->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Center );
  1085. uTS->setRahmenFarbe( 0xFFFFFFFF );
  1086. uTS->setSchriftZ( schrift ? schrift->getThis() : 0 );
  1087. uTS->setSchriftSize( 12 );
  1088. if( info->status.istGleich( "Fehlt" ) )
  1089. uTS->setSchriftFarbe( 0xFFFF0000 );
  1090. if( info->status.istGleich( "Aktuell" ) )
  1091. uTS->setSchriftFarbe( 0xFF00FF00 );
  1092. if( info->status.istGleich( "Veraltet" ) )
  1093. uTS->setSchriftFarbe( 0xFFFFFF00 );
  1094. if( info->status.istGleich( "Update" ) )
  1095. uTS->setSchriftFarbe( 0xFFFFFFFF );
  1096. uTS->setText( info->status.getText() );
  1097. updateT->setZeichnungZ( 1, i + 1, uTS );
  1098. if( info->status.istGleich( "Veraltet" ) || info->status.istGleich( "Fehlt" ) )
  1099. {
  1100. KontrollKnopf *auswahl = new KontrollKnopf();
  1101. auswahl->setStyle( KontrollKnopf::Style::Sichtbar | KontrollKnopf::Style::Erlaubt | KontrollKnopf::Style::KlickBuffer | KontrollKnopf::Style::Rahmen );
  1102. auswahl->loadData( "data/bilder/icons.ltdb" );
  1103. auswahl->setMausEreignisParameter( this );
  1104. auswahl->setMausEreignis( patchServerAuswahlKnopfMausEreignis );
  1105. auswahl->setRahmenFarbe( 0xFFFFFFFF );
  1106. updateT->setZeichnungZ( 2, i + 1, auswahl );
  1107. }
  1108. delete info;
  1109. }
  1110. }
  1111. else
  1112. WMessageBox( 0, new Text( "Fehler" ), new Text( psc->getLetzterFehler() ), MB_ICONERROR );
  1113. }
  1114. }
  1115. return 1;
  1116. }
  1117. bool PatchServer::auswahlKnopfMausEreignis( void *o, MausEreignis me )
  1118. {
  1119. if( !o )
  1120. return 0;
  1121. if( me.id == ME_RLinks )
  1122. {
  1123. if( liste->hatStyle( Fenster::Style::Sichtbar ) )
  1124. {
  1125. for( int i = 1; i < tabelle->getZeilenAnzahl(); i++ )
  1126. ( (KontrollKnopf *)tabelle->zZeichnung( 6, i ) )->removeStyle( KontrollKnopf::Style::Selected );
  1127. weiter->addStyle( Knopf::Style::Erlaubt );
  1128. }
  1129. }
  1130. return 1;
  1131. }
  1132. bool PatchServer::weiterMausEreignis( void *o, MausEreignis me )
  1133. {
  1134. if( me.id == ME_RLinks )
  1135. {
  1136. liste->removeStyle( Fenster::Style::Sichtbar );
  1137. details->addStyle( Fenster::Style::Sichtbar );
  1138. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1139. zurück->removeStyle( Knopf::Style::Erlaubt );
  1140. update->removeStyle( Knopf::Style::Erlaubt );
  1141. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1142. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1143. beenden->removeStyle( Knopf::Style::Erlaubt );
  1144. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1145. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1146. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1147. int id = -1;
  1148. for( int i = 1; i < tabelle->getZeilenAnzahl(); i++ )
  1149. {
  1150. if( ( (KontrollKnopf *)tabelle->zZeichnung( 6, i ) )->hatStyle( KontrollKnopf::Style::Selected ) )
  1151. {
  1152. id = TextZuInt( tabelle->zZeilenName( i )->getText(), 10 );
  1153. break;
  1154. }
  1155. }
  1156. getDetails->setServerId( id );
  1157. getDetails->start();
  1158. }
  1159. return 1;
  1160. }
  1161. bool PatchServer::zurückMausEreignis( void *o, MausEreignis me )
  1162. {
  1163. if( me.id == ME_RLinks )
  1164. {
  1165. if( details->hatStyle( Fenster::Style::Sichtbar ) )
  1166. {
  1167. details->removeStyle( Fenster::Style::Sichtbar );
  1168. liste->addStyle( Fenster::Style::Sichtbar );
  1169. if( !suchen->isRunning() )
  1170. {
  1171. for( int y = 1; y < tabelle->getZeilenAnzahl(); y++ )
  1172. tabelle->removeZeile( 1 );
  1173. weiter->removeStyle( Knopf::Style::Erlaubt );
  1174. zurück->removeStyle( Knopf::Style::Erlaubt );
  1175. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1176. suchen->start();
  1177. }
  1178. if( psc )
  1179. {
  1180. psc->trenne();
  1181. psc = (PSKlient *)psc->release();
  1182. }
  1183. }
  1184. else if( updateF->hatStyle( Fenster::Style::Sichtbar ) )
  1185. {
  1186. updateF->removeStyle( Fenster::Style::Sichtbar );
  1187. details->addStyle( Fenster::Style::Sichtbar );
  1188. aktualisierenMausEreignis( 0, me );
  1189. }
  1190. }
  1191. return 1;
  1192. }
  1193. bool PatchServer::updateMausEreignis( void *o, MausEreignis me )
  1194. {
  1195. if( me.id == ME_RLinks )
  1196. {
  1197. zurück->addStyle( Knopf::Style::Erlaubt );
  1198. weiter->removeStyle( Knopf::Style::Erlaubt );
  1199. details->removeStyle( Fenster::Style::Sichtbar );
  1200. updateF->addStyle( Fenster::Style::Sichtbar );
  1201. aktualisieren->addStyle( Knopf::Style::Erlaubt );
  1202. aktualisierenMausEreignis( 0, me );
  1203. }
  1204. return 1;
  1205. }
  1206. bool PatchServer::pausierenMausEreignis( void *o, MausEreignis me )
  1207. {
  1208. if( me.id == ME_RLinks )
  1209. {
  1210. if( pausieren->zText()->istGleich( "Pausieren" ) )
  1211. {
  1212. if( psc->pause() )
  1213. {
  1214. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1215. zurück->removeStyle( Knopf::Style::Erlaubt );
  1216. update->removeStyle( Knopf::Style::Erlaubt );
  1217. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1218. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1219. beenden->removeStyle( Knopf::Style::Erlaubt );
  1220. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1221. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1222. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1223. getDetails->start();
  1224. }
  1225. else
  1226. serverFehler->setText( psc->getLetzterFehler() );
  1227. }
  1228. else
  1229. {
  1230. if( psc->fortsetzen() )
  1231. {
  1232. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1233. zurück->removeStyle( Knopf::Style::Erlaubt );
  1234. update->removeStyle( Knopf::Style::Erlaubt );
  1235. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1236. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1237. beenden->removeStyle( Knopf::Style::Erlaubt );
  1238. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1239. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1240. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1241. getDetails->start();
  1242. }
  1243. else
  1244. serverFehler->setText( psc->getLetzterFehler() );
  1245. }
  1246. }
  1247. return 1;
  1248. }
  1249. bool PatchServer::stoppenMausEreignis( void *o, MausEreignis me )
  1250. {
  1251. if( me.id == ME_RLinks )
  1252. {
  1253. if( stoppen->zText()->istGleich( "Stoppen" ) )
  1254. {
  1255. if( psc->stop() )
  1256. {
  1257. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1258. zurück->removeStyle( Knopf::Style::Erlaubt );
  1259. update->removeStyle( Knopf::Style::Erlaubt );
  1260. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1261. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1262. beenden->removeStyle( Knopf::Style::Erlaubt );
  1263. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1264. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1265. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1266. getDetails->start();
  1267. }
  1268. else
  1269. serverFehler->setText( psc->getLetzterFehler() );
  1270. }
  1271. else
  1272. {
  1273. if( psc->start() )
  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. getDetails->start();
  1285. }
  1286. else
  1287. serverFehler->setText( psc->getLetzterFehler() );
  1288. }
  1289. }
  1290. return 1;
  1291. }
  1292. bool PatchServer::beendenMausEreignis( void *o, MausEreignis me )
  1293. {
  1294. if( me.id == ME_RLinks )
  1295. {
  1296. if( psc->beenden() )
  1297. {
  1298. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1299. zurück->removeStyle( Knopf::Style::Erlaubt );
  1300. update->removeStyle( Knopf::Style::Erlaubt );
  1301. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1302. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1303. beenden->removeStyle( Knopf::Style::Erlaubt );
  1304. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1305. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1306. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1307. zurückMausEreignis( 0, me );
  1308. }
  1309. else
  1310. serverFehler->setText( psc->getLetzterFehler() );
  1311. }
  1312. return 1;
  1313. }
  1314. bool PatchServer::terminierenMausEreignis( void *o, MausEreignis me )
  1315. {
  1316. if( me.id == ME_RLinks )
  1317. {
  1318. if( psc->terminieren() )
  1319. {
  1320. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1321. zurück->removeStyle( Knopf::Style::Erlaubt );
  1322. update->removeStyle( Knopf::Style::Erlaubt );
  1323. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1324. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1325. beenden->removeStyle( Knopf::Style::Erlaubt );
  1326. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1327. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1328. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1329. zurückMausEreignis( 0, me );
  1330. }
  1331. else
  1332. serverFehler->setText( psc->getLetzterFehler() );
  1333. }
  1334. return 1;
  1335. }
  1336. bool PatchServer::setMaxClientsMausEreignis( void *o, MausEreignis me )
  1337. {
  1338. if( me.id == ME_RLinks )
  1339. {
  1340. if( psc->setMaxTasks( TextZuInt( maxClients->zText()->getText(), 10 ) ) )
  1341. {
  1342. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1343. zurück->removeStyle( Knopf::Style::Erlaubt );
  1344. update->removeStyle( Knopf::Style::Erlaubt );
  1345. pausieren->removeStyle( Knopf::Style::Erlaubt );
  1346. stoppen->removeStyle( Knopf::Style::Erlaubt );
  1347. beenden->removeStyle( Knopf::Style::Erlaubt );
  1348. terminieren->removeStyle( Knopf::Style::Erlaubt );
  1349. setMaxClients->removeStyle( Knopf::Style::Erlaubt );
  1350. maxClients->removeStyle( TextFeld::Style::Erlaubt );
  1351. getDetails->start();
  1352. }
  1353. else
  1354. serverFehler->setText( psc->getLetzterFehler() );
  1355. }
  1356. return 1;
  1357. }
  1358. bool PatchServer::updateStartenMausEreignis( void *o, MausEreignis me )
  1359. {
  1360. if( me.id == ME_RLinks )
  1361. {
  1362. int id = -1;
  1363. for( int i = 1; i < tabelle->getZeilenAnzahl(); i++ )
  1364. {
  1365. if( ( (KontrollKnopf *)tabelle->zZeichnung( 6, i ) )->hatStyle( KontrollKnopf::Style::Selected ) )
  1366. {
  1367. id = TextZuInt( tabelle->zZeilenName( i )->getText(), 10 );
  1368. break;
  1369. }
  1370. }
  1371. if( id > 0 )
  1372. {
  1373. int anzahl = 0;
  1374. Array< int > *gruppen = new Array< int >();
  1375. for( int i = 1; i < updateT->getZeilenAnzahl(); i++ )
  1376. {
  1377. if( updateT->zZeichnung( 2, i ) && ( (KontrollKnopf *)updateT->zZeichnung( 2, i ) )->hatStyle( KontrollKnopf::Style::Selected ) )
  1378. {
  1379. int gId = TextZuInt( updateT->zZeilenName( i )->getText(), 10 );
  1380. gruppen->set( gId, anzahl );
  1381. anzahl++;
  1382. }
  1383. }
  1384. if( anzahl )
  1385. {
  1386. updateStarten->removeStyle( Knopf::Style::Erlaubt );
  1387. zurück->removeStyle( Knopf::Style::Erlaubt );
  1388. aktualisieren->removeStyle( Knopf::Style::Erlaubt );
  1389. updateT->removeStyle( ObjTabelle::Style::Erlaubt );
  1390. updateTh->setUpdateListe( anzahl, gruppen );
  1391. updateTh->start();
  1392. }
  1393. gruppen->release();
  1394. }
  1395. }
  1396. return 1;
  1397. }
  1398. bool PatchServer::maxClientsTastaturEreignis( void *o, TastaturEreignis te )
  1399. {
  1400. bool ret = 0;
  1401. if( te.taste >= '0' && te.taste <= '9' )
  1402. ret = 1;
  1403. if( te.taste == T_Entf || te.taste == T_BackSpace )
  1404. ret = 1;
  1405. if( te.taste == T_Links || te.taste == T_Rechts )
  1406. ret = 1;
  1407. if( ret )
  1408. setMaxClients->addStyle( Knopf::Style::Erlaubt );
  1409. return ret;
  1410. }
  1411. void PatchServer::updateAll()
  1412. {
  1413. std::cout << "Searching for Patch Servers ...\n";
  1414. while( suchen->isRunning() )
  1415. {
  1416. Sleep( 100 );
  1417. }
  1418. MausEreignis me;
  1419. me.id = ME_RLinks;
  1420. me.verarbeitet = 0;
  1421. for( int i = 1; i < tabelle->getZeilenAnzahl(); i++ )
  1422. {
  1423. if( ( (TextFeld *)tabelle->zZeichnung( 5, i ) )->zText()->istGleich( "Veraltet" ) )
  1424. {
  1425. std::cout << "Request details from server " << ( (TextFeld *)tabelle->zZeichnung( 0, i ) )->zText()->getText() << " ...\n";
  1426. Zeichnung *z = tabelle->zZeichnung( 6, i );
  1427. me.mx = z->getX();
  1428. me.my = z->getY();
  1429. me.verarbeitet = 0;
  1430. z->doMausEreignis( me );
  1431. me.verarbeitet = 0;
  1432. weiterMausEreignis( weiter, me );
  1433. while( getDetails->isRunning() )
  1434. {
  1435. Sleep( 100 );
  1436. }
  1437. updateMausEreignis( update, me );
  1438. for( int j = 1; j < updateT->getZeilenAnzahl(); j++ )
  1439. {
  1440. if( ( (TextFeld *)updateT->zZeichnung( 1, j ) )->zText()->istGleich( "Veraltet" ) )
  1441. {
  1442. std::cout << "Update group " << ( (TextFeld *)updateT->zZeichnung( 0, j ) )->zText()->getText() << " ... ";
  1443. Zeichnung *z = updateT->zZeichnung( 2, j );
  1444. me.mx = z->getX();
  1445. me.my = z->getY();
  1446. me.verarbeitet = 0;
  1447. z->doMausEreignis( me );
  1448. me.verarbeitet = 0;
  1449. updateStartenMausEreignis( updateStarten, me );
  1450. while( updateTh->isRunning() )
  1451. {
  1452. Sleep( 100 );
  1453. }
  1454. std::cout << ( (TextFeld *)updateT->zZeichnung( 0, j ) )->zText()->getText() << "\n";
  1455. j = 0;
  1456. }
  1457. }
  1458. zurückMausEreignis( zurück, me );
  1459. while( getDetails->isRunning() )
  1460. {
  1461. Sleep( 100 );
  1462. }
  1463. zurückMausEreignis( zurück, me );
  1464. while( suchen->isRunning() )
  1465. {
  1466. Sleep( 100 );
  1467. }
  1468. i = 0;
  1469. }
  1470. }
  1471. std::cout << "Everything is up to date!\n";
  1472. }
  1473. // constant
  1474. // Reference Counting
  1475. Abschnitt * PatchServer::getThis()
  1476. {
  1477. ref++;
  1478. return this;
  1479. }
  1480. Abschnitt *PatchServer::release()
  1481. {
  1482. ref--;
  1483. if( !ref )
  1484. delete this;
  1485. return 0;
  1486. }
  1487. // Ereignisse
  1488. bool patchServerAktualisierenMausEreignis( void *p, void *o, MausEreignis me )
  1489. {
  1490. if( !p )
  1491. return 0;
  1492. return ( (PatchServer *)p )->aktualisierenMausEreignis( o, me );
  1493. }
  1494. bool patchServerAuswahlKnopfMausEreignis( void *p, void *o, MausEreignis me )
  1495. {
  1496. if( !p )
  1497. return 0;
  1498. return ( (PatchServer *)p )->auswahlKnopfMausEreignis( o, me );
  1499. }
  1500. bool patchServerWeiterMausEreignis( void *p, void *o, MausEreignis me )
  1501. {
  1502. if( !p )
  1503. return 0;
  1504. return ( (PatchServer *)p )->weiterMausEreignis( o, me );
  1505. }
  1506. bool patchServerZurückMausEreignis( void *p, void *o, MausEreignis me )
  1507. {
  1508. if( !p )
  1509. return 0;
  1510. return ( (PatchServer *)p )->zurückMausEreignis( o, me );
  1511. }
  1512. bool patchServerUpdateMausEreignis( void *p, void *o, MausEreignis me )
  1513. {
  1514. if( !p )
  1515. return 0;
  1516. return ( (PatchServer *)p )->updateMausEreignis( o, me );
  1517. }
  1518. bool patchServerPausierenMausEreignis( void *p, void *o, MausEreignis me )
  1519. {
  1520. if( !p )
  1521. return 0;
  1522. return ( (PatchServer *)p )->pausierenMausEreignis( o, me );
  1523. }
  1524. bool patchServerStoppenMausEreignis( void *p, void *o, MausEreignis me )
  1525. {
  1526. if( !p )
  1527. return 0;
  1528. return ( (PatchServer *)p )->stoppenMausEreignis( o, me );
  1529. }
  1530. bool patchServerBeendenMausEreignis( void *p, void *o, MausEreignis me )
  1531. {
  1532. if( !p )
  1533. return 0;
  1534. return ( (PatchServer *)p )->beendenMausEreignis( o, me );
  1535. }
  1536. bool patchServerTerminierenMausEreignis( void *p, void *o, MausEreignis me )
  1537. {
  1538. if( !p )
  1539. return 0;
  1540. return ( (PatchServer *)p )->terminierenMausEreignis( o, me );
  1541. }
  1542. bool patchServerSetMaxClientsMausEreignis( void *p, void *o, MausEreignis me )
  1543. {
  1544. if( !p )
  1545. return 0;
  1546. return ( (PatchServer *)p )->setMaxClientsMausEreignis( o, me );
  1547. }
  1548. bool patchServerUpdateStartenMausEreignis( void *p, void *o, MausEreignis me )
  1549. {
  1550. if( !p )
  1551. return 0;
  1552. return ( (PatchServer *)p )->updateStartenMausEreignis( o, me );
  1553. }
  1554. bool patchServerMaxClientsTastaturEreignis( void *p, void *o, TastaturEreignis te )
  1555. {
  1556. if( !p )
  1557. return 0;
  1558. return ( (PatchServer *)p )->maxClientsTastaturEreignis( o, te );
  1559. }