EditorClient.cpp 93 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202
  1. #include "EditorClient.h"
  2. #include <Klient.h>
  3. #include "Keys.h"
  4. #include <Datei.h>
  5. #include <Zeit.h>
  6. #include <Bild.h>
  7. #include <Fortschritt.h>
  8. #include <Model2D.h>
  9. #include <GSLDateiV.h>
  10. using namespace KSGClient;
  11. class DownloadSound : public GSL::GSLSoundV
  12. {
  13. private:
  14. bool istM;
  15. int sample;
  16. __int64 län;
  17. Network::Klient *k;
  18. FBalken *f;
  19. int ref;
  20. public:
  21. // Konstruktor
  22. DownloadSound( Network::Klient *zK, FBalken *zF )
  23. {
  24. k = zK;
  25. f = zF;
  26. ref = 1;
  27. }
  28. // nicht constant
  29. // GSL
  30. void playSound() override
  31. {}
  32. void setPause( bool p ) override
  33. {}
  34. void stopSound() override
  35. {}
  36. void warteAufSound( int zeit ) override
  37. {}
  38. // Lautstärke: 0 - 0xFFFF
  39. void setVolume( unsigned int links, unsigned int rechts ) override
  40. {}
  41. // zum Speichern
  42. void open() override
  43. {
  44. char m = 0;
  45. k->getNachrichtEncrypted( &m, 1 );
  46. istM = ( m == 1 );
  47. sample = 0;
  48. k->getNachrichtEncrypted( (char*)&sample, 4 );
  49. län = 0;
  50. k->getNachrichtEncrypted( (char*)&län, 8 );
  51. f->setAktionAnzahl( län );
  52. }
  53. int getDaten( char *buffer, int län ) override
  54. {
  55. int l = län < this->län ? län : (int)this->län;
  56. if( !l )
  57. return -1;
  58. k->getNachricht( buffer, l );
  59. this->län -= l;
  60. f->aktionPlus( l );
  61. return l;
  62. }
  63. void close() override
  64. {}
  65. bool istMono() const override
  66. {
  67. return istM;
  68. }
  69. int getSampleRate() const override
  70. {
  71. return sample;
  72. }
  73. __int64 getDatLength() const override
  74. {
  75. return län;
  76. }
  77. // Reference Counting
  78. GSL::GSLSoundV *getThis() override
  79. {
  80. ref++;
  81. return this;
  82. }
  83. GSL::GSLSoundV *release() override
  84. {
  85. ref--;
  86. if( !ref )
  87. delete this;
  88. return 0;
  89. }
  90. };
  91. // Inhalt der KSGClient Klasse
  92. // Konstruktor
  93. EditorClient::EditorClient( int kId, unsigned short port, char *ip, char *key, unsigned char keyLen )
  94. {
  95. ref = 1;
  96. this->ip = ip;
  97. this->port = port;
  98. cId = kId;
  99. k = 0;
  100. this->key = new char[ keyLen ];
  101. memcpy( this->key, key, keyLen );
  102. this->keyLen = keyLen;
  103. }
  104. // Destruktor
  105. EditorClient::~EditorClient()
  106. {
  107. trenne( 1 );
  108. delete[] key;
  109. }
  110. // verbindet sich mit dem zugewiesenen Editor Server
  111. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  112. bool EditorClient::verbinde()
  113. {
  114. cs.lock();
  115. if( k )
  116. {
  117. cs.unlock();
  118. return 1;
  119. }
  120. k = new Network::Klient();
  121. int l = 0;
  122. char *key;
  123. Keys::getServerKey( &key, l, Keys::LOGIN, Keys::SENDEN );
  124. k->setSendeKey( key, l );
  125. delete[] key;
  126. Keys::getServerKey( &key, l, Keys::LOGIN, Keys::EMPFANGEN );
  127. k->setEmpfangKey( key, l );
  128. delete[] key;
  129. if( k->verbinde( port, ip ) )
  130. {
  131. if( k->sendeEncrypted( "\1", 1 ) )
  132. {
  133. k->sendeEncrypted( (char*)&cId, 4 );
  134. char serverReturn = 0;
  135. k->getNachrichtEncrypted( &serverReturn, 1 );
  136. if( serverReturn == 3 )
  137. {
  138. char byte = 0;
  139. k->getNachrichtEncrypted( &byte, 1 );
  140. char *f = new char[ byte + 1 ];
  141. f[ byte ] = 0;
  142. k->getNachrichtEncrypted( f, byte );
  143. err = "error while identifying client Editor Server returned: ";
  144. err += f;
  145. delete[]f;
  146. trenne( 0 );
  147. cs.unlock();
  148. return 0;
  149. }
  150. k->setSendeKey( this->key, this->keyLen );
  151. k->setEmpfangKey( this->key, this->keyLen );
  152. }
  153. else
  154. {
  155. err = "network error while sending to Editor Server";
  156. k = k->release();
  157. cs.unlock();
  158. return 0;
  159. }
  160. }
  161. else
  162. {
  163. err = "network error while connecting to Editor Server";
  164. k = k->release();
  165. cs.unlock();
  166. return 0;
  167. }
  168. cs.unlock();
  169. return 1;
  170. }
  171. // Erstellt eine neue Karte
  172. // name: Der Name der Karte
  173. // spielArt: Die Id des Spiels
  174. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  175. bool EditorClient::karteErstellen( char *name, int spielArt )
  176. {
  177. cs.lock();
  178. if( !k )
  179. {
  180. err = "Der Client ist nicht verbunden.";
  181. cs.unlock();
  182. return 0;
  183. }
  184. k->sendeEncrypted( "\xA", 1 );
  185. char ret = 0;
  186. k->getNachrichtEncrypted( &ret, 1 );
  187. if( ret == 1 )
  188. {
  189. char l = (char)textLength( name );
  190. k->sendeEncrypted( &l, 1 );
  191. k->sendeEncrypted( name, l );
  192. k->sendeEncrypted( (char*)&spielArt, 4 );
  193. k->getNachrichtEncrypted( &ret, 1 );
  194. }
  195. if( ret == 3 )
  196. {
  197. char byte = 0;
  198. k->getNachrichtEncrypted( &byte, 1 );
  199. char *f = new char[ byte + 1 ];
  200. f[ byte ] = 0;
  201. k->getNachrichtEncrypted( f, byte );
  202. err = f;
  203. delete[] f;
  204. cs.unlock();
  205. return 0;
  206. }
  207. err = "Unbekannter Fehler";
  208. cs.unlock();
  209. return 0;
  210. }
  211. // lädt eine bestimmte Karte
  212. // id: Die Id der Karte
  213. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  214. bool EditorClient::ladeKarte( int id )
  215. {
  216. cs.lock();
  217. if( !k )
  218. {
  219. err = "Der Client ist nicht verbunden.";
  220. cs.unlock();
  221. return 0;
  222. }
  223. k->sendeEncrypted( "\x6", 1 );
  224. char ret = 0;
  225. k->getNachrichtEncrypted( &ret, 1 );
  226. if( ret == 1 )
  227. {
  228. k->sendeEncrypted( (char*)&id, 4 );
  229. k->getNachrichtEncrypted( &ret, 1 );
  230. }
  231. if( ret == 3 )
  232. {
  233. char byte = 0;
  234. k->getNachrichtEncrypted( &byte, 1 );
  235. char *f = new char[ byte + 1 ];
  236. f[ byte ] = 0;
  237. k->getNachrichtEncrypted( f, byte );
  238. err = f;
  239. delete[] f;
  240. cs.unlock();
  241. return 0;
  242. }
  243. cs.unlock();
  244. return 1;
  245. }
  246. // gibt eine Liste mit Abbildern der geladenen Karte zurück
  247. // name: Enthält nach erfolgreichem Aufruf eine Liste mit Namen der Abbilder
  248. // datum: Enthält nach erfolgreichem Aufruf eine Liste mit dem Datum der Erstellung für jedes Abbild
  249. // Gibt die Anzahl der Abbilder zurück
  250. int EditorClient::getAbbildListe( Framework::RCArray< Framework::Text > *name, Framework::RCArray< Framework::Zeit > *datum )
  251. {
  252. cs.lock();
  253. if( !k )
  254. {
  255. err = "Der Client ist nicht verbunden.";
  256. cs.unlock();
  257. return 0;
  258. }
  259. k->sendeEncrypted( "\x7", 1 );
  260. char ret = 0;
  261. k->getNachrichtEncrypted( &ret, 1 );
  262. if( ret == 1 )
  263. {
  264. k->sendeEncrypted( "\x5", 1 );
  265. k->getNachrichtEncrypted( &ret, 1 );
  266. if( ret == 1 )
  267. {
  268. int anz = 0;
  269. k->getNachrichtEncrypted( (char*)&anz, 4 );
  270. for( int i = 0; i < anz; i++ )
  271. {
  272. char l = 0;
  273. k->getNachrichtEncrypted( &l, 1 );
  274. char *n = new char[ l + 1 ];
  275. n[ l ] = 0;
  276. k->getNachrichtEncrypted( n, l );
  277. name->set( new Text( n ), i );
  278. delete[] n;
  279. Zeit *dat = new Zeit();
  280. int d = 0;
  281. k->getNachrichtEncrypted( (char*)&d, 4 );
  282. dat->setJahr( d );
  283. k->getNachrichtEncrypted( (char*)&d, 4 );
  284. dat->setMonat( d );
  285. k->getNachrichtEncrypted( (char*)&d, 4 );
  286. dat->setTag( d );
  287. k->getNachrichtEncrypted( (char*)&d, 4 );
  288. dat->setStunde( d );
  289. k->getNachrichtEncrypted( (char*)&d, 4 );
  290. dat->setMinute( d );
  291. k->getNachrichtEncrypted( (char*)&d, 4 );
  292. dat->setSekunde( d );
  293. datum->set( dat, i );
  294. }
  295. cs.unlock();
  296. return anz;
  297. }
  298. }
  299. if( ret == 3 )
  300. {
  301. char byte = 0;
  302. k->getNachrichtEncrypted( &byte, 1 );
  303. char *f = new char[ byte + 1 ];
  304. f[ byte ] = 0;
  305. k->getNachrichtEncrypted( f, byte );
  306. err = f;
  307. delete[] f;
  308. cs.unlock();
  309. return 0;
  310. }
  311. err = "Unbekannter Fehler";
  312. cs.unlock();
  313. return 0;
  314. }
  315. // Erstellt ein neues Abbild der geladenen Karte
  316. // name: Der Name des Abbildes
  317. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  318. bool EditorClient::abbildErstellen( char *name )
  319. {
  320. cs.lock();
  321. if( !k )
  322. {
  323. err = "Der Client ist nicht verbunden.";
  324. cs.unlock();
  325. return 0;
  326. }
  327. k->sendeEncrypted( "\x7", 1 );
  328. char ret = 0;
  329. k->getNachrichtEncrypted( &ret, 1 );
  330. if( ret == 1 )
  331. {
  332. k->sendeEncrypted( "\x1", 1 );
  333. k->getNachrichtEncrypted( &ret, 1 );
  334. if( ret == 1 )
  335. {
  336. char l = (char)textLength( name );
  337. k->sendeEncrypted( &l, 1 );
  338. if( l )
  339. k->sendeEncrypted( name, l );
  340. k->getNachrichtEncrypted( &ret, 1 );
  341. }
  342. }
  343. if( ret == 3 )
  344. {
  345. char byte = 0;
  346. k->getNachrichtEncrypted( &byte, 1 );
  347. char *f = new char[ byte + 1 ];
  348. f[ byte ] = 0;
  349. k->getNachrichtEncrypted( f, byte );
  350. err = f;
  351. delete[] f;
  352. cs.unlock();
  353. return 0;
  354. }
  355. cs.unlock();
  356. return 1;
  357. }
  358. // Löscht ein altes Abbild der geladenen Karte
  359. // name: Der Name des Abbildes
  360. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  361. bool EditorClient::abbildLöschen( char *name )
  362. {
  363. cs.lock();
  364. if( !k )
  365. {
  366. err = "Der Client ist nicht verbunden.";
  367. cs.unlock();
  368. return 0;
  369. }
  370. k->sendeEncrypted( "\x7", 1 );
  371. char ret = 0;
  372. k->getNachrichtEncrypted( &ret, 1 );
  373. if( ret == 1 )
  374. {
  375. k->sendeEncrypted( "\x2", 1 );
  376. k->getNachrichtEncrypted( &ret, 1 );
  377. if( ret == 1 )
  378. {
  379. char l = (char)textLength( name );
  380. k->sendeEncrypted( &l, 1 );
  381. if( l )
  382. k->sendeEncrypted( name, l );
  383. k->getNachrichtEncrypted( &ret, 1 );
  384. }
  385. }
  386. if( ret == 3 )
  387. {
  388. char byte = 0;
  389. k->getNachrichtEncrypted( &byte, 1 );
  390. char *f = new char[ byte + 1 ];
  391. f[ byte ] = 0;
  392. k->getNachrichtEncrypted( f, byte );
  393. err = f;
  394. delete[] f;
  395. cs.unlock();
  396. return 0;
  397. }
  398. cs.unlock();
  399. return 1;
  400. }
  401. // Stellt ein altes Abbild der geladenen Karte wieder her
  402. // name: Der Name des Abbildes
  403. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  404. bool EditorClient::abbildHerstellen( char *name )
  405. {
  406. cs.lock();
  407. if( !k )
  408. {
  409. err = "Der Client ist nicht verbunden.";
  410. cs.unlock();
  411. return 0;
  412. }
  413. k->sendeEncrypted( "\x7", 1 );
  414. char ret = 0;
  415. k->getNachrichtEncrypted( &ret, 1 );
  416. if( ret == 1 )
  417. {
  418. k->sendeEncrypted( "\x3", 1 );
  419. k->getNachrichtEncrypted( &ret, 1 );
  420. if( ret == 1 )
  421. {
  422. char l = (char)textLength( name );
  423. k->sendeEncrypted( &l, 1 );
  424. if( l )
  425. k->sendeEncrypted( name, l );
  426. k->getNachrichtEncrypted( &ret, 1 );
  427. }
  428. }
  429. if( ret == 3 )
  430. {
  431. char byte = 0;
  432. k->getNachrichtEncrypted( &byte, 1 );
  433. char *f = new char[ byte + 1 ];
  434. f[ byte ] = 0;
  435. k->getNachrichtEncrypted( f, byte );
  436. err = f;
  437. delete[] f;
  438. cs.unlock();
  439. return 0;
  440. }
  441. cs.unlock();
  442. return 1;
  443. }
  444. // Verüffentlich eine neue Version der geladenen Karte
  445. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  446. bool EditorClient::veröffentlichen()
  447. {
  448. cs.lock();
  449. if( !k )
  450. {
  451. err = "Der Client ist nicht verbunden.";
  452. cs.unlock();
  453. return 0;
  454. }
  455. k->sendeEncrypted( "\x7", 1 );
  456. char ret = 0;
  457. k->getNachrichtEncrypted( &ret, 1 );
  458. if( ret == 1 )
  459. {
  460. k->sendeEncrypted( "\x4", 1 );
  461. k->getNachrichtEncrypted( &ret, 1 );
  462. if( ret == 1 )
  463. k->getNachrichtEncrypted( &ret, 1 );
  464. }
  465. if( ret == 3 )
  466. {
  467. char byte = 0;
  468. k->getNachrichtEncrypted( &byte, 1 );
  469. char *f = new char[ byte + 1 ];
  470. f[ byte ] = 0;
  471. k->getNachrichtEncrypted( f, byte );
  472. err = f;
  473. delete[] f;
  474. cs.unlock();
  475. return 0;
  476. }
  477. if( ret != 1 )
  478. err = "Unbekannter Fehler";
  479. cs.unlock();
  480. return ret == 1;
  481. }
  482. // Veröffentlich eine neue Version der Shop Seite der geladenen Karte
  483. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  484. bool EditorClient::shopSeiteVeröffentlichen()
  485. {
  486. cs.lock();
  487. if( !k )
  488. {
  489. err = "Der Client ist nicht verbunden.";
  490. cs.unlock();
  491. return 0;
  492. }
  493. k->sendeEncrypted( "\x7", 1 );
  494. char ret = 0;
  495. k->getNachrichtEncrypted( &ret, 1 );
  496. if( ret == 1 )
  497. {
  498. k->sendeEncrypted( "\x6", 1 );
  499. k->getNachrichtEncrypted( &ret, 1 );
  500. if( ret == 1 )
  501. k->getNachrichtEncrypted( &ret, 1 );
  502. }
  503. if( ret == 3 )
  504. {
  505. char byte = 0;
  506. k->getNachrichtEncrypted( &byte, 1 );
  507. char *f = new char[ byte + 1 ];
  508. f[ byte ] = 0;
  509. k->getNachrichtEncrypted( f, byte );
  510. err = f;
  511. delete[] f;
  512. cs.unlock();
  513. return 0;
  514. }
  515. if( ret != 1 )
  516. err = "Unbekannter Fehler";
  517. cs.unlock();
  518. return ret == 1;
  519. }
  520. // Läht die Vorschau der Shop Seite der geladenen Karte herrunter und speichert sie unter data/tmp/ke/ssv
  521. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  522. bool EditorClient::ladeShopSeiteVorschau()
  523. {
  524. cs.lock();
  525. if( !k )
  526. {
  527. err = "Der Client ist nicht verbunden.";
  528. cs.unlock();
  529. return 0;
  530. }
  531. k->sendeEncrypted( "\x7", 1 );
  532. char ret = 0;
  533. k->getNachrichtEncrypted( &ret, 1 );
  534. if( ret == 1 )
  535. {
  536. k->sendeEncrypted( "\x8", 1 );
  537. k->getNachrichtEncrypted( &ret, 1 );
  538. if( ret == 1 )
  539. {
  540. int anz = 0;
  541. k->getNachrichtEncrypted( (char*)&anz, 4 );
  542. Text pf = "data/tmp/ke/ssv";
  543. for( int i = 0; i < anz; i++ )
  544. {
  545. char l = 0;
  546. k->getNachrichtEncrypted( &l, 1 );
  547. char *pfad = new char[ l + 1 ];
  548. pfad[ l ] = 0;
  549. k->getNachrichtEncrypted( pfad, l );
  550. Text p = pf.getText();
  551. p += pfad;
  552. delete[] pfad;
  553. Datei d;
  554. d.setDatei( p );
  555. d.erstellen();
  556. d.open( Datei::Style::schreiben );
  557. __int64 größe = 0;
  558. k->getNachrichtEncrypted( (char*)&größe, 8 );
  559. char *buffer = new char[ 2048 ];
  560. while( größe > 0 )
  561. {
  562. int l = größe > 2048 ? 2048 : (int)größe;
  563. k->getNachricht( buffer, l );
  564. d.schreibe( buffer, l );
  565. größe -= l;
  566. }
  567. delete[] buffer;
  568. d.close();
  569. }
  570. }
  571. }
  572. if( ret == 3 )
  573. {
  574. char byte = 0;
  575. k->getNachrichtEncrypted( &byte, 1 );
  576. char *f = new char[ byte + 1 ];
  577. f[ byte ] = 0;
  578. k->getNachrichtEncrypted( f, byte );
  579. err = f;
  580. delete[] f;
  581. cs.unlock();
  582. return 0;
  583. }
  584. if( ret != 1 )
  585. err = "Unbekannter Fehler";
  586. cs.unlock();
  587. return ret == 1;
  588. }
  589. // Erstellt eine neue Shop Seiten Datei
  590. // name: Der Name der Datei
  591. // typ: 0=Ordner, 1=Bild, 2=Text
  592. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  593. bool EditorClient::ssDateiErstellen( char *name, int typ )
  594. {
  595. cs.lock();
  596. if( !k )
  597. {
  598. err = "Der Client ist nicht verbunden.";
  599. cs.unlock();
  600. return 0;
  601. }
  602. k->sendeEncrypted( "\x7", 1 );
  603. char ret = 0;
  604. k->getNachrichtEncrypted( &ret, 1 );
  605. if( ret == 1 )
  606. {
  607. k->sendeEncrypted( "\x7", 1 );
  608. k->getNachrichtEncrypted( &ret, 1 );
  609. if( ret == 1 )
  610. {
  611. k->sendeEncrypted( "\x1", 1 );
  612. k->getNachrichtEncrypted( &ret, 1 );
  613. if( ret == 1 )
  614. {
  615. char t = typ;
  616. k->sendeEncrypted( &t, 1 );
  617. char l = (char)textLength( name );
  618. k->sendeEncrypted( &l, 1 );
  619. if( l )
  620. k->sendeEncrypted( name, l );
  621. k->getNachrichtEncrypted( &ret, 1 );
  622. }
  623. }
  624. }
  625. if( ret == 3 )
  626. {
  627. char byte = 0;
  628. k->getNachrichtEncrypted( &byte, 1 );
  629. char *f = new char[ byte + 1 ];
  630. f[ byte ] = 0;
  631. k->getNachrichtEncrypted( f, byte );
  632. err = f;
  633. delete[] f;
  634. cs.unlock();
  635. return 0;
  636. }
  637. if( ret != 1 )
  638. err = "Unbekannter Fehler";
  639. cs.unlock();
  640. return ret == 1;
  641. }
  642. // Öffnet einen Ordner der Shop Seite
  643. // name: Der Name des Ordners
  644. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  645. bool EditorClient::ssOrdnerÖffnen( char *name )
  646. {
  647. cs.lock();
  648. if( !k )
  649. {
  650. err = "Der Client ist nicht verbunden.";
  651. cs.unlock();
  652. return 0;
  653. }
  654. k->sendeEncrypted( "\x7", 1 );
  655. char ret = 0;
  656. k->getNachrichtEncrypted( &ret, 1 );
  657. if( ret == 1 )
  658. {
  659. k->sendeEncrypted( "\x7", 1 );
  660. k->getNachrichtEncrypted( &ret, 1 );
  661. if( ret == 1 )
  662. {
  663. k->sendeEncrypted( "\x2", 1 );
  664. k->getNachrichtEncrypted( &ret, 1 );
  665. if( ret == 1 )
  666. {
  667. char l = (char)textLength( name );
  668. k->sendeEncrypted( &l, 1 );
  669. if( l )
  670. k->sendeEncrypted( name, l );
  671. k->getNachrichtEncrypted( &ret, 1 );
  672. }
  673. }
  674. }
  675. if( ret == 3 )
  676. {
  677. char byte = 0;
  678. k->getNachrichtEncrypted( &byte, 1 );
  679. char *f = new char[ byte + 1 ];
  680. f[ byte ] = 0;
  681. k->getNachrichtEncrypted( f, byte );
  682. err = f;
  683. delete[] f;
  684. cs.unlock();
  685. return 0;
  686. }
  687. if( ret != 1 )
  688. err = "Unbekannter Fehler";
  689. cs.unlock();
  690. return ret == 1;
  691. }
  692. // Lädt das ein Bild der Shop Seite und gibt es zurück
  693. // datei: Der Name der Bilddatei
  694. // bild: Der Name des Bildes
  695. // Gibt bei misserfolg 0 zurück
  696. Framework::Bild *EditorClient::ssBildLaden( char *datei, char *bild )
  697. {
  698. cs.lock();
  699. if( !k )
  700. {
  701. err = "Der Client ist nicht verbunden.";
  702. cs.unlock();
  703. return 0;
  704. }
  705. k->sendeEncrypted( "\x7", 1 );
  706. char ret = 0;
  707. k->getNachrichtEncrypted( &ret, 1 );
  708. if( ret == 1 )
  709. {
  710. k->sendeEncrypted( "\x7", 1 );
  711. k->getNachrichtEncrypted( &ret, 1 );
  712. if( ret == 1 )
  713. {
  714. k->sendeEncrypted( "\x3", 1 );
  715. k->getNachrichtEncrypted( &ret, 1 );
  716. if( ret == 1 )
  717. {
  718. char l = (char)textLength( datei );
  719. k->sendeEncrypted( &l, 1 );
  720. if( l )
  721. k->sendeEncrypted( datei, l );
  722. l = (char)textLength( bild );
  723. k->sendeEncrypted( &l, 1 );
  724. if( l )
  725. k->sendeEncrypted( bild, l );
  726. k->getNachrichtEncrypted( &ret, 1 );
  727. if( ret == 1 )
  728. {
  729. Bild *ret = new Bild();
  730. int br = 0;
  731. int hö = 0;
  732. k->getNachrichtEncrypted( (char*)&br, 4 );
  733. k->getNachrichtEncrypted( (char*)&hö, 4 );
  734. ret->neuBild( br, hö, 0 );
  735. char *buffer = (char*)ret->getBuffer();
  736. __int64 län = br * hö * 4;
  737. for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
  738. {
  739. k->getNachricht( &( buffer[ i ] ), l );
  740. i += l;
  741. län -= l;
  742. }
  743. cs.unlock();
  744. return ret;
  745. }
  746. }
  747. }
  748. }
  749. if( ret == 3 )
  750. {
  751. char byte = 0;
  752. k->getNachrichtEncrypted( &byte, 1 );
  753. char *f = new char[ byte + 1 ];
  754. f[ byte ] = 0;
  755. k->getNachrichtEncrypted( f, byte );
  756. err = f;
  757. delete[] f;
  758. cs.unlock();
  759. return 0;
  760. }
  761. if( ret != 1 )
  762. err = "Unbekannter Fehler";
  763. cs.unlock();
  764. return 0;
  765. }
  766. // Löscht eine Datei der Shop Seite
  767. // name: Der Name der Datei
  768. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  769. bool EditorClient::ssDateiLöschen( char *name )
  770. {
  771. cs.lock();
  772. if( !k )
  773. {
  774. err = "Der Client ist nicht verbunden.";
  775. cs.unlock();
  776. return 0;
  777. }
  778. k->sendeEncrypted( "\x7", 1 );
  779. char ret = 0;
  780. k->getNachrichtEncrypted( &ret, 1 );
  781. if( ret == 1 )
  782. {
  783. k->sendeEncrypted( "\x7", 1 );
  784. k->getNachrichtEncrypted( &ret, 1 );
  785. if( ret == 1 )
  786. {
  787. k->sendeEncrypted( "\x4", 1 );
  788. k->getNachrichtEncrypted( &ret, 1 );
  789. if( ret == 1 )
  790. {
  791. char l = (char)textLength( name );
  792. k->sendeEncrypted( &l, 1 );
  793. if( l )
  794. k->sendeEncrypted( name, l );
  795. k->getNachrichtEncrypted( &ret, 1 );
  796. }
  797. }
  798. }
  799. if( ret == 3 )
  800. {
  801. char byte = 0;
  802. k->getNachrichtEncrypted( &byte, 1 );
  803. char *f = new char[ byte + 1 ];
  804. f[ byte ] = 0;
  805. k->getNachrichtEncrypted( f, byte );
  806. err = f;
  807. delete[] f;
  808. cs.unlock();
  809. return 0;
  810. }
  811. if( ret != 1 )
  812. err = "Unbekannter Fehler";
  813. cs.unlock();
  814. return ret == 1;
  815. }
  816. // Läd eine KSGS Datei der Shop Seite und gibt den Quellcode zurück
  817. // datei: Der Name der Datei
  818. // Gibt bei misserfolg 0 zurück
  819. Framework::Text *EditorClient::ssTextLaden( char *datei )
  820. {
  821. cs.lock();
  822. if( !k )
  823. {
  824. err = "Der Client ist nicht verbunden.";
  825. cs.unlock();
  826. return 0;
  827. }
  828. k->sendeEncrypted( "\x7", 1 );
  829. char ret = 0;
  830. k->getNachrichtEncrypted( &ret, 1 );
  831. if( ret == 1 )
  832. {
  833. k->sendeEncrypted( "\x7", 1 );
  834. k->getNachrichtEncrypted( &ret, 1 );
  835. if( ret == 1 )
  836. {
  837. k->sendeEncrypted( "\xA", 1 );
  838. k->getNachrichtEncrypted( &ret, 1 );
  839. if( ret == 1 )
  840. {
  841. char l = (char)textLength( datei );
  842. k->sendeEncrypted( &l, 1 );
  843. if( l )
  844. k->sendeEncrypted( datei, l );
  845. k->getNachrichtEncrypted( &ret, 1 );
  846. if( ret == 1 )
  847. {
  848. int län = 0;
  849. k->getNachrichtEncrypted( (char*)&län, 4 );
  850. char *txt = new char[ län + 1 ];
  851. txt[ län ] = 0;
  852. for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
  853. k->getNachricht( &( txt[ i ] ), l );
  854. k->getNachrichtEncrypted( &ret, 1 );
  855. if( ret == 1 )
  856. {
  857. Text *t = new Text( txt );
  858. delete[] txt;
  859. cs.unlock();
  860. return t;
  861. }
  862. delete[] txt;
  863. }
  864. }
  865. }
  866. }
  867. if( ret == 3 )
  868. {
  869. char byte = 0;
  870. k->getNachrichtEncrypted( &byte, 1 );
  871. char *f = new char[ byte + 1 ];
  872. f[ byte ] = 0;
  873. k->getNachrichtEncrypted( f, byte );
  874. err = f;
  875. delete[] f;
  876. cs.unlock();
  877. return 0;
  878. }
  879. err = "Unbekannter Fehler";
  880. cs.unlock();
  881. return 0;
  882. }
  883. // Spechert eine KSGS Datei der Shop Seite
  884. // datei: Der Name der Datei
  885. // zText: Ein Zeiger auf den neuen Quellcode (ohne erhöhten Reference Counter)
  886. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  887. bool EditorClient::ssTextSpeichern( char *datei, Framework::Text *zText )
  888. {
  889. cs.lock();
  890. if( !k )
  891. {
  892. err = "Der Client ist nicht verbunden.";
  893. cs.unlock();
  894. return 0;
  895. }
  896. k->sendeEncrypted( "\x7", 1 );
  897. char ret = 0;
  898. k->getNachrichtEncrypted( &ret, 1 );
  899. if( ret == 1 )
  900. {
  901. k->sendeEncrypted( "\x7", 1 );
  902. k->getNachrichtEncrypted( &ret, 1 );
  903. if( ret == 1 )
  904. {
  905. k->sendeEncrypted( "\x5", 1 );
  906. k->getNachrichtEncrypted( &ret, 1 );
  907. if( ret == 1 )
  908. {
  909. char l = (char)textLength( datei );
  910. k->sendeEncrypted( &l, 1 );
  911. if( l )
  912. k->sendeEncrypted( datei, l );
  913. k->getNachrichtEncrypted( &ret, 1 );
  914. if( ret == 1 )
  915. {
  916. int län = zText->getLength();
  917. k->sendeEncrypted( (char*)&län, 4 );
  918. for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
  919. k->sende( &( zText->getText()[ i ] ), l );
  920. k->getNachrichtEncrypted( &ret, 1 );
  921. }
  922. }
  923. }
  924. }
  925. if( ret == 3 )
  926. {
  927. char byte = 0;
  928. k->getNachrichtEncrypted( &byte, 1 );
  929. char *f = new char[ byte + 1 ];
  930. f[ byte ] = 0;
  931. k->getNachrichtEncrypted( f, byte );
  932. err = f;
  933. delete[] f;
  934. cs.unlock();
  935. return 0;
  936. }
  937. if( ret != 1 )
  938. err = "Unbekannter Fehler";
  939. cs.unlock();
  940. return ret == 1;
  941. }
  942. // Löscht ein Bild der Shop Seite
  943. // datei: Der Name der Bilddatei
  944. // bild: Der Name des Bildes
  945. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  946. bool EditorClient::ssBildLöschen( char *datei, char *bild )
  947. {
  948. cs.lock();
  949. if( !k )
  950. {
  951. err = "Der Client ist nicht verbunden.";
  952. cs.unlock();
  953. return 0;
  954. }
  955. k->sendeEncrypted( "\x7", 1 );
  956. char ret = 0;
  957. k->getNachrichtEncrypted( &ret, 1 );
  958. if( ret == 1 )
  959. {
  960. k->sendeEncrypted( "\x7", 1 );
  961. k->getNachrichtEncrypted( &ret, 1 );
  962. if( ret == 1 )
  963. {
  964. k->sendeEncrypted( "\x6", 1 );
  965. k->getNachrichtEncrypted( &ret, 1 );
  966. if( ret == 1 )
  967. {
  968. char l = (char)textLength( datei );
  969. k->sendeEncrypted( &l, 1 );
  970. if( l )
  971. k->sendeEncrypted( datei, l );
  972. l = (char)textLength( bild );
  973. k->sendeEncrypted( &l, 1 );
  974. if( l )
  975. k->sendeEncrypted( bild, l );
  976. k->getNachrichtEncrypted( &ret, 1 );
  977. }
  978. }
  979. }
  980. if( ret == 3 )
  981. {
  982. char byte = 0;
  983. k->getNachrichtEncrypted( &byte, 1 );
  984. char *f = new char[ byte + 1 ];
  985. f[ byte ] = 0;
  986. k->getNachrichtEncrypted( f, byte );
  987. err = f;
  988. delete[] f;
  989. cs.unlock();
  990. return 0;
  991. }
  992. if( ret != 1 )
  993. err = "Unbekannter Fehler";
  994. cs.unlock();
  995. return ret == 1;
  996. }
  997. // Speichert ein Bild einer ShopSeite
  998. // datei: Der name der Bilddatei
  999. // name: Der Name des Bildes
  1000. // zBild: Ein Zeiger auf das Bild (ohne erhöhten Reference Counter)
  1001. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1002. bool EditorClient::ssBildSpeichern( char *datei, char *name, Framework::Bild *zBild )
  1003. {
  1004. cs.lock();
  1005. if( !k )
  1006. {
  1007. err = "Der Client ist nicht verbunden.";
  1008. cs.unlock();
  1009. return 0;
  1010. }
  1011. k->sendeEncrypted( "\x7", 1 );
  1012. char ret = 0;
  1013. k->getNachrichtEncrypted( &ret, 1 );
  1014. if( ret == 1 )
  1015. {
  1016. k->sendeEncrypted( "\x7", 1 );
  1017. k->getNachrichtEncrypted( &ret, 1 );
  1018. if( ret == 1 )
  1019. {
  1020. k->sendeEncrypted( "\x7", 1 );
  1021. k->getNachrichtEncrypted( &ret, 1 );
  1022. if( ret == 1 )
  1023. {
  1024. char l = (char)textLength( datei );
  1025. k->sendeEncrypted( &l, 1 );
  1026. if( l )
  1027. k->sendeEncrypted( datei, l );
  1028. l = (char)textLength( name );
  1029. k->sendeEncrypted( &l, 1 );
  1030. if( l )
  1031. k->sendeEncrypted( name, l );
  1032. k->getNachrichtEncrypted( &ret, 1 );
  1033. if( ret == 1 )
  1034. {
  1035. int br = zBild->getBreite();
  1036. int hö = zBild->getHeight();
  1037. k->sendeEncrypted( (char*)&br, 4 );
  1038. k->sendeEncrypted( (char*)&hö, 4 );
  1039. __int64 län = br * hö * 4;
  1040. char *buffer = (char*)zBild->getBuffer();
  1041. for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
  1042. k->sende( &( buffer[ i ] ), l );
  1043. k->getNachrichtEncrypted( &ret, 1 );
  1044. }
  1045. }
  1046. }
  1047. }
  1048. if( ret == 3 )
  1049. {
  1050. char byte = 0;
  1051. k->getNachrichtEncrypted( &byte, 1 );
  1052. char *f = new char[ byte + 1 ];
  1053. f[ byte ] = 0;
  1054. k->getNachrichtEncrypted( f, byte );
  1055. err = f;
  1056. delete[] f;
  1057. cs.unlock();
  1058. return 0;
  1059. }
  1060. if( ret != 1 )
  1061. err = "Unbekannter Fehler";
  1062. cs.unlock();
  1063. return ret == 1;
  1064. }
  1065. // Lädt eine Liste mit Dateien von der Shop Seite
  1066. // zList: Enthält nach erfolgreichem Aufruf die Liste mit Dateinamen
  1067. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1068. int EditorClient::ssGetDateiListe( Framework::RCArray< Framework::Text > *zList )
  1069. {
  1070. cs.lock();
  1071. if( !k )
  1072. {
  1073. err = "Der Client ist nicht verbunden.";
  1074. cs.unlock();
  1075. return 0;
  1076. }
  1077. k->sendeEncrypted( "\x7", 1 );
  1078. char ret = 0;
  1079. k->getNachrichtEncrypted( &ret, 1 );
  1080. if( ret == 1 )
  1081. {
  1082. k->sendeEncrypted( "\x7", 1 );
  1083. k->getNachrichtEncrypted( &ret, 1 );
  1084. if( ret == 1 )
  1085. {
  1086. k->sendeEncrypted( "\x8", 1 );
  1087. k->getNachrichtEncrypted( &ret, 1 );
  1088. if( ret == 1 )
  1089. {
  1090. int anz = 0;
  1091. k->getNachrichtEncrypted( (char*)&anz, 4 );
  1092. for( int i = 0; i < anz; i++ )
  1093. {
  1094. char l = 0;
  1095. k->getNachrichtEncrypted( &l, 1 );
  1096. char *n = new char[ l + 1 ];
  1097. n[ l ] = 0;
  1098. k->getNachrichtEncrypted( n, l );
  1099. zList->add( new Text( n ) );
  1100. delete[] n;
  1101. }
  1102. cs.unlock();
  1103. return anz;
  1104. }
  1105. }
  1106. }
  1107. if( ret == 3 )
  1108. {
  1109. char byte = 0;
  1110. k->getNachrichtEncrypted( &byte, 1 );
  1111. char *f = new char[ byte + 1 ];
  1112. f[ byte ] = 0;
  1113. k->getNachrichtEncrypted( f, byte );
  1114. err = f;
  1115. delete[] f;
  1116. cs.unlock();
  1117. return -1;
  1118. }
  1119. err = "Unbekannter Fehler";
  1120. cs.unlock();
  1121. return 0;
  1122. }
  1123. // Lädt die Bild Liste einer Bild Datei der Shop Seite
  1124. // name: Der Name der Bilddatei
  1125. // zList: Enthält nach erfolgreichem Aufruf eine Liste mit Bildnamen
  1126. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1127. int EditorClient::ssGetBildListe( char *name, Framework::RCArray< Framework::Text > *zList )
  1128. {
  1129. cs.lock();
  1130. if( !k )
  1131. {
  1132. err = "Der Client ist nicht verbunden.";
  1133. cs.unlock();
  1134. return 0;
  1135. }
  1136. k->sendeEncrypted( "\x7", 1 );
  1137. char ret = 0;
  1138. k->getNachrichtEncrypted( &ret, 1 );
  1139. if( ret == 1 )
  1140. {
  1141. k->sendeEncrypted( "\x7", 1 );
  1142. k->getNachrichtEncrypted( &ret, 1 );
  1143. if( ret == 1 )
  1144. {
  1145. k->sendeEncrypted( "\x9", 1 );
  1146. k->getNachrichtEncrypted( &ret, 1 );
  1147. if( ret == 1 )
  1148. {
  1149. char l = (char)textLength( name );
  1150. k->sendeEncrypted( &l, 1 );
  1151. if( l )
  1152. k->sendeEncrypted( name, l );
  1153. k->getNachrichtEncrypted( &ret, 1 );
  1154. if( ret == 1 )
  1155. {
  1156. int anz = 0;
  1157. k->getNachrichtEncrypted( (char*)&anz, 4 );
  1158. for( int i = 0; i < anz; i++ )
  1159. {
  1160. l = 0;
  1161. k->getNachrichtEncrypted( &l, 1 );
  1162. char *n = new char[ l + 1 ];
  1163. n[ l ] = 0;
  1164. k->getNachrichtEncrypted( n, l );
  1165. zList->add( new Text( n ) );
  1166. delete[] n;
  1167. }
  1168. cs.unlock();
  1169. return anz;
  1170. }
  1171. }
  1172. }
  1173. }
  1174. if( ret == 3 )
  1175. {
  1176. char byte = 0;
  1177. k->getNachrichtEncrypted( &byte, 1 );
  1178. char *f = new char[ byte + 1 ];
  1179. f[ byte ] = 0;
  1180. k->getNachrichtEncrypted( f, byte );
  1181. err = f;
  1182. delete[] f;
  1183. cs.unlock();
  1184. return -1;
  1185. }
  1186. err = "Unbekannter Fehler";
  1187. cs.unlock();
  1188. return 0;
  1189. }
  1190. // Lädt die Shop Daten
  1191. // es: Enthält nach erfolgreichem aufruf den Erwerbbarkeits Status (0 = nichts, 1 = nur Testversion, 2 = nur Vollversion, 3 = beides)
  1192. // tp: Enthält nach erfolgreichem Aufruf den Preis der Testversion in Kupfer
  1193. // vp: Enthält nach erfolgreichem Aufruf den Preis der Vollversion in Kupfer
  1194. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1195. bool EditorClient::getShopDaten( int &es, int &tp, int &vp )
  1196. {
  1197. cs.lock();
  1198. if( !k )
  1199. {
  1200. err = "Der Client ist nicht verbunden.";
  1201. cs.unlock();
  1202. return 0;
  1203. }
  1204. k->sendeEncrypted( "\x7", 1 );
  1205. char ret = 0;
  1206. k->getNachrichtEncrypted( &ret, 1 );
  1207. if( ret == 1 )
  1208. {
  1209. k->sendeEncrypted( "\x9", 1 );
  1210. k->getNachrichtEncrypted( &ret, 1 );
  1211. if( ret == 1 )
  1212. {
  1213. k->getNachrichtEncrypted( (char*)&es, 4 );
  1214. k->getNachrichtEncrypted( (char*)&tp, 4 );
  1215. k->getNachrichtEncrypted( (char*)&vp, 4 );
  1216. cs.unlock();
  1217. return 1;
  1218. }
  1219. }
  1220. if( ret == 3 )
  1221. {
  1222. char byte = 0;
  1223. k->getNachrichtEncrypted( &byte, 1 );
  1224. char *f = new char[ byte + 1 ];
  1225. f[ byte ] = 0;
  1226. k->getNachrichtEncrypted( f, byte );
  1227. err = f;
  1228. delete[] f;
  1229. cs.unlock();
  1230. return 0;
  1231. }
  1232. err = "Unbekannter Fehler";
  1233. cs.unlock();
  1234. return 0;
  1235. }
  1236. // Setzt die Shop Daten
  1237. // es: der Erwerbbarkeits Status (0 = nichts, 1 = nur Testversion, 2 = nur Vollversion, 3 = beides)
  1238. // tp: der Preis der Testversion in Kupfer
  1239. // vp: der Preis der Vollversion in Kupfer
  1240. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1241. bool EditorClient::setShopDaten( int es, int tp, int vp )
  1242. {
  1243. cs.lock();
  1244. if( !k )
  1245. {
  1246. err = "Der Client ist nicht verbunden.";
  1247. cs.unlock();
  1248. return 0;
  1249. }
  1250. k->sendeEncrypted( "\x7", 1 );
  1251. char ret = 0;
  1252. k->getNachrichtEncrypted( &ret, 1 );
  1253. if( ret == 1 )
  1254. {
  1255. k->sendeEncrypted( "\xA", 1 );
  1256. k->getNachrichtEncrypted( &ret, 1 );
  1257. if( ret == 1 )
  1258. {
  1259. k->sendeEncrypted( (char*)&es, 4 );
  1260. k->sendeEncrypted( (char*)&tp, 4 );
  1261. k->sendeEncrypted( (char*)&vp, 4 );
  1262. k->getNachrichtEncrypted( &ret, 1 );
  1263. if( ret == 1 )
  1264. {
  1265. cs.unlock();
  1266. return 1;
  1267. }
  1268. }
  1269. }
  1270. if( ret == 3 )
  1271. {
  1272. char byte = 0;
  1273. k->getNachrichtEncrypted( &byte, 1 );
  1274. char *f = new char[ byte + 1 ];
  1275. f[ byte ] = 0;
  1276. k->getNachrichtEncrypted( f, byte );
  1277. err = f;
  1278. delete[] f;
  1279. cs.unlock();
  1280. return 0;
  1281. }
  1282. err = "Unbekannter Fehler";
  1283. cs.unlock();
  1284. return 0;
  1285. }
  1286. // gibt die Kartenbeschreibung als KSGScript Quellcode zurück
  1287. // Gibt bei misserfolg 0 zurück
  1288. Framework::Text *EditorClient::beschreibungLaden()
  1289. {
  1290. cs.lock();
  1291. if( !k )
  1292. {
  1293. err = "Der Client ist nicht verbunden.";
  1294. cs.unlock();
  1295. return 0;
  1296. }
  1297. k->sendeEncrypted( "\x7", 1 );
  1298. char ret = 0;
  1299. k->getNachrichtEncrypted( &ret, 1 );
  1300. if( ret == 1 )
  1301. {
  1302. k->sendeEncrypted( "\xB", 1 );
  1303. k->getNachrichtEncrypted( &ret, 1 );
  1304. if( ret == 1 )
  1305. {
  1306. k->sendeEncrypted( "\x1", 1 );
  1307. k->getNachrichtEncrypted( &ret, 1 );
  1308. if( ret == 1 )
  1309. {
  1310. int län = 0;
  1311. k->getNachrichtEncrypted( (char*)&län, 4 );
  1312. char *txt = new char[ län + 1 ];
  1313. txt[ län ] = 0;
  1314. for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
  1315. k->getNachricht( &( txt[ i ] ), l );
  1316. k->getNachrichtEncrypted( &ret, 1 );
  1317. if( ret == 1 )
  1318. {
  1319. Text *t = new Text( txt );
  1320. delete[] txt;
  1321. cs.unlock();
  1322. return t;
  1323. }
  1324. delete[] txt;
  1325. }
  1326. }
  1327. }
  1328. if( ret == 3 )
  1329. {
  1330. char byte = 0;
  1331. k->getNachrichtEncrypted( &byte, 1 );
  1332. char *f = new char[ byte + 1 ];
  1333. f[ byte ] = 0;
  1334. k->getNachrichtEncrypted( f, byte );
  1335. err = f;
  1336. delete[] f;
  1337. cs.unlock();
  1338. return 0;
  1339. }
  1340. err = "Unbekannter Fehler";
  1341. cs.unlock();
  1342. return 0;
  1343. }
  1344. // gibt das Titelbild der Karte zurück
  1345. // Gibt bei misserfolg 0 zurück
  1346. Framework::Bild *EditorClient::titelbildLaden()
  1347. {
  1348. cs.lock();
  1349. if( !k )
  1350. {
  1351. err = "Der Client ist nicht verbunden.";
  1352. cs.unlock();
  1353. return 0;
  1354. }
  1355. k->sendeEncrypted( "\x7", 1 );
  1356. char ret = 0;
  1357. k->getNachrichtEncrypted( &ret, 1 );
  1358. if( ret == 1 )
  1359. {
  1360. k->sendeEncrypted( "\xB", 1 );
  1361. k->getNachrichtEncrypted( &ret, 1 );
  1362. if( ret == 1 )
  1363. {
  1364. k->sendeEncrypted( "\x2", 1 );
  1365. k->getNachrichtEncrypted( &ret, 1 );
  1366. if( ret == 1 )
  1367. {
  1368. Bild *ret = new Bild();
  1369. int br = 0;
  1370. int hö = 0;
  1371. k->getNachrichtEncrypted( (char*)&br, 4 );
  1372. k->getNachrichtEncrypted( (char*)&hö, 4 );
  1373. ret->neuBild( br, hö, 0 );
  1374. char *buffer = (char*)ret->getBuffer();
  1375. __int64 län = br * hö * 4;
  1376. for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
  1377. {
  1378. k->getNachricht( &( buffer[ i ] ), l );
  1379. i += l;
  1380. län -= l;
  1381. }
  1382. cs.unlock();
  1383. return ret;
  1384. }
  1385. }
  1386. }
  1387. if( ret == 3 )
  1388. {
  1389. char byte = 0;
  1390. k->getNachrichtEncrypted( &byte, 1 );
  1391. char *f = new char[ byte + 1 ];
  1392. f[ byte ] = 0;
  1393. k->getNachrichtEncrypted( f, byte );
  1394. err = f;
  1395. delete[] f;
  1396. cs.unlock();
  1397. return 0;
  1398. }
  1399. err = "Unbekannter Fehler";
  1400. cs.unlock();
  1401. return 0;
  1402. }
  1403. // gibt das Minimap Bild der Karte zurück
  1404. // Gibt bei misserfolg 0 zurück
  1405. Framework::Bild *EditorClient::minimapLaden()
  1406. {
  1407. cs.lock();
  1408. if( !k )
  1409. {
  1410. err = "Der Client ist nicht verbunden.";
  1411. cs.unlock();
  1412. return 0;
  1413. }
  1414. k->sendeEncrypted( "\x7", 1 );
  1415. char ret = 0;
  1416. k->getNachrichtEncrypted( &ret, 1 );
  1417. if( ret == 1 )
  1418. {
  1419. k->sendeEncrypted( "\xB", 1 );
  1420. k->getNachrichtEncrypted( &ret, 1 );
  1421. if( ret == 1 )
  1422. {
  1423. k->sendeEncrypted( "\x3", 1 );
  1424. k->getNachrichtEncrypted( &ret, 1 );
  1425. if( ret == 1 )
  1426. {
  1427. Bild *ret = new Bild();
  1428. int br = 0;
  1429. int hö = 0;
  1430. k->getNachrichtEncrypted( (char*)&br, 4 );
  1431. k->getNachrichtEncrypted( (char*)&hö, 4 );
  1432. ret->neuBild( br, hö, 0 );
  1433. char *buffer = (char*)ret->getBuffer();
  1434. __int64 län = br * hö * 4;
  1435. for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
  1436. {
  1437. k->getNachricht( &( buffer[ i ] ), l );
  1438. i += l;
  1439. län -= l;
  1440. }
  1441. cs.unlock();
  1442. return ret;
  1443. }
  1444. }
  1445. }
  1446. if( ret == 3 )
  1447. {
  1448. char byte = 0;
  1449. k->getNachrichtEncrypted( &byte, 1 );
  1450. char *f = new char[ byte + 1 ];
  1451. f[ byte ] = 0;
  1452. k->getNachrichtEncrypted( f, byte );
  1453. err = f;
  1454. delete[] f;
  1455. cs.unlock();
  1456. return 0;
  1457. }
  1458. err = "Unbekannter Fehler";
  1459. cs.unlock();
  1460. return 0;
  1461. }
  1462. // gibt das Ladebild der Karte zurück
  1463. // Gibt bei misserfolg 0 zurück
  1464. Framework::Bild *EditorClient::ladebildLaden()
  1465. {
  1466. cs.lock();
  1467. if( !k )
  1468. {
  1469. err = "Der Client ist nicht verbunden.";
  1470. cs.unlock();
  1471. return 0;
  1472. }
  1473. k->sendeEncrypted( "\x7", 1 );
  1474. char ret = 0;
  1475. k->getNachrichtEncrypted( &ret, 1 );
  1476. if( ret == 1 )
  1477. {
  1478. k->sendeEncrypted( "\xB", 1 );
  1479. k->getNachrichtEncrypted( &ret, 1 );
  1480. if( ret == 1 )
  1481. {
  1482. k->sendeEncrypted( "\x4", 1 );
  1483. k->getNachrichtEncrypted( &ret, 1 );
  1484. if( ret == 1 )
  1485. {
  1486. Bild *ret = new Bild();
  1487. int br = 0;
  1488. int hö = 0;
  1489. k->getNachrichtEncrypted( (char*)&br, 4 );
  1490. k->getNachrichtEncrypted( (char*)&hö, 4 );
  1491. ret->neuBild( br, hö, 0 );
  1492. char *buffer = (char*)ret->getBuffer();
  1493. __int64 län = br * hö * 4;
  1494. for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
  1495. {
  1496. k->getNachricht( &( buffer[ i ] ), l );
  1497. i += l;
  1498. län -= l;
  1499. }
  1500. cs.unlock();
  1501. return ret;
  1502. }
  1503. }
  1504. }
  1505. if( ret == 3 )
  1506. {
  1507. char byte = 0;
  1508. k->getNachrichtEncrypted( &byte, 1 );
  1509. char *f = new char[ byte + 1 ];
  1510. f[ byte ] = 0;
  1511. k->getNachrichtEncrypted( f, byte );
  1512. err = f;
  1513. delete[] f;
  1514. cs.unlock();
  1515. return 0;
  1516. }
  1517. err = "Unbekannter Fehler";
  1518. cs.unlock();
  1519. return 0;
  1520. }
  1521. // speichert den KSGScript Quellcode der Kartenbeschreibung
  1522. // zText: Der KSGScript Quellcode (ohne erhöhten reference Counter)
  1523. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1524. bool EditorClient::beschreibungSpeichern( Framework::Text *zText )
  1525. {
  1526. cs.lock();
  1527. if( !k )
  1528. {
  1529. err = "Der Client ist nicht verbunden.";
  1530. cs.unlock();
  1531. return 0;
  1532. }
  1533. k->sendeEncrypted( "\x7", 1 );
  1534. char ret = 0;
  1535. k->getNachrichtEncrypted( &ret, 1 );
  1536. if( ret == 1 )
  1537. {
  1538. k->sendeEncrypted( "\xB", 1 );
  1539. k->getNachrichtEncrypted( &ret, 1 );
  1540. if( ret == 1 )
  1541. {
  1542. k->sendeEncrypted( "\x5", 1 );
  1543. k->getNachrichtEncrypted( &ret, 1 );
  1544. if( ret == 1 )
  1545. {
  1546. int län = zText->getLength();
  1547. k->sendeEncrypted( (char*)&län, 4 );
  1548. for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
  1549. k->sende( &( zText->getText()[ i ] ), l );
  1550. k->getNachrichtEncrypted( &ret, 1 );
  1551. }
  1552. }
  1553. }
  1554. if( ret == 3 )
  1555. {
  1556. char byte = 0;
  1557. k->getNachrichtEncrypted( &byte, 1 );
  1558. char *f = new char[ byte + 1 ];
  1559. f[ byte ] = 0;
  1560. k->getNachrichtEncrypted( f, byte );
  1561. err = f;
  1562. delete[] f;
  1563. cs.unlock();
  1564. return 0;
  1565. }
  1566. if( ret != 1 )
  1567. err = "Unbekannter Fehler";
  1568. cs.unlock();
  1569. return ret == 1;
  1570. }
  1571. // speichert das Titelbild der Karte
  1572. // zBild: das neue Titelbild
  1573. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1574. bool EditorClient::titelbildSpeichern( Framework::Bild *zBild )
  1575. {
  1576. cs.lock();
  1577. if( !k )
  1578. {
  1579. err = "Der Client ist nicht verbunden.";
  1580. cs.unlock();
  1581. return 0;
  1582. }
  1583. k->sendeEncrypted( "\x7", 1 );
  1584. char ret = 0;
  1585. k->getNachrichtEncrypted( &ret, 1 );
  1586. if( ret == 1 )
  1587. {
  1588. k->sendeEncrypted( "\xB", 1 );
  1589. k->getNachrichtEncrypted( &ret, 1 );
  1590. if( ret == 1 )
  1591. {
  1592. k->sendeEncrypted( "\x6", 1 );
  1593. k->getNachrichtEncrypted( &ret, 1 );
  1594. if( ret == 1 )
  1595. {
  1596. int br = zBild->getBreite();
  1597. int hö = zBild->getHeight();
  1598. k->sendeEncrypted( (char*)&br, 4 );
  1599. k->sendeEncrypted( (char*)&hö, 4 );
  1600. __int64 län = br * hö * 4;
  1601. char *buffer = (char*)zBild->getBuffer();
  1602. for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
  1603. k->sende( &( buffer[ i ] ), l );
  1604. k->getNachrichtEncrypted( &ret, 1 );
  1605. }
  1606. }
  1607. }
  1608. if( ret == 3 )
  1609. {
  1610. char byte = 0;
  1611. k->getNachrichtEncrypted( &byte, 1 );
  1612. char *f = new char[ byte + 1 ];
  1613. f[ byte ] = 0;
  1614. k->getNachrichtEncrypted( f, byte );
  1615. err = f;
  1616. delete[] f;
  1617. cs.unlock();
  1618. return 0;
  1619. }
  1620. if( ret != 1 )
  1621. err = "Unbekannter Fehler";
  1622. cs.unlock();
  1623. return ret == 1;
  1624. }
  1625. // speichert das Minimapbild der Karte
  1626. // zBild: das neue Minimapbild
  1627. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1628. bool EditorClient::minimapSpeichern( Framework::Bild *zBild )
  1629. {
  1630. cs.lock();
  1631. if( !k )
  1632. {
  1633. err = "Der Client ist nicht verbunden.";
  1634. cs.unlock();
  1635. return 0;
  1636. }
  1637. k->sendeEncrypted( "\x7", 1 );
  1638. char ret = 0;
  1639. k->getNachrichtEncrypted( &ret, 1 );
  1640. if( ret == 1 )
  1641. {
  1642. k->sendeEncrypted( "\xB", 1 );
  1643. k->getNachrichtEncrypted( &ret, 1 );
  1644. if( ret == 1 )
  1645. {
  1646. k->sendeEncrypted( "\x7", 1 );
  1647. k->getNachrichtEncrypted( &ret, 1 );
  1648. if( ret == 1 )
  1649. {
  1650. int br = zBild->getBreite();
  1651. int hö = zBild->getHeight();
  1652. k->sendeEncrypted( (char*)&br, 4 );
  1653. k->sendeEncrypted( (char*)&hö, 4 );
  1654. __int64 län = br * hö * 4;
  1655. char *buffer = (char*)zBild->getBuffer();
  1656. for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
  1657. k->sende( &( buffer[ i ] ), l );
  1658. k->getNachrichtEncrypted( &ret, 1 );
  1659. }
  1660. }
  1661. }
  1662. if( ret == 3 )
  1663. {
  1664. char byte = 0;
  1665. k->getNachrichtEncrypted( &byte, 1 );
  1666. char *f = new char[ byte + 1 ];
  1667. f[ byte ] = 0;
  1668. k->getNachrichtEncrypted( f, byte );
  1669. err = f;
  1670. delete[] f;
  1671. cs.unlock();
  1672. return 0;
  1673. }
  1674. if( ret != 1 )
  1675. err = "Unbekannter Fehler";
  1676. cs.unlock();
  1677. return ret == 1;
  1678. }
  1679. // speichert das Ladebild der Karte
  1680. // zBild: das neue Ladebild
  1681. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1682. bool EditorClient::ladebildSpeichern( Framework::Bild *zBild )
  1683. {
  1684. cs.lock();
  1685. if( !k )
  1686. {
  1687. err = "Der Client ist nicht verbunden.";
  1688. cs.unlock();
  1689. return 0;
  1690. }
  1691. k->sendeEncrypted( "\x7", 1 );
  1692. char ret = 0;
  1693. k->getNachrichtEncrypted( &ret, 1 );
  1694. if( ret == 1 )
  1695. {
  1696. k->sendeEncrypted( "\xB", 1 );
  1697. k->getNachrichtEncrypted( &ret, 1 );
  1698. if( ret == 1 )
  1699. {
  1700. k->sendeEncrypted( "\x8", 1 );
  1701. k->getNachrichtEncrypted( &ret, 1 );
  1702. if( ret == 1 )
  1703. {
  1704. int br = zBild->getBreite();
  1705. int hö = zBild->getHeight();
  1706. k->sendeEncrypted( (char*)&br, 4 );
  1707. k->sendeEncrypted( (char*)&hö, 4 );
  1708. __int64 län = br * hö * 4;
  1709. char *buffer = (char*)zBild->getBuffer();
  1710. for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
  1711. k->sende( &( buffer[ i ] ), l );
  1712. k->getNachrichtEncrypted( &ret, 1 );
  1713. }
  1714. }
  1715. }
  1716. if( ret == 3 )
  1717. {
  1718. char byte = 0;
  1719. k->getNachrichtEncrypted( &byte, 1 );
  1720. char *f = new char[ byte + 1 ];
  1721. f[ byte ] = 0;
  1722. k->getNachrichtEncrypted( f, byte );
  1723. err = f;
  1724. delete[] f;
  1725. cs.unlock();
  1726. return 0;
  1727. }
  1728. if( ret != 1 )
  1729. err = "Unbekannter Fehler";
  1730. cs.unlock();
  1731. return ret == 1;
  1732. }
  1733. // lädt die Spieler Team Daten der Karte
  1734. // sts: Enthält nach erfolgreichem Aufruf die Spieler Team Daten
  1735. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1736. bool EditorClient::ladeTeamDaten( SpielerTeamStrukturV *sts )
  1737. {
  1738. cs.lock();
  1739. if( !k )
  1740. {
  1741. err = "Der Client ist nicht verbunden.";
  1742. cs.unlock();
  1743. return 0;
  1744. }
  1745. k->sendeEncrypted( "\x7", 1 );
  1746. char ret = 0;
  1747. k->getNachrichtEncrypted( &ret, 1 );
  1748. if( ret == 1 )
  1749. {
  1750. k->sendeEncrypted( "\xC", 1 );
  1751. k->getNachrichtEncrypted( &ret, 1 );
  1752. if( ret == 1 )
  1753. {
  1754. k->sendeEncrypted( "\x1", 1 );
  1755. k->getNachrichtEncrypted( &ret, 1 );
  1756. if( ret == 1 )
  1757. {
  1758. k->getNachrichtEncrypted( (char*)&sts->spielerAnzahl, 4 );
  1759. k->getNachrichtEncrypted( (char*)&sts->teamAnzahl, 4 );
  1760. for( int i = 0; i < sts->spielerAnzahl; i++ )
  1761. {
  1762. int f = 0;
  1763. k->getNachrichtEncrypted( (char*)&f, 4 );
  1764. sts->spielerFarbe->set( f, i );
  1765. }
  1766. for( int i = 0; i < sts->teamAnzahl; i++ )
  1767. {
  1768. int f = 0;
  1769. k->getNachrichtEncrypted( (char*)&f, 4 );
  1770. sts->teamFarbe->set( f, i );
  1771. }
  1772. for( int i = 0; i < sts->teamAnzahl; i++ )
  1773. {
  1774. char l = 0;
  1775. k->getNachrichtEncrypted( &l, 1 );
  1776. char *n = new char[ l + 1 ];
  1777. n[ l ] = 0;
  1778. k->getNachrichtEncrypted( n, l );
  1779. sts->teamName->set( new Text( n ), i );
  1780. delete[] n;
  1781. }
  1782. for( int i = 0; i < sts->teamAnzahl; i++ )
  1783. {
  1784. int g = 0;
  1785. k->getNachrichtEncrypted( (char*)&g, 4 );
  1786. sts->teamGröße->set( g, i );
  1787. }
  1788. cs.unlock();
  1789. return 1;
  1790. }
  1791. }
  1792. }
  1793. if( ret == 3 )
  1794. {
  1795. char byte = 0;
  1796. k->getNachrichtEncrypted( &byte, 1 );
  1797. char *f = new char[ byte + 1 ];
  1798. f[ byte ] = 0;
  1799. k->getNachrichtEncrypted( f, byte );
  1800. err = f;
  1801. delete[] f;
  1802. cs.unlock();
  1803. return 0;
  1804. }
  1805. err = "Unbekannter Fehler";
  1806. cs.unlock();
  1807. return 0;
  1808. }
  1809. // speichert die Team Daten
  1810. // sts: die neuen Spieler Team Daten
  1811. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1812. bool EditorClient::speicherTeamDaten( SpielerTeamStrukturV *sts )
  1813. {
  1814. cs.lock();
  1815. if( !k )
  1816. {
  1817. err = "Der Client ist nicht verbunden.";
  1818. cs.unlock();
  1819. return 0;
  1820. }
  1821. k->sendeEncrypted( "\x7", 1 );
  1822. char ret = 0;
  1823. k->getNachrichtEncrypted( &ret, 1 );
  1824. if( ret == 1 )
  1825. {
  1826. k->sendeEncrypted( "\xC", 1 );
  1827. k->getNachrichtEncrypted( &ret, 1 );
  1828. if( ret == 1 )
  1829. {
  1830. k->sendeEncrypted( "\x2", 1 );
  1831. k->getNachrichtEncrypted( &ret, 1 );
  1832. if( ret == 1 )
  1833. {
  1834. k->sendeEncrypted( (char*)&sts->spielerAnzahl, 4 );
  1835. k->sendeEncrypted( (char*)&sts->teamAnzahl, 4 );
  1836. for( int i = 0; i < sts->spielerAnzahl; i++ )
  1837. {
  1838. int f = sts->spielerFarbe->get( i );
  1839. k->sendeEncrypted( (char*)&f, 4 );
  1840. }
  1841. for( int i = 0; i < sts->teamAnzahl; i++ )
  1842. {
  1843. int f = sts->teamFarbe->get( i );
  1844. k->sendeEncrypted( (char*)&f, 4 );
  1845. }
  1846. for( int i = 0; i < sts->teamAnzahl; i++ )
  1847. {
  1848. char l = (char)sts->teamName->z( i )->getLength();
  1849. k->sendeEncrypted( &l, 1 );
  1850. k->sendeEncrypted( sts->teamName->z( i )->getText(), l );
  1851. }
  1852. for( int i = 0; i < sts->teamAnzahl; i++ )
  1853. {
  1854. int g = sts->teamGröße->get( i );
  1855. k->sendeEncrypted( (char*)&g, 4 );
  1856. }
  1857. cs.unlock();
  1858. return 1;
  1859. }
  1860. }
  1861. }
  1862. if( ret == 3 )
  1863. {
  1864. char byte = 0;
  1865. k->getNachrichtEncrypted( &byte, 1 );
  1866. char *f = new char[ byte + 1 ];
  1867. f[ byte ] = 0;
  1868. k->getNachrichtEncrypted( f, byte );
  1869. err = f;
  1870. delete[] f;
  1871. cs.unlock();
  1872. return 0;
  1873. }
  1874. err = "Unbekannter Fehler";
  1875. cs.unlock();
  1876. return 0;
  1877. }
  1878. // Erstellt neue Datei im Datei Editor
  1879. // typ: 0=ordner 1=bild 2=modell2d 3=sound
  1880. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1881. bool EditorClient::deNeueDatei( char typ, Framework::Text *zName )
  1882. {
  1883. cs.lock();
  1884. if( !k )
  1885. {
  1886. err = "Der Client ist nicht verbunden.";
  1887. cs.unlock();
  1888. return 0;
  1889. }
  1890. k->sendeEncrypted( "\x7", 1 );
  1891. char ret = 0;
  1892. k->getNachrichtEncrypted( &ret, 1 );
  1893. if( ret == 1 )
  1894. {
  1895. k->sendeEncrypted( "\xD", 1 );
  1896. k->getNachrichtEncrypted( &ret, 1 );
  1897. if( ret == 1 )
  1898. {
  1899. k->sendeEncrypted( "\x1", 1 );
  1900. k->getNachrichtEncrypted( &ret, 1 );
  1901. if( ret == 1 )
  1902. {
  1903. k->sendeEncrypted( &typ, 1 );
  1904. char l = (char)zName->getLength();
  1905. k->sendeEncrypted( &l, 1 );
  1906. if( l )
  1907. k->sendeEncrypted( zName->getText(), l );
  1908. k->getNachrichtEncrypted( &ret, 1 );
  1909. }
  1910. }
  1911. }
  1912. if( ret == 3 )
  1913. {
  1914. char byte = 0;
  1915. k->getNachrichtEncrypted( &byte, 1 );
  1916. char *f = new char[ byte + 1 ];
  1917. f[ byte ] = 0;
  1918. k->getNachrichtEncrypted( f, byte );
  1919. err = f;
  1920. delete[] f;
  1921. cs.unlock();
  1922. return 0;
  1923. }
  1924. if( ret != 1 )
  1925. err = "Unbekannter Fehler";
  1926. cs.unlock();
  1927. return ret == 1;
  1928. }
  1929. // Öffnet Ordner im Datei Editor
  1930. // zName: Der Name des Ordners
  1931. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  1932. bool EditorClient::deOrdnerÖffnen( Framework::Text *zName )
  1933. {
  1934. cs.lock();
  1935. if( !k )
  1936. {
  1937. err = "Der Client ist nicht verbunden.";
  1938. cs.unlock();
  1939. return 0;
  1940. }
  1941. k->sendeEncrypted( "\x7", 1 );
  1942. char ret = 0;
  1943. k->getNachrichtEncrypted( &ret, 1 );
  1944. if( ret == 1 )
  1945. {
  1946. k->sendeEncrypted( "\xD", 1 );
  1947. k->getNachrichtEncrypted( &ret, 1 );
  1948. if( ret == 1 )
  1949. {
  1950. k->sendeEncrypted( "\x2", 1 );
  1951. k->getNachrichtEncrypted( &ret, 1 );
  1952. if( ret == 1 )
  1953. {
  1954. char län = (char)zName->getLength();
  1955. k->sendeEncrypted( &län, 1 );
  1956. if( län )
  1957. k->sendeEncrypted( zName->getText(), län );
  1958. k->getNachrichtEncrypted( &ret, 1 );
  1959. }
  1960. }
  1961. }
  1962. if( ret == 3 )
  1963. {
  1964. char byte = 0;
  1965. k->getNachrichtEncrypted( &byte, 1 );
  1966. char *f = new char[ byte + 1 ];
  1967. f[ byte ] = 0;
  1968. k->getNachrichtEncrypted( f, byte );
  1969. err = f;
  1970. delete[] f;
  1971. cs.unlock();
  1972. return 0;
  1973. }
  1974. if( ret != 1 )
  1975. err = "Unbekannter Fehler";
  1976. cs.unlock();
  1977. return ret == 1;
  1978. }
  1979. // Gibt ein Bild aus dem Datei Editor zurück
  1980. // zDatei: Der Name der Datei (ohne erhöhten Reference Counter)
  1981. // zBild: Der Name des Bildes (ohne erhöhten Reference Counter)
  1982. // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
  1983. // Gibt bei misserfolg 0 zurück
  1984. Framework::Bild *EditorClient::deBildLaden( Framework::Text *zDatei, Framework::Text *zBild, Framework::FBalken *zF )
  1985. {
  1986. cs.lock();
  1987. if( !k )
  1988. {
  1989. err = "Der Client ist nicht verbunden.";
  1990. cs.unlock();
  1991. return 0;
  1992. }
  1993. Bild *retB = 0;
  1994. k->sendeEncrypted( "\x7", 1 );
  1995. char ret = 0;
  1996. k->getNachrichtEncrypted( &ret, 1 );
  1997. if( ret == 1 )
  1998. {
  1999. k->sendeEncrypted( "\xD", 1 );
  2000. k->getNachrichtEncrypted( &ret, 1 );
  2001. if( ret == 1 )
  2002. {
  2003. k->sendeEncrypted( "\x3", 1 );
  2004. k->getNachrichtEncrypted( &ret, 1 );
  2005. if( ret == 1 )
  2006. {
  2007. char län = (char)zDatei->getLength();
  2008. k->sendeEncrypted( &län, 1 );
  2009. if( län )
  2010. k->sendeEncrypted( zDatei->getText(), län );
  2011. län = (char)zBild->getLength();
  2012. k->sendeEncrypted( &län, 1 );
  2013. if( län )
  2014. k->sendeEncrypted( zBild->getText(), län );
  2015. k->getNachrichtEncrypted( &ret, 1 );
  2016. if( ret == 1 )
  2017. {
  2018. int br = 0;
  2019. int hö = 0;
  2020. k->getNachrichtEncrypted( (char*)&br, 4 );
  2021. k->getNachrichtEncrypted( (char*)&hö, 4 );
  2022. retB = new Bild();
  2023. retB->neuBild( br, hö, 0 );
  2024. char *buffer = (char*)retB->getBuffer();
  2025. __int64 län = br * hö * 4;
  2026. zF->setAktionAnzahl( län );
  2027. for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
  2028. {
  2029. k->getNachricht( &( buffer[ i ] ), l );
  2030. i += l;
  2031. län -= l;
  2032. zF->aktionPlus( l );
  2033. }
  2034. }
  2035. }
  2036. }
  2037. }
  2038. if( ret == 3 )
  2039. {
  2040. char byte = 0;
  2041. k->getNachrichtEncrypted( &byte, 1 );
  2042. char *f = new char[ byte + 1 ];
  2043. f[ byte ] = 0;
  2044. k->getNachrichtEncrypted( f, byte );
  2045. err = f;
  2046. delete[] f;
  2047. cs.unlock();
  2048. return 0;
  2049. }
  2050. cs.unlock();
  2051. if( !ret && retB )
  2052. retB = retB->release();
  2053. if( !retB )
  2054. err = "Unbekannter Fehler";
  2055. return retB;
  2056. }
  2057. // Löscht eine Datei aus dem Datei Editor
  2058. // zName: Der Name der Datei
  2059. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  2060. bool EditorClient::deDateiLöschen( Framework::Text *zName )
  2061. {
  2062. cs.lock();
  2063. if( !k )
  2064. {
  2065. err = "Der Client ist nicht verbunden.";
  2066. cs.unlock();
  2067. return 0;
  2068. }
  2069. k->sendeEncrypted( "\x7", 1 );
  2070. char ret = 0;
  2071. k->getNachrichtEncrypted( &ret, 1 );
  2072. if( ret == 1 )
  2073. {
  2074. k->sendeEncrypted( "\xD", 1 );
  2075. k->getNachrichtEncrypted( &ret, 1 );
  2076. if( ret == 1 )
  2077. {
  2078. k->sendeEncrypted( "\x4", 1 );
  2079. k->getNachrichtEncrypted( &ret, 1 );
  2080. if( ret == 1 )
  2081. {
  2082. char län = (char)zName->getLength();
  2083. k->sendeEncrypted( &län, 1 );
  2084. if( län )
  2085. k->sendeEncrypted( zName->getText(), län );
  2086. k->getNachrichtEncrypted( &ret, 1 );
  2087. }
  2088. }
  2089. }
  2090. if( ret == 3 )
  2091. {
  2092. char byte = 0;
  2093. k->getNachrichtEncrypted( &byte, 1 );
  2094. char *f = new char[ byte + 1 ];
  2095. f[ byte ] = 0;
  2096. k->getNachrichtEncrypted( f, byte );
  2097. err = f;
  2098. delete[] f;
  2099. cs.unlock();
  2100. return 0;
  2101. }
  2102. if( ret != 1 )
  2103. err = "Unbekannter Fehler";
  2104. cs.unlock();
  2105. return ret == 1;
  2106. }
  2107. // Löscht Bild aus Datei im Datei Editor
  2108. // zDatei: Der Name der Bilddatei (ohne erhöhten Reference Counter)
  2109. // zBild: Der Name des Bildes (ohne erhöhten Reference Counter)
  2110. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  2111. bool EditorClient::deBildLöschen( Framework::Text *zDatei, Framework::Text *zBild )
  2112. {
  2113. cs.lock();
  2114. if( !k )
  2115. {
  2116. err = "Der Client ist nicht verbunden.";
  2117. cs.unlock();
  2118. return 0;
  2119. }
  2120. k->sendeEncrypted( "\x7", 1 );
  2121. char ret = 0;
  2122. k->getNachrichtEncrypted( &ret, 1 );
  2123. if( ret == 1 )
  2124. {
  2125. k->sendeEncrypted( "\xD", 1 );
  2126. k->getNachrichtEncrypted( &ret, 1 );
  2127. if( ret == 1 )
  2128. {
  2129. k->sendeEncrypted( "\x5", 1 );
  2130. k->getNachrichtEncrypted( &ret, 1 );
  2131. if( ret == 1 )
  2132. {
  2133. char l = (char)zDatei->getLength();
  2134. k->sendeEncrypted( &l, 1 );
  2135. if( l )
  2136. k->sendeEncrypted( zDatei->getText(), l );
  2137. l = (char)zBild->getLength();
  2138. k->sendeEncrypted( &l, 1 );
  2139. if( l )
  2140. k->sendeEncrypted( zBild->getText(), l );
  2141. k->getNachrichtEncrypted( &ret, 1 );
  2142. }
  2143. }
  2144. }
  2145. if( ret == 3 )
  2146. {
  2147. char byte = 0;
  2148. k->getNachrichtEncrypted( &byte, 1 );
  2149. char *f = new char[ byte + 1 ];
  2150. f[ byte ] = 0;
  2151. k->getNachrichtEncrypted( f, byte );
  2152. err = f;
  2153. delete[] f;
  2154. cs.unlock();
  2155. return 0;
  2156. }
  2157. if( ret != 1 )
  2158. err = "Unbekannter Fehler";
  2159. cs.unlock();
  2160. return ret == 1;
  2161. }
  2162. // Speichert Bild in Datei im Datei Editor
  2163. // zDatei: Der Name der Bilddatei (ohne erhöhten Reference Counter)
  2164. // zName: Der Name des Bildes (ohne erhöhten Reference Counter)
  2165. // zBild: Das neue Bild (ohne erhöhten Reference Counter)
  2166. // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
  2167. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  2168. bool EditorClient::deBildSpeichern( Framework::Text *zDatei, Framework::Text *zName, Framework::Bild *zBild, Framework::FBalken *zF )
  2169. {
  2170. cs.lock();
  2171. if( !k )
  2172. {
  2173. err = "Der Client ist nicht verbunden.";
  2174. cs.unlock();
  2175. return 0;
  2176. }
  2177. k->sendeEncrypted( "\x7", 1 );
  2178. char ret = 0;
  2179. k->getNachrichtEncrypted( &ret, 1 );
  2180. if( ret == 1 )
  2181. {
  2182. k->sendeEncrypted( "\xD", 1 );
  2183. k->getNachrichtEncrypted( &ret, 1 );
  2184. if( ret == 1 )
  2185. {
  2186. k->sendeEncrypted( "\x6", 1 );
  2187. k->getNachrichtEncrypted( &ret, 1 );
  2188. if( ret == 1 )
  2189. {
  2190. char län = (char)zDatei->getLength();
  2191. k->sendeEncrypted( &län, 1 );
  2192. if( län )
  2193. k->sendeEncrypted( zDatei->getText(), län );
  2194. län = (char)zName->getLength();
  2195. k->sendeEncrypted( &län, 1 );
  2196. if( län )
  2197. k->sendeEncrypted( zName->getText(), län );
  2198. k->getNachrichtEncrypted( &ret, 1 );
  2199. if( ret == 1 )
  2200. {
  2201. int br = zBild->getBreite();
  2202. int hö = zBild->getHeight();
  2203. k->sendeEncrypted( (char*)&br, 4 );
  2204. k->sendeEncrypted( (char*)&hö, 4 );
  2205. char *buffer = (char*)zBild->getBuffer();
  2206. __int64 gr = br * hö * 4;
  2207. zF->setAktionAnzahl( gr );
  2208. for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
  2209. {
  2210. k->sende( &( buffer[ i ] ), l );
  2211. zF->aktionPlus( l );
  2212. }
  2213. k->getNachrichtEncrypted( &ret, 1 );
  2214. }
  2215. }
  2216. }
  2217. }
  2218. if( ret == 3 )
  2219. {
  2220. char byte = 0;
  2221. k->getNachrichtEncrypted( &byte, 1 );
  2222. char *f = new char[ byte + 1 ];
  2223. f[ byte ] = 0;
  2224. k->getNachrichtEncrypted( f, byte );
  2225. err = f;
  2226. delete[] f;
  2227. cs.unlock();
  2228. return 0;
  2229. }
  2230. if( ret != 1 )
  2231. err = "Unbekannter Fehler";
  2232. cs.unlock();
  2233. return ret == 1;
  2234. }
  2235. // Lädt eine Liste mit Dateien im aktuellen Ordner des Datei Editors
  2236. // zNamen: Enthält nach erfolgreichem Aufruf eine Liste mit Dateinamen (ohne erhöhten Reference Counter)
  2237. // Gibt die Anzahl der Dateien zurück
  2238. int EditorClient::deGetDateiListe( Framework::RCArray< Framework::Text > *zNamen )
  2239. {
  2240. cs.lock();
  2241. if( !k )
  2242. {
  2243. err = "Der Client ist nicht verbunden.";
  2244. cs.unlock();
  2245. return 0;
  2246. }
  2247. k->sendeEncrypted( "\x7", 1 );
  2248. char ret = 0;
  2249. k->getNachrichtEncrypted( &ret, 1 );
  2250. if( ret == 1 )
  2251. {
  2252. k->sendeEncrypted( "\xD", 1 );
  2253. k->getNachrichtEncrypted( &ret, 1 );
  2254. if( ret == 1 )
  2255. {
  2256. k->sendeEncrypted( "\x7", 1 );
  2257. k->getNachrichtEncrypted( &ret, 1 );
  2258. if( ret == 1 )
  2259. {
  2260. int anz = 0;
  2261. k->getNachrichtEncrypted( (char*)&anz, 4 );
  2262. for( int i = 0; i < anz; i++ )
  2263. {
  2264. char l = 0;
  2265. k->getNachrichtEncrypted( &l, 1 );
  2266. char *n = new char[ l + 1 ];
  2267. n[ l ] = 0;
  2268. if( l )
  2269. k->getNachrichtEncrypted( n, l );
  2270. zNamen->add( new Text( n ) );
  2271. delete[] n;
  2272. }
  2273. cs.unlock();
  2274. return anz;
  2275. }
  2276. }
  2277. }
  2278. if( ret == 3 )
  2279. {
  2280. char byte = 0;
  2281. k->getNachrichtEncrypted( &byte, 1 );
  2282. char *f = new char[ byte + 1 ];
  2283. f[ byte ] = 0;
  2284. k->getNachrichtEncrypted( f, byte );
  2285. err = f;
  2286. delete[] f;
  2287. cs.unlock();
  2288. return -1;
  2289. }
  2290. if( ret != 1 )
  2291. err = "Unbekannter Fehler";
  2292. cs.unlock();
  2293. return ret == 1;
  2294. }
  2295. // Lädt eine Liste mit Bildern aus einer Bilddatei des Datei Editors
  2296. // zNamen: Enthält nach erfolgreichem Aufruf eine Liste mit den Bildnamen (ohne erhöhten Reference Counter)
  2297. // Gibt die Anzahl der Bilder zurück
  2298. int EditorClient::deGetBildListe( Framework::Text *zDatei, Framework::RCArray< Framework::Text > *zNamen )
  2299. {
  2300. cs.lock();
  2301. if( !k )
  2302. {
  2303. err = "Der Client ist nicht verbunden.";
  2304. cs.unlock();
  2305. return 0;
  2306. }
  2307. k->sendeEncrypted( "\x7", 1 );
  2308. char ret = 0;
  2309. k->getNachrichtEncrypted( &ret, 1 );
  2310. if( ret == 1 )
  2311. {
  2312. k->sendeEncrypted( "\xD", 1 );
  2313. k->getNachrichtEncrypted( &ret, 1 );
  2314. if( ret == 1 )
  2315. {
  2316. k->sendeEncrypted( "\x8", 1 );
  2317. k->getNachrichtEncrypted( &ret, 1 );
  2318. if( ret == 1 )
  2319. {
  2320. char l = (char)zDatei->getLength();
  2321. k->sendeEncrypted( &l, 1 );
  2322. k->sendeEncrypted( zDatei->getText(), l );
  2323. k->getNachrichtEncrypted( &ret, 1 );
  2324. if( ret == 1 )
  2325. {
  2326. int anz = 0;
  2327. k->getNachrichtEncrypted( (char*)&anz, 4 );
  2328. for( int i = 0; i < anz; i++ )
  2329. {
  2330. k->getNachrichtEncrypted( &l, 1 );
  2331. char *n = new char[ l + 1 ];
  2332. n[ l ] = 0;
  2333. if( l )
  2334. k->getNachrichtEncrypted( n, l );
  2335. zNamen->add( new Text( n ) );
  2336. delete[] n;
  2337. }
  2338. cs.unlock();
  2339. return anz;
  2340. }
  2341. }
  2342. }
  2343. }
  2344. if( ret == 3 )
  2345. {
  2346. char byte = 0;
  2347. k->getNachrichtEncrypted( &byte, 1 );
  2348. char *f = new char[ byte + 1 ];
  2349. f[ byte ] = 0;
  2350. k->getNachrichtEncrypted( f, byte );
  2351. err = f;
  2352. delete[] f;
  2353. cs.unlock();
  2354. return 0;
  2355. }
  2356. if( ret != 1 )
  2357. err = "Unbekannter Fehler";
  2358. cs.unlock();
  2359. return ret == 1;
  2360. }
  2361. // Lädt eine Liste mit 2D Modellen aus einer Modeldatei im Datei Editor
  2362. // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
  2363. // zNamen: Enthält nach erfolgreichem Aufruf eine Liste mit den Modelnamen (ohne erhöhten Reference Counter)
  2364. // Gibt die Anzahl der Modelle zurück
  2365. int EditorClient::deGetModelListe( Framework::Text *zDatei, Framework::RCArray< Framework::Text > *zNamen )
  2366. {
  2367. cs.lock();
  2368. if( !k )
  2369. {
  2370. err = "Der Client ist nicht verbunden.";
  2371. cs.unlock();
  2372. return 0;
  2373. }
  2374. k->sendeEncrypted( "\x7", 1 );
  2375. char ret = 0;
  2376. k->getNachrichtEncrypted( &ret, 1 );
  2377. if( ret == 1 )
  2378. {
  2379. k->sendeEncrypted( "\xD", 1 );
  2380. k->getNachrichtEncrypted( &ret, 1 );
  2381. if( ret == 1 )
  2382. {
  2383. k->sendeEncrypted( "\x9", 1 );
  2384. k->getNachrichtEncrypted( &ret, 1 );
  2385. if( ret == 1 )
  2386. {
  2387. char l = (char)zDatei->getLength();
  2388. k->sendeEncrypted( &l, 1 );
  2389. k->sendeEncrypted( zDatei->getText(), l );
  2390. k->getNachrichtEncrypted( &ret, 1 );
  2391. if( ret == 1 )
  2392. {
  2393. int anz = 0;
  2394. k->getNachrichtEncrypted( (char*)&anz, 4 );
  2395. for( int i = 0; i < anz; i++ )
  2396. {
  2397. k->getNachrichtEncrypted( &l, 1 );
  2398. char *n = new char[ l + 1 ];
  2399. n[ l ] = 0;
  2400. if( l )
  2401. k->getNachrichtEncrypted( n, l );
  2402. zNamen->add( new Text( n ) );
  2403. delete[] n;
  2404. }
  2405. cs.unlock();
  2406. return anz;
  2407. }
  2408. }
  2409. }
  2410. }
  2411. if( ret == 3 )
  2412. {
  2413. char byte = 0;
  2414. k->getNachrichtEncrypted( &byte, 1 );
  2415. char *f = new char[ byte + 1 ];
  2416. f[ byte ] = 0;
  2417. k->getNachrichtEncrypted( f, byte );
  2418. err = f;
  2419. delete[] f;
  2420. cs.unlock();
  2421. return 0;
  2422. }
  2423. if( ret != 1 )
  2424. err = "Unbekannter Fehler";
  2425. cs.unlock();
  2426. return ret == 1;
  2427. }
  2428. // Lädt eine Liste mit Sounds aus einer Sounddatei im Datei Editor
  2429. // zDatei: Der Name der Sounddatei (ohne erhöhten Reference Counter)
  2430. // zNamen: Enthält nach erfolgreichem Aufruf eine Liste mit den Soundnamen (ohne erhöhten Reference Counter)
  2431. // Gibt die Anzahl der Sounds zurück
  2432. int EditorClient::deGetSoundListe( Framework::Text *zDatei, Framework::RCArray< Framework::Text > *zNamen )
  2433. {
  2434. cs.lock();
  2435. if( !k )
  2436. {
  2437. err = "Der Client ist nicht verbunden.";
  2438. cs.unlock();
  2439. return 0;
  2440. }
  2441. k->sendeEncrypted( "\x7", 1 );
  2442. char ret = 0;
  2443. k->getNachrichtEncrypted( &ret, 1 );
  2444. if( ret == 1 )
  2445. {
  2446. k->sendeEncrypted( "\xD", 1 );
  2447. k->getNachrichtEncrypted( &ret, 1 );
  2448. if( ret == 1 )
  2449. {
  2450. k->sendeEncrypted( "\xA", 1 );
  2451. k->getNachrichtEncrypted( &ret, 1 );
  2452. if( ret == 1 )
  2453. {
  2454. char l = (char)zDatei->getLength();
  2455. k->sendeEncrypted( &l, 1 );
  2456. k->sendeEncrypted( zDatei->getText(), l );
  2457. k->getNachrichtEncrypted( &ret, 1 );
  2458. if( ret == 1 )
  2459. {
  2460. int anz = 0;
  2461. k->getNachrichtEncrypted( (char*)&anz, 4 );
  2462. for( int i = 0; i < anz; i++ )
  2463. {
  2464. k->getNachrichtEncrypted( &l, 1 );
  2465. char *n = new char[ l + 1 ];
  2466. n[ l ] = 0;
  2467. if( l )
  2468. k->getNachrichtEncrypted( n, l );
  2469. zNamen->add( new Text( n ) );
  2470. delete[] n;
  2471. }
  2472. cs.unlock();
  2473. return anz;
  2474. }
  2475. }
  2476. }
  2477. }
  2478. if( ret == 3 )
  2479. {
  2480. char byte = 0;
  2481. k->getNachrichtEncrypted( &byte, 1 );
  2482. char *f = new char[ byte + 1 ];
  2483. f[ byte ] = 0;
  2484. k->getNachrichtEncrypted( f, byte );
  2485. err = f;
  2486. delete[] f;
  2487. cs.unlock();
  2488. return 0;
  2489. }
  2490. if( ret != 1 )
  2491. err = "Unbekannter Fehler";
  2492. cs.unlock();
  2493. return ret == 1;
  2494. }
  2495. // Löscht ein Model aus einer Modeldatei des Datei Editors
  2496. // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
  2497. // zModel: Der Name des Models (ohne erhöhten Reference Counter)
  2498. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  2499. bool EditorClient::deModelLöschen( Framework::Text *zDatei, Framework::Text *zModel )
  2500. {
  2501. cs.lock();
  2502. if( !k )
  2503. {
  2504. err = "Der Client ist nicht verbunden.";
  2505. cs.unlock();
  2506. return 0;
  2507. }
  2508. k->sendeEncrypted( "\x7", 1 );
  2509. char ret = 0;
  2510. k->getNachrichtEncrypted( &ret, 1 );
  2511. if( ret == 1 )
  2512. {
  2513. k->sendeEncrypted( "\xD", 1 );
  2514. k->getNachrichtEncrypted( &ret, 1 );
  2515. if( ret == 1 )
  2516. {
  2517. k->sendeEncrypted( "\xB", 1 );
  2518. k->getNachrichtEncrypted( &ret, 1 );
  2519. if( ret == 1 )
  2520. {
  2521. char l = (char)zDatei->getLength();
  2522. k->sendeEncrypted( &l, 1 );
  2523. k->sendeEncrypted( zDatei->getText(), l );
  2524. k->getNachrichtEncrypted( &ret, 1 );
  2525. if( ret == 1 )
  2526. {
  2527. l = (char)zModel->getLength();
  2528. k->sendeEncrypted( &l, 1 );
  2529. k->sendeEncrypted( zModel->getText(), l );
  2530. k->getNachrichtEncrypted( &ret, 1 );
  2531. }
  2532. }
  2533. }
  2534. }
  2535. if( ret == 3 )
  2536. {
  2537. char byte = 0;
  2538. k->getNachrichtEncrypted( &byte, 1 );
  2539. char *f = new char[ byte + 1 ];
  2540. f[ byte ] = 0;
  2541. k->getNachrichtEncrypted( f, byte );
  2542. err = f;
  2543. delete[] f;
  2544. cs.unlock();
  2545. return 0;
  2546. }
  2547. if( ret != 1 )
  2548. err = "Unbekannter Fehler";
  2549. cs.unlock();
  2550. return ret == 1;
  2551. }
  2552. // Löscht einen Sound aus einer Sounddatei des Datei Editors
  2553. // zDatei: Der Name der Sounddatei (ohne erhöhten Reference Counter)
  2554. // zSound: Der Name des Sounds (ohne erhöhten Reference Counter)
  2555. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  2556. bool EditorClient::deSoundLöschen( Framework::Text *zDatei, Framework::Text *zSound )
  2557. {
  2558. cs.lock();
  2559. if( !k )
  2560. {
  2561. err = "Der Client ist nicht verbunden.";
  2562. cs.unlock();
  2563. return 0;
  2564. }
  2565. k->sendeEncrypted( "\x7", 1 );
  2566. char ret = 0;
  2567. k->getNachrichtEncrypted( &ret, 1 );
  2568. if( ret == 1 )
  2569. {
  2570. k->sendeEncrypted( "\xD", 1 );
  2571. k->getNachrichtEncrypted( &ret, 1 );
  2572. if( ret == 1 )
  2573. {
  2574. k->sendeEncrypted( "\xC", 1 );
  2575. k->getNachrichtEncrypted( &ret, 1 );
  2576. if( ret == 1 )
  2577. {
  2578. char l = (char)zDatei->getLength();
  2579. k->sendeEncrypted( &l, 1 );
  2580. k->sendeEncrypted( zDatei->getText(), l );
  2581. k->getNachrichtEncrypted( &ret, 1 );
  2582. if( ret == 1 )
  2583. {
  2584. l = (char)zSound->getLength();
  2585. k->sendeEncrypted( &l, 1 );
  2586. k->sendeEncrypted( zSound->getText(), l );
  2587. k->getNachrichtEncrypted( &ret, 1 );
  2588. }
  2589. }
  2590. }
  2591. }
  2592. if( ret == 3 )
  2593. {
  2594. char byte = 0;
  2595. k->getNachrichtEncrypted( &byte, 1 );
  2596. char *f = new char[ byte + 1 ];
  2597. f[ byte ] = 0;
  2598. k->getNachrichtEncrypted( f, byte );
  2599. err = f;
  2600. delete[] f;
  2601. cs.unlock();
  2602. return 0;
  2603. }
  2604. if( ret != 1 )
  2605. err = "Unbekannter Fehler";
  2606. cs.unlock();
  2607. return ret == 1;
  2608. }
  2609. // Lädt ein Model aus einer Modeldatei des Datei Editors
  2610. // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
  2611. // zModel: Enthält nach erfolgreichem Aufruf das Model (ohne erhöhten Reference Counter)
  2612. // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
  2613. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  2614. Framework::Model2DData *EditorClient::deModelLaden( Framework::Text *zDatei, Framework::Text *zModel, Framework::FBalken *zF )
  2615. {
  2616. cs.lock();
  2617. if( !k )
  2618. {
  2619. err = "Der Client ist nicht verbunden.";
  2620. cs.unlock();
  2621. return 0;
  2622. }
  2623. k->sendeEncrypted( "\x7", 1 );
  2624. char ret = 0;
  2625. k->getNachrichtEncrypted( &ret, 1 );
  2626. if( ret == 1 )
  2627. {
  2628. k->sendeEncrypted( "\xD", 1 );
  2629. k->getNachrichtEncrypted( &ret, 1 );
  2630. if( ret == 1 )
  2631. {
  2632. k->sendeEncrypted( "\xD", 1 );
  2633. k->getNachrichtEncrypted( &ret, 1 );
  2634. if( ret == 1 )
  2635. {
  2636. char l = (char)zDatei->getLength();
  2637. k->sendeEncrypted( &l, 1 );
  2638. k->sendeEncrypted( zDatei->getText(), l );
  2639. k->getNachrichtEncrypted( &ret, 1 );
  2640. if( ret == 1 )
  2641. {
  2642. l = (char)zModel->getLength();
  2643. k->sendeEncrypted( &l, 1 );
  2644. k->sendeEncrypted( zModel->getText(), l );
  2645. k->getNachrichtEncrypted( &ret, 1 );
  2646. if( ret == 1 )
  2647. {
  2648. int anz = 0;
  2649. k->getNachrichtEncrypted( (char*)&anz, 4 );
  2650. zF->setAktionAnzahl( anz );
  2651. Array< Polygon2D > *pol = new Array< Polygon2D >();
  2652. for( int i = 0; i < anz; i++ )
  2653. {
  2654. Polygon2D p;
  2655. p.schwerpunkt = new Vertex( 0, 0 );
  2656. p.vertex = new Array< Vertex >();
  2657. p.tKordinaten = new Array< Vertex >();
  2658. k->getNachrichtEncrypted( (char*)&p.transparent, 1 );
  2659. char nLän = 0;
  2660. k->getNachrichtEncrypted( &nLän, 1 );
  2661. char *txt = new char[ nLän + 1 ];
  2662. if( nLän )
  2663. k->getNachrichtEncrypted( txt, nLän );
  2664. txt[ nLän ] = 0;
  2665. p.name = new Text( txt );
  2666. delete[] txt;
  2667. int anz2 = 0;
  2668. k->getNachrichtEncrypted( (char*)&anz2, 4 );
  2669. for( int j = 0; j < anz2; j++ )
  2670. {
  2671. Vertex v;
  2672. k->getNachrichtEncrypted( (char*)&v.x, 4 );
  2673. k->getNachrichtEncrypted( (char*)&v.y, 4 );
  2674. *p.schwerpunkt += v * (float)( 1.0 / anz2 );
  2675. Vertex t;
  2676. k->getNachrichtEncrypted( (char*)&t.x, 4 );
  2677. k->getNachrichtEncrypted( (char*)&t.y, 4 );
  2678. p.vertex->add( v );
  2679. p.tKordinaten->add( t );
  2680. }
  2681. pol->add( p );
  2682. zF->aktionPlus();
  2683. }
  2684. Model2DData *data = new Model2DData();
  2685. data->erstelleModell( pol );
  2686. cs.unlock();
  2687. return data;
  2688. }
  2689. }
  2690. }
  2691. }
  2692. }
  2693. if( ret == 3 )
  2694. {
  2695. char byte = 0;
  2696. k->getNachrichtEncrypted( &byte, 1 );
  2697. char *f = new char[ byte + 1 ];
  2698. f[ byte ] = 0;
  2699. k->getNachrichtEncrypted( f, byte );
  2700. err = f;
  2701. delete[] f;
  2702. cs.unlock();
  2703. return 0;
  2704. }
  2705. err = "Unbekannter Fehler";
  2706. cs.unlock();
  2707. return 0;
  2708. }
  2709. // Lädt einen Sound herunter und gibt ihn zurück
  2710. // file: Ein Zeiger auf die GSLDatei, in der der Sound gespeichert werden soll
  2711. // zDatei: Der Name der Sounddatei (ohne erhöhten Reference Counter)
  2712. // zSound: Der Name des Sounds (ohne erhöhten Reference Counter)
  2713. // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
  2714. // Gibt bei misserfolg 0 zurück
  2715. GSL::GSLSoundV *EditorClient::deSoundLaden( GSL::GSLDateiV *file, Framework::Text *zDatei, Framework::Text *zSound, Framework::FBalken *zF )
  2716. {
  2717. file->setDatei( (char*)"data/tmp/editor/dateien/sounds/tmp.gsl" );
  2718. cs.lock();
  2719. if( !k )
  2720. {
  2721. err = "Der Client ist nicht verbunden.";
  2722. cs.unlock();
  2723. file->release();
  2724. return 0;
  2725. }
  2726. k->sendeEncrypted( "\x7", 1 );
  2727. char ret = 0;
  2728. k->getNachrichtEncrypted( &ret, 1 );
  2729. if( ret == 1 )
  2730. {
  2731. k->sendeEncrypted( "\xD", 1 );
  2732. k->getNachrichtEncrypted( &ret, 1 );
  2733. if( ret == 1 )
  2734. {
  2735. k->sendeEncrypted( "\xE", 1 );
  2736. k->getNachrichtEncrypted( &ret, 1 );
  2737. if( ret == 1 )
  2738. {
  2739. char l = (char)zDatei->getLength();
  2740. k->sendeEncrypted( &l, 1 );
  2741. k->sendeEncrypted( zDatei->getText(), l );
  2742. k->getNachrichtEncrypted( &ret, 1 );
  2743. if( ret == 1 )
  2744. {
  2745. l = (char)zSound->getLength();
  2746. k->sendeEncrypted( &l, 1 );
  2747. k->sendeEncrypted( zSound->getText(), l );
  2748. k->getNachrichtEncrypted( &ret, 1 );
  2749. if( ret == 1 )
  2750. {
  2751. DownloadSound dws( k, zF );
  2752. file->speicherSound( &dws, zSound->getText() );
  2753. GSL::GSLSoundV *s = file->getSound( zSound->getText() );
  2754. file->release();
  2755. cs.unlock();
  2756. return s;
  2757. }
  2758. }
  2759. }
  2760. }
  2761. }
  2762. file->release();
  2763. if( ret == 3 )
  2764. {
  2765. char byte = 0;
  2766. k->getNachrichtEncrypted( &byte, 1 );
  2767. char *f = new char[ byte + 1 ];
  2768. f[ byte ] = 0;
  2769. k->getNachrichtEncrypted( f, byte );
  2770. err = f;
  2771. delete[] f;
  2772. cs.unlock();
  2773. return 0;
  2774. }
  2775. err = "Unbekannter Fehler";
  2776. cs.unlock();
  2777. return 0;
  2778. }
  2779. // Speichert ein Model in eine Modeldatei des Datei Editors
  2780. // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
  2781. // zModel: Der Name des Models (ohne erhöhten Reference Counter)
  2782. // zData: Die Daten des Models (ohne erhöhten Reference Counter)
  2783. // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
  2784. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  2785. bool EditorClient::deModelSpeichern( Framework::Text *zDatei, Framework::Text *zModel, Framework::Model2DData *zData, Framework::FBalken *zF )
  2786. {
  2787. cs.lock();
  2788. if( !k )
  2789. {
  2790. err = "Der Client ist nicht verbunden.";
  2791. cs.unlock();
  2792. return 0;
  2793. }
  2794. k->sendeEncrypted( "\x7", 1 );
  2795. char ret = 0;
  2796. k->getNachrichtEncrypted( &ret, 1 );
  2797. if( ret == 1 )
  2798. {
  2799. k->sendeEncrypted( "\xD", 1 );
  2800. k->getNachrichtEncrypted( &ret, 1 );
  2801. if( ret == 1 )
  2802. {
  2803. k->sendeEncrypted( "\xF", 1 );
  2804. k->getNachrichtEncrypted( &ret, 1 );
  2805. if( ret == 1 )
  2806. {
  2807. char l = (char)zDatei->getLength();
  2808. k->sendeEncrypted( &l, 1 );
  2809. k->sendeEncrypted( zDatei->getText(), l );
  2810. k->getNachrichtEncrypted( &ret, 1 );
  2811. if( ret == 1 )
  2812. {
  2813. l = (char)zModel->getLength();
  2814. k->sendeEncrypted( &l, 1 );
  2815. k->sendeEncrypted( zModel->getText(), l );
  2816. k->getNachrichtEncrypted( &ret, 1 );
  2817. if( ret == 1 )
  2818. {
  2819. int anz = zData->polygons ? zData->polygons->getEintragAnzahl() : 0;
  2820. zF->setAktionAnzahl( anz );
  2821. k->sendeEncrypted( (char*)&anz, 4 );
  2822. for( int i = 0; i < anz; i++ )
  2823. {
  2824. Polygon2D pol = zData->polygons->get( i );
  2825. k->sendeEncrypted( (char*)&pol.transparent, 1 );
  2826. char nLän = pol.name->getLength();
  2827. k->sendeEncrypted( &nLän, 1 );
  2828. if( nLän )
  2829. k->sendeEncrypted( pol.name->getText(), nLän );
  2830. int anz2 = pol.vertex->getEintragAnzahl();
  2831. k->sendeEncrypted( (char*)&anz2, 4 );
  2832. for( int j = 0; j < anz2; j++ )
  2833. {
  2834. Vertex v = pol.vertex->get( j );
  2835. Vertex p;
  2836. if( pol.tKordinaten )
  2837. p = pol.tKordinaten->hat( j ) ? pol.tKordinaten->get( j ) : Vertex( 0, 0 );
  2838. k->sendeEncrypted( (char*)&v.x, 4 );
  2839. k->sendeEncrypted( (char*)&v.y, 4 );
  2840. k->sendeEncrypted( (char*)&p.x, 4 );
  2841. k->sendeEncrypted( (char*)&p.y, 4 );
  2842. }
  2843. zF->aktionPlus();
  2844. }
  2845. k->getNachrichtEncrypted( &ret, 1 );
  2846. }
  2847. }
  2848. }
  2849. }
  2850. }
  2851. if( ret == 3 )
  2852. {
  2853. char byte = 0;
  2854. k->getNachrichtEncrypted( &byte, 1 );
  2855. char *f = new char[ byte + 1 ];
  2856. f[ byte ] = 0;
  2857. k->getNachrichtEncrypted( f, byte );
  2858. err = f;
  2859. delete[] f;
  2860. cs.unlock();
  2861. return 0;
  2862. }
  2863. if( ret != 1 )
  2864. err = "Unbekannter Fehler";
  2865. cs.unlock();
  2866. return ret == 1;
  2867. }
  2868. // Speichert einen Sound in einer Sounddatei des Datei Editors
  2869. // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
  2870. // zSound: Der Name des Sounds (ohne erhöhten Reference Counter)
  2871. // zData: Die Daten des Sounts (ohne erhöhten Reference Counter)
  2872. // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
  2873. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  2874. bool EditorClient::deSoundSpeichern( Framework::Text *zDatei, Framework::Text *zSound, GSL::GSLSoundV *zData, Framework::FBalken *zF )
  2875. {
  2876. cs.lock();
  2877. if( !k )
  2878. {
  2879. err = "Der Client ist nicht verbunden.";
  2880. cs.unlock();
  2881. return 0;
  2882. }
  2883. k->sendeEncrypted( "\x7", 1 );
  2884. char ret = 0;
  2885. k->getNachrichtEncrypted( &ret, 1 );
  2886. if( ret == 1 )
  2887. {
  2888. k->sendeEncrypted( "\xD", 1 );
  2889. k->getNachrichtEncrypted( &ret, 1 );
  2890. if( ret == 1 )
  2891. {
  2892. k->sendeEncrypted( "\x10", 1 );
  2893. k->getNachrichtEncrypted( &ret, 1 );
  2894. if( ret == 1 )
  2895. {
  2896. char l = (char)zDatei->getLength();
  2897. k->sendeEncrypted( &l, 1 );
  2898. k->sendeEncrypted( zDatei->getText(), l );
  2899. k->getNachrichtEncrypted( &ret, 1 );
  2900. if( ret == 1 )
  2901. {
  2902. l = (char)zSound->getLength();
  2903. k->sendeEncrypted( &l, 1 );
  2904. k->sendeEncrypted( zSound->getText(), l );
  2905. k->getNachrichtEncrypted( &ret, 1 );
  2906. if( ret == 1 )
  2907. {
  2908. char channels = zData->istMono() ? 1 : 2;
  2909. k->sendeEncrypted( &channels, 1 );
  2910. int sample = zData->getSampleRate();
  2911. k->sendeEncrypted( (char*)&sample, 4 );
  2912. __int64 slän = zData->getDatLength();
  2913. k->sendeEncrypted( (char*)&slän, 8 );
  2914. zF->setAktionAnzahl( slän );
  2915. zData->open();
  2916. char *buffer = new char[ 2048 ];
  2917. while( slän > 0 )
  2918. {
  2919. int l = slän > 2048 ? 2048 : (int)slän;
  2920. zData->getDaten( buffer, l );
  2921. k->sende( buffer, l );
  2922. slän -= l;
  2923. zF->aktionPlus( l );
  2924. }
  2925. delete[] buffer;
  2926. zData->close();
  2927. }
  2928. }
  2929. }
  2930. }
  2931. }
  2932. if( ret == 3 )
  2933. {
  2934. char byte = 0;
  2935. k->getNachrichtEncrypted( &byte, 1 );
  2936. char *f = new char[ byte + 1 ];
  2937. f[ byte ] = 0;
  2938. k->getNachrichtEncrypted( f, byte );
  2939. err = f;
  2940. delete[] f;
  2941. cs.unlock();
  2942. return 0;
  2943. }
  2944. if( ret != 1 )
  2945. err = "Unbekannter Fehler";
  2946. cs.unlock();
  2947. return ret == 1;
  2948. }
  2949. // Lädt die Kauf Statistik der geladenen Karte
  2950. // verkauft: Enthält nach erfolgreichem Aurfuf eine Liste mit den Anzahlen der Käufe der Karte der letzten 30 Tage
  2951. // einkommen: Enthält nach erfolgreichem Aurfuf eine Liste mit den Anzahlen der verdinten Kupfer in den letzten 30 Tagen
  2952. // gespielt: Enthält nach erfolgreichem Aurfuf eine Liste mit den Anzahlen der Spielen der letzten 30 Tage
  2953. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  2954. int EditorClient::getVerkaufStatistik( Framework::Array< int > *verkauft, Framework::Array< int > *einkommen, Framework::Array< int > *gespielt )
  2955. {
  2956. cs.lock();
  2957. if( !k )
  2958. {
  2959. err = "Der Client ist nicht verbunden.";
  2960. cs.unlock();
  2961. return 0;
  2962. }
  2963. k->sendeEncrypted( "\x7", 1 );
  2964. char ret = 0;
  2965. k->getNachrichtEncrypted( &ret, 1 );
  2966. if( ret == 1 )
  2967. {
  2968. k->sendeEncrypted( "\x10", 1 );
  2969. k->getNachrichtEncrypted( &ret, 1 );
  2970. if( ret == 1 )
  2971. {
  2972. int kaufAnz = 0;
  2973. k->getNachrichtEncrypted( (char*)&kaufAnz, 4 );
  2974. char anz = 0;
  2975. k->getNachrichtEncrypted( &anz, 1 );
  2976. for( int i = 0; i < anz; i++ )
  2977. {
  2978. int kupfer = 0;
  2979. int kauf = 0;
  2980. int games = 0;
  2981. k->getNachrichtEncrypted( (char*)&kupfer, 4 );
  2982. k->getNachrichtEncrypted( (char*)&kauf, 4 );
  2983. k->getNachrichtEncrypted( (char*)&games, 4 );
  2984. einkommen->add( kupfer );
  2985. verkauft->add( kauf );
  2986. gespielt->add( games );
  2987. }
  2988. cs.unlock();
  2989. return kaufAnz;
  2990. }
  2991. }
  2992. if( ret == 3 )
  2993. {
  2994. char byte = 0;
  2995. k->getNachrichtEncrypted( &byte, 1 );
  2996. char *f = new char[ byte + 1 ];
  2997. f[ byte ] = 0;
  2998. k->getNachrichtEncrypted( f, byte );
  2999. err = f;
  3000. delete[] f;
  3001. cs.unlock();
  3002. return 0;
  3003. }
  3004. err = "Unbekannter Fehler";
  3005. cs.unlock();
  3006. return 0;
  3007. }
  3008. // Startet den Editor Modus, welcher für jedes Spiel unterschiedlich funktioniert
  3009. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  3010. bool EditorClient::initEditor()
  3011. {
  3012. cs.lock();
  3013. if( !k )
  3014. {
  3015. err = "Der Client ist nicht verbunden.";
  3016. cs.unlock();
  3017. return 0;
  3018. }
  3019. k->sendeEncrypted( "\x7", 1 );
  3020. char ret = 0;
  3021. k->getNachrichtEncrypted( &ret, 1 );
  3022. if( ret == 1 )
  3023. {
  3024. k->sendeEncrypted( "\xE", 1 );
  3025. k->getNachrichtEncrypted( &ret, 1 );
  3026. }
  3027. if( ret == 3 )
  3028. {
  3029. char byte = 0;
  3030. k->getNachrichtEncrypted( &byte, 1 );
  3031. char *f = new char[ byte + 1 ];
  3032. f[ byte ] = 0;
  3033. k->getNachrichtEncrypted( f, byte );
  3034. err = f;
  3035. delete[] f;
  3036. cs.unlock();
  3037. return 0;
  3038. }
  3039. if( ret != 1 )
  3040. err = "Unbekannter Fehler";
  3041. cs.unlock();
  3042. return ret == 1;
  3043. }
  3044. // Erhält die Verbindung aufrecht
  3045. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  3046. // Sollte während einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
  3047. bool EditorClient::keepAlive()
  3048. {
  3049. if( !cs.tryLock() )
  3050. return 1;
  3051. if( !k )
  3052. {
  3053. err = "Der Client ist nicht verbunden.";
  3054. cs.unlock();
  3055. return 0;
  3056. }
  3057. char res = 0;
  3058. bool ok = k->sendeEncrypted( "\x5", 1 );
  3059. ok &= k->getNachrichtEncrypted( &res, 1 );
  3060. cs.unlock();
  3061. if( res != 1 || !ok )
  3062. trenne( 0 );
  3063. if( res != 1 )
  3064. err = "Unbekannter Fehler";
  3065. return res == 1;
  3066. }
  3067. // Trennt die Verbindung zum Server
  3068. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  3069. // Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
  3070. bool EditorClient::trenne( bool abmelden )
  3071. {
  3072. cs.lock();
  3073. verbinde();
  3074. if( !k )
  3075. {
  3076. cs.unlock();
  3077. return 1;
  3078. }
  3079. if( abmelden )
  3080. {
  3081. k->sendeEncrypted( "\4", 1 );
  3082. char ret = 0;
  3083. k->getNachrichtEncrypted( &ret, 1 );
  3084. if( ret == 3 )
  3085. { // error
  3086. k->getNachrichtEncrypted( &ret, 1 );
  3087. char *msg = new char[ ret + 1 ];
  3088. msg[ ret ] = 0;
  3089. if( ret )
  3090. k->getNachrichtEncrypted( msg, ret );
  3091. err = "error while unregister Client Editor Server returned: ";
  3092. err += msg;
  3093. delete[] msg;
  3094. }
  3095. }
  3096. k->sendeEncrypted( "\3", 1 );
  3097. char ret = 0;
  3098. k->getNachrichtEncrypted( &ret, 1 );
  3099. if( ret == 3 )
  3100. { // error
  3101. k->getNachrichtEncrypted( &ret, 1 );
  3102. char *msg = new char[ ret + 1 ];
  3103. msg[ ret ] = 0;
  3104. if( ret )
  3105. k->getNachrichtEncrypted( msg, ret );
  3106. err = "error while trenne Editor Server returned: ";
  3107. err += msg;
  3108. delete[] msg;
  3109. }
  3110. k->trenne();
  3111. k = k->release();
  3112. cs.unlock();
  3113. return 1;
  3114. }
  3115. // Gibt 1 zurück, falls der Client verbunden ist, 0 sonst
  3116. bool EditorClient::istVerbunden() const
  3117. {
  3118. return k != 0;
  3119. }
  3120. // gibt den Letzten Fehlertext zuück
  3121. // sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
  3122. char *EditorClient::getLetzterFehler() const
  3123. {
  3124. return err;
  3125. }
  3126. // Erhöht den Reference Counter um 1 un gibt this zurück
  3127. EditorServerClient *EditorClient::getThis()
  3128. {
  3129. ref++;
  3130. return this;
  3131. }
  3132. // Verringert den Reference Counter um 1 und gibt 0 zurück.
  3133. // Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst
  3134. EditorServerClient *EditorClient::release()
  3135. {
  3136. if( !--ref )
  3137. delete this;
  3138. return 0;
  3139. }