EditorClient.cpp 96 KB

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