EditorClient.cpp 95 KB

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