EditorK.cpp 84 KB

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