123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270 |
- #include "EditorClient.h"
- #include <Klient.h>
- #include "Keys.h"
- #include <Datei.h>
- #include <Zeit.h>
- #include <Bild.h>
- #include <Fortschritt.h>
- #include <Model2D.h>
- #include <GSLDateiV.h>
- using namespace KSGClient;
- class DownloadSound : public GSL::GSLSoundV
- {
- private:
- bool istM;
- int sample;
- __int64 län;
- Network::Klient* k;
- FBalken* f;
- public:
- // Konstruktor
- DownloadSound(Network::Klient* zK, FBalken* zF)
- : Thread()
- {
- k = zK;
- f = zF;
- }
- // nicht constant
- // GSL
- void playSound() override
- {}
- void setPause(bool p) override
- {}
- void stopSound() override
- {}
- void warteAufSound(int zeit) override
- {}
- // Lautstärke: 0 - 0xFFFF
- void setVolume(unsigned int links, unsigned int rechts) override
- {}
- // zum Speichern
- void open() override
- {
- char m = 0;
- k->getNachrichtEncrypted(&m, 1);
- istM = (m == 1);
- sample = 0;
- k->getNachrichtEncrypted((char*)&sample, 4);
- län = 0;
- k->getNachrichtEncrypted((char*)&län, 8);
- if (f)
- f->setAktionAnzahl(län);
- }
- int getDaten(char* buffer, int län) override
- {
- int l = län < this->län ? län : (int)this->län;
- if (!l)
- return -1;
- k->getNachricht(buffer, l);
- this->län -= l;
- if (f)
- f->aktionPlus(l);
- return l;
- }
- void close() override
- {}
- bool istMono() const override
- {
- return istM;
- }
- int getSampleRate() const override
- {
- return sample;
- }
- __int64 getDatLength() const override
- {
- return län;
- }
- };
- // Inhalt der KSGClient Klasse
- // Konstruktor
- EditorClient::EditorClient(int kId, unsigned short port, const char* ip, const char* key, unsigned char keyLen)
- : ReferenceCounter()
- {
- this->ip = ip;
- this->port = port;
- cId = kId;
- k = 0;
- this->key = new char[keyLen];
- memcpy(this->key, key, keyLen);
- this->keyLen = keyLen;
- }
- // Destruktor
- EditorClient::~EditorClient()
- {
- trenne(1);
- delete[] key;
- }
- // verbindet sich mit dem zugewiesenen Editor Server
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::verbinde()
- {
- cs.lock();
- if (k)
- {
- cs.unlock();
- return 1;
- }
- k = new Network::Klient();
- int l = 0;
- char* key;
- Keys::getServerKey(&key, l, Keys::EDITOR, Keys::SENDEN);
- k->setSendeKey(key, l);
- delete[] key;
- Keys::getServerKey(&key, l, Keys::EDITOR, Keys::EMPFANGEN);
- k->setEmpfangKey(key, l);
- delete[] key;
- if (k->verbinde(port, ip))
- {
- if (k->sendeEncrypted("\1", 1))
- {
- k->sendeEncrypted((char*)&cId, 4);
- char serverReturn = 0;
- k->getNachrichtEncrypted(&serverReturn, 1);
- if (serverReturn == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = "error while identifying client Editor Server returned: ";
- err += f;
- delete[]f;
- trenne(0);
- cs.unlock();
- return 0;
- }
- k->setSendeKey(this->key, this->keyLen);
- k->setEmpfangKey(this->key, this->keyLen);
- }
- else
- {
- err = "network error while sending to Editor Server";
- k = (Network::Klient*)k->release();
- cs.unlock();
- return 0;
- }
- }
- else
- {
- err = "network error while connecting to Editor Server";
- k = (Network::Klient*)k->release();
- cs.unlock();
- return 0;
- }
- cs.unlock();
- return 1;
- }
- // Erstellt eine neue Karte
- // name: Der Name der Karte
- // spielArt: Die Id des Spiels
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::karteErstellen(const char* name, int spielArt)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\xA", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(name);
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(name, l);
- k->sendeEncrypted((char*)&spielArt, 4);
- k->getNachrichtEncrypted(&ret, 1);
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // lädt eine bestimmte Karte
- // id: Die Id der Karte
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ladeKarte(int id)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x6", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted((char*)&id, 4);
- k->getNachrichtEncrypted(&ret, 1);
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- cs.unlock();
- return 1;
- }
- // gibt eine Liste mit Abbildern der geladenen Karte zurück
- // name: Enthält nach erfolgreichem Aufruf eine Liste mit Namen der Abbilder
- // datum: Enthält nach erfolgreichem Aufruf eine Liste mit dem Datum der Erstellung für jedes Abbild
- // Gibt die Anzahl der Abbilder zurück
- int EditorClient::getAbbildListe(Framework::RCArray< Framework::Text >* name, Framework::RCArray< Framework::Zeit >* datum)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x5", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = 0;
- k->getNachrichtEncrypted((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- char l = 0;
- k->getNachrichtEncrypted(&l, 1);
- char* n = new char[l + 1];
- n[l] = 0;
- k->getNachrichtEncrypted(n, l);
- name->set(new Text(n), i);
- delete[] n;
- Zeit* dat = new Zeit();
- int d = 0;
- k->getNachrichtEncrypted((char*)&d, 4);
- dat->setJahr(d);
- k->getNachrichtEncrypted((char*)&d, 4);
- dat->setMonat(d);
- k->getNachrichtEncrypted((char*)&d, 4);
- dat->setTag(d);
- k->getNachrichtEncrypted((char*)&d, 4);
- dat->setStunde(d);
- k->getNachrichtEncrypted((char*)&d, 4);
- dat->setMinute(d);
- k->getNachrichtEncrypted((char*)&d, 4);
- dat->setSekunde(d);
- datum->set(dat, i);
- }
- cs.unlock();
- return anz;
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Erstellt ein neues Abbild der geladenen Karte
- // name: Der Name des Abbildes
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::abbildErstellen(const char* name)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x1", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(name);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(name, l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- cs.unlock();
- return 1;
- }
- // Löscht ein altes Abbild der geladenen Karte
- // name: Der Name des Abbildes
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::abbildLöschen(const char* name)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x2", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(name);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(name, l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- cs.unlock();
- return 1;
- }
- // Stellt ein altes Abbild der geladenen Karte wieder her
- // name: Der Name des Abbildes
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::abbildHerstellen(const char* name)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x3", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(name);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(name, l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- cs.unlock();
- return 1;
- }
- // Verüffentlich eine neue Version der geladenen Karte
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::veröffentlichen()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x4", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- k->getNachrichtEncrypted(&ret, 1);
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Veröffentlich eine neue Version der Shop Seite der geladenen Karte
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::shopSeiteVeröffentlichen()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x6", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- k->getNachrichtEncrypted(&ret, 1);
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Läht die Vorschau der Shop Seite der geladenen Karte herrunter und speichert sie unter data/tmp/ke/ssv
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ladeShopSeiteVorschau()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x8", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = 0;
- k->getNachrichtEncrypted((char*)&anz, 4);
- Text pf = "data/tmp/ke/ssv";
- for (int i = 0; i < anz; i++)
- {
- char l = 0;
- k->getNachrichtEncrypted(&l, 1);
- char* pfad = new char[l + 1];
- pfad[l] = 0;
- k->getNachrichtEncrypted(pfad, l);
- Text p = pf.getText();
- p += pfad;
- delete[] pfad;
- Datei d;
- d.setDatei(p);
- d.erstellen();
- d.open(Datei::Style::schreiben);
- __int64 größe = 0;
- k->getNachrichtEncrypted((char*)&größe, 8);
- char* buffer = new char[2048];
- while (größe > 0)
- {
- int l = größe > 2048 ? 2048 : (int)größe;
- k->getNachricht(buffer, l);
- d.schreibe(buffer, l);
- größe -= l;
- }
- delete[] buffer;
- d.close();
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Erstellt eine neue Shop Seiten Datei
- // name: Der Name der Datei
- // typ: 0=Ordner, 1=Bild, 2=Text
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ssDateiErstellen(const char* name, int typ)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x1", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char t = typ;
- k->sendeEncrypted(&t, 1);
- char l = (char)textLength(name);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(name, l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Öffnet einen Ordner der Shop Seite
- // name: Der Name des Ordners
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ssOrdnerÖffnen(const char* name)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x2", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(name);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(name, l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Lädt das ein Bild der Shop Seite und gibt es zurück
- // datei: Der Name der Bilddatei
- // bild: Der Name des Bildes
- // Gibt bei misserfolg 0 zurück
- Framework::Bild* EditorClient::ssBildLaden(const char* datei, const char* bild)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x3", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(datei);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(datei, l);
- l = (char)textLength(bild);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(bild, l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- Bild* ret = new Bild();
- int br = 0;
- int hö = 0;
- k->getNachrichtEncrypted((char*)&br, 4);
- k->getNachrichtEncrypted((char*)&hö, 4);
- ret->neuBild(br, hö, 0);
- char* buffer = (char*)ret->getBuffer();
- __int64 län = br * hö * 4;
- for (int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län)
- {
- k->getNachricht(&(buffer[i]), l);
- i += l;
- län -= l;
- }
- cs.unlock();
- return ret;
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Löscht eine Datei der Shop Seite
- // name: Der Name der Datei
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ssDateiLöschen(const char* name)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x4", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(name);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(name, l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Läd eine KSGS Datei der Shop Seite und gibt den Quellcode zurück
- // datei: Der Name der Datei
- // Gibt bei misserfolg 0 zurück
- Framework::Text* EditorClient::ssTextLaden(const char* datei)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xA", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(datei);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(datei, l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int län = 0;
- k->getNachrichtEncrypted((char*)&län, 4);
- char* txt = new char[län + 1];
- txt[län] = 0;
- 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)
- k->getNachricht(&(txt[i]), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- Text* t = new Text(txt);
- delete[] txt;
- cs.unlock();
- return t;
- }
- delete[] txt;
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Spechert eine KSGS Datei der Shop Seite
- // datei: Der Name der Datei
- // zText: Ein Zeiger auf den neuen Quellcode (ohne erhöhten Reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ssTextSpeichern(const char* datei, Framework::Text* zText)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x5", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(datei);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(datei, l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int län = zText->getLength();
- k->sendeEncrypted((char*)&län, 4);
- 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)
- k->sende(&(zText->getText()[i]), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Löscht ein Bild der Shop Seite
- // datei: Der Name der Bilddatei
- // bild: Der Name des Bildes
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ssBildLöschen(const char* datei, const char* bild)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x6", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(datei);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(datei, l);
- l = (char)textLength(bild);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(bild, l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Speichert ein Bild einer ShopSeite
- // datei: Der name der Bilddatei
- // name: Der Name des Bildes
- // zBild: Ein Zeiger auf das Bild (ohne erhöhten Reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ssBildSpeichern(const char* datei, const char* name, Framework::Bild* zBild)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(datei);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(datei, l);
- l = (char)textLength(name);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(name, l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int br = zBild->getBreite();
- int hö = zBild->getHeight();
- k->sendeEncrypted((char*)&br, 4);
- k->sendeEncrypted((char*)&hö, 4);
- __int64 län = br * hö * 4;
- char* buffer = (char*)zBild->getBuffer();
- 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)
- k->sende(&(buffer[i]), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Lädt eine Liste mit Dateien von der Shop Seite
- // zList: Enthält nach erfolgreichem Aufruf die Liste mit Dateinamen
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- int EditorClient::ssGetDateiListe(Framework::RCArray< Framework::Text >* zList)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x8", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = 0;
- k->getNachrichtEncrypted((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- char l = 0;
- k->getNachrichtEncrypted(&l, 1);
- char* n = new char[l + 1];
- n[l] = 0;
- k->getNachrichtEncrypted(n, l);
- zList->add(new Text(n));
- delete[] n;
- }
- cs.unlock();
- return anz;
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return -1;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Lädt die Bild Liste einer Bild Datei der Shop Seite
- // name: Der Name der Bilddatei
- // zList: Enthält nach erfolgreichem Aufruf eine Liste mit Bildnamen
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- int EditorClient::ssGetBildListe(const char* name, Framework::RCArray< Framework::Text >* zList)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x9", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)textLength(name);
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(name, l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = 0;
- k->getNachrichtEncrypted((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- l = 0;
- k->getNachrichtEncrypted(&l, 1);
- char* n = new char[l + 1];
- n[l] = 0;
- k->getNachrichtEncrypted(n, l);
- zList->add(new Text(n));
- delete[] n;
- }
- cs.unlock();
- return anz;
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return -1;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Lädt die Shop Daten
- // es: Enthält nach erfolgreichem aufruf den Erwerbbarkeits Status (0 = nichts, 1 = nur Testversion, 2 = nur Vollversion, 3 = beides)
- // tp: Enthält nach erfolgreichem Aufruf den Preis der Testversion in Kupfer
- // vp: Enthält nach erfolgreichem Aufruf den Preis der Vollversion in Kupfer
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::getShopDaten(int& es, int& tp, int& vp)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x9", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->getNachrichtEncrypted((char*)&es, 4);
- k->getNachrichtEncrypted((char*)&tp, 4);
- k->getNachrichtEncrypted((char*)&vp, 4);
- cs.unlock();
- return 1;
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Setzt die Shop Daten
- // es: der Erwerbbarkeits Status (0 = nichts, 1 = nur Testversion, 2 = nur Vollversion, 3 = beides)
- // tp: der Preis der Testversion in Kupfer
- // vp: der Preis der Vollversion in Kupfer
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::setShopDaten(int es, int tp, int vp)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xA", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted((char*)&es, 4);
- k->sendeEncrypted((char*)&tp, 4);
- k->sendeEncrypted((char*)&vp, 4);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- cs.unlock();
- return 1;
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // gibt die Kartenbeschreibung als KSGScript Quellcode zurück
- // Gibt bei misserfolg 0 zurück
- Framework::Text* EditorClient::beschreibungLaden()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xB", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x1", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int län = 0;
- k->getNachrichtEncrypted((char*)&län, 4);
- char* txt = new char[län + 1];
- txt[län] = 0;
- 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)
- k->getNachricht(&(txt[i]), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- Text* t = new Text(txt);
- delete[] txt;
- cs.unlock();
- return t;
- }
- delete[] txt;
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // gibt das Titelbild der Karte zurück
- // Gibt bei misserfolg 0 zurück
- Framework::Bild* EditorClient::titelbildLaden()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xB", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x2", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- Bild* ret = new Bild();
- int br = 0;
- int hö = 0;
- k->getNachrichtEncrypted((char*)&br, 4);
- k->getNachrichtEncrypted((char*)&hö, 4);
- ret->neuBild(br, hö, 0);
- char* buffer = (char*)ret->getBuffer();
- __int64 län = br * hö * 4;
- for (int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län)
- {
- k->getNachricht(&(buffer[i]), l);
- i += l;
- län -= l;
- }
- cs.unlock();
- return ret;
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // gibt das Minimap Bild der Karte zurück
- // Gibt bei misserfolg 0 zurück
- Framework::Bild* EditorClient::minimapLaden()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xB", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x3", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- Bild* ret = new Bild();
- int br = 0;
- int hö = 0;
- k->getNachrichtEncrypted((char*)&br, 4);
- k->getNachrichtEncrypted((char*)&hö, 4);
- ret->neuBild(br, hö, 0);
- char* buffer = (char*)ret->getBuffer();
- __int64 län = br * hö * 4;
- for (int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län)
- {
- k->getNachricht(&(buffer[i]), l);
- i += l;
- län -= l;
- }
- cs.unlock();
- return ret;
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // gibt das Ladebild der Karte zurück
- // Gibt bei misserfolg 0 zurück
- Framework::Bild* EditorClient::ladebildLaden()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xB", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x4", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- Bild* ret = new Bild();
- int br = 0;
- int hö = 0;
- k->getNachrichtEncrypted((char*)&br, 4);
- k->getNachrichtEncrypted((char*)&hö, 4);
- ret->neuBild(br, hö, 0);
- char* buffer = (char*)ret->getBuffer();
- __int64 län = br * hö * 4;
- for (int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län)
- {
- k->getNachricht(&(buffer[i]), l);
- i += l;
- län -= l;
- }
- cs.unlock();
- return ret;
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // speichert den KSGScript Quellcode der Kartenbeschreibung
- // zText: Der KSGScript Quellcode (ohne erhöhten reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::beschreibungSpeichern(Framework::Text* zText)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xB", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x5", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int län = zText->getLength();
- k->sendeEncrypted((char*)&län, 4);
- 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)
- k->sende(&(zText->getText()[i]), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // speichert das Titelbild der Karte
- // zBild: das neue Titelbild
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::titelbildSpeichern(Framework::Bild* zBild)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xB", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x6", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int br = zBild->getBreite();
- int hö = zBild->getHeight();
- k->sendeEncrypted((char*)&br, 4);
- k->sendeEncrypted((char*)&hö, 4);
- __int64 län = br * hö * 4;
- char* buffer = (char*)zBild->getBuffer();
- 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)
- k->sende(&(buffer[i]), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // speichert das Minimapbild der Karte
- // zBild: das neue Minimapbild
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::minimapSpeichern(Framework::Bild* zBild)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xB", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int br = zBild->getBreite();
- int hö = zBild->getHeight();
- k->sendeEncrypted((char*)&br, 4);
- k->sendeEncrypted((char*)&hö, 4);
- __int64 län = br * hö * 4;
- char* buffer = (char*)zBild->getBuffer();
- 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)
- k->sende(&(buffer[i]), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // speichert das Ladebild der Karte
- // zBild: das neue Ladebild
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ladebildSpeichern(Framework::Bild* zBild)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xB", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x8", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int br = zBild->getBreite();
- int hö = zBild->getHeight();
- k->sendeEncrypted((char*)&br, 4);
- k->sendeEncrypted((char*)&hö, 4);
- __int64 län = br * hö * 4;
- char* buffer = (char*)zBild->getBuffer();
- 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)
- k->sende(&(buffer[i]), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // lädt die Spieler Team Daten der Karte
- // sts: Enthält nach erfolgreichem Aufruf die Spieler Team Daten
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::ladeTeamDaten(SpielerTeamStrukturV* sts)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xC", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x1", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->getNachrichtEncrypted((char*)&sts->spielerAnzahl, 4);
- k->getNachrichtEncrypted((char*)&sts->teamAnzahl, 4);
- for (int i = 0; i < sts->spielerAnzahl; i++)
- {
- int f = 0;
- k->getNachrichtEncrypted((char*)&f, 4);
- sts->spielerFarbe->set(f, i);
- }
- for (int i = 0; i < sts->teamAnzahl; i++)
- {
- int f = 0;
- k->getNachrichtEncrypted((char*)&f, 4);
- sts->teamFarbe->set(f, i);
- }
- for (int i = 0; i < sts->teamAnzahl; i++)
- {
- char l = 0;
- k->getNachrichtEncrypted(&l, 1);
- char* n = new char[l + 1];
- n[l] = 0;
- k->getNachrichtEncrypted(n, l);
- sts->teamName->set(new Text(n), i);
- delete[] n;
- }
- for (int i = 0; i < sts->teamAnzahl; i++)
- {
- int g = 0;
- k->getNachrichtEncrypted((char*)&g, 4);
- sts->teamSize->set(g, i);
- }
- cs.unlock();
- return 1;
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // speichert die Team Daten
- // sts: die neuen Spieler Team Daten
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::speicherTeamDaten(SpielerTeamStrukturV* sts)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xC", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x2", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted((char*)&sts->spielerAnzahl, 4);
- k->sendeEncrypted((char*)&sts->teamAnzahl, 4);
- for (int i = 0; i < sts->spielerAnzahl; i++)
- {
- int f = sts->spielerFarbe->get(i);
- k->sendeEncrypted((char*)&f, 4);
- }
- for (int i = 0; i < sts->teamAnzahl; i++)
- {
- int f = sts->teamFarbe->get(i);
- k->sendeEncrypted((char*)&f, 4);
- }
- for (int i = 0; i < sts->teamAnzahl; i++)
- {
- char l = (char)sts->teamName->z(i)->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(sts->teamName->z(i)->getText(), l);
- }
- for (int i = 0; i < sts->teamAnzahl; i++)
- {
- int g = sts->teamSize->get(i);
- k->sendeEncrypted((char*)&g, 4);
- }
- cs.unlock();
- return 1;
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Erstellt neue Datei im Datei Editor
- // typ: 0=ordner 1=bild 2=modell2d 3=sound
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::deNeueDatei(char typ, Framework::Text* zName)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x1", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted(&typ, 1);
- char l = (char)zName->getLength();
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(zName->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Öffnet Ordner im Datei Editor
- // zName: Der Name des Ordners
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::deOrdnerÖffnen(Framework::Text* zName)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x2", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char län = (char)zName->getLength();
- k->sendeEncrypted(&län, 1);
- if (län)
- k->sendeEncrypted(zName->getText(), län);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Gibt ein Bild aus dem Datei Editor zurück
- // zDatei: Der Name der Datei (ohne erhöhten Reference Counter)
- // zBild: Der Name des Bildes (ohne erhöhten Reference Counter)
- // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
- // Gibt bei misserfolg 0 zurück
- Framework::Bild* EditorClient::deBildLaden(Framework::Text* zDatei, Framework::Text* zBild, Framework::FBalken* zF)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- Bild* retB = 0;
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x3", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char län = (char)zDatei->getLength();
- k->sendeEncrypted(&län, 1);
- if (län)
- k->sendeEncrypted(zDatei->getText(), län);
- län = (char)zBild->getLength();
- k->sendeEncrypted(&län, 1);
- if (län)
- k->sendeEncrypted(zBild->getText(), län);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int br = 0;
- int hö = 0;
- k->getNachrichtEncrypted((char*)&br, 4);
- k->getNachrichtEncrypted((char*)&hö, 4);
- retB = new Bild();
- retB->neuBild(br, hö, 0);
- char* buffer = (char*)retB->getBuffer();
- __int64 län = br * hö * 4;
- if (zF)
- zF->setAktionAnzahl(län);
- for (int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län)
- {
- k->getNachricht(&(buffer[i]), l);
- i += l;
- län -= l;
- if (zF)
- zF->aktionPlus(l);
- }
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- cs.unlock();
- if (!ret && retB)
- retB = (Bild*)retB->release();
- if (!retB)
- err = "Unbekannter Fehler";
- return retB;
- }
- // Löscht eine Datei aus dem Datei Editor
- // zName: Der Name der Datei
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::deDateiLöschen(Framework::Text* zName)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x4", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char län = (char)zName->getLength();
- k->sendeEncrypted(&län, 1);
- if (län)
- k->sendeEncrypted(zName->getText(), län);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Löscht Bild aus Datei im Datei Editor
- // zDatei: Der Name der Bilddatei (ohne erhöhten Reference Counter)
- // zBild: Der Name des Bildes (ohne erhöhten Reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::deBildLöschen(Framework::Text* zDatei, Framework::Text* zBild)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x5", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(zDatei->getText(), l);
- l = (char)zBild->getLength();
- k->sendeEncrypted(&l, 1);
- if (l)
- k->sendeEncrypted(zBild->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Speichert Bild in Datei im Datei Editor
- // zDatei: Der Name der Bilddatei (ohne erhöhten Reference Counter)
- // zName: Der Name des Bildes (ohne erhöhten Reference Counter)
- // zBild: Das neue Bild (ohne erhöhten Reference Counter)
- // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::deBildSpeichern(Framework::Text* zDatei, Framework::Text* zName, Framework::Bild* zBild, Framework::FBalken* zF)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x6", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char län = (char)zDatei->getLength();
- k->sendeEncrypted(&län, 1);
- if (län)
- k->sendeEncrypted(zDatei->getText(), län);
- län = (char)zName->getLength();
- k->sendeEncrypted(&län, 1);
- if (län)
- k->sendeEncrypted(zName->getText(), län);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int br = zBild->getBreite();
- int hö = zBild->getHeight();
- k->sendeEncrypted((char*)&br, 4);
- k->sendeEncrypted((char*)&hö, 4);
- char* buffer = (char*)zBild->getBuffer();
- __int64 gr = br * hö * 4;
- if (zF)
- zF->setAktionAnzahl(gr);
- for (int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr)
- {
- k->sende(&(buffer[i]), l);
- if (zF)
- zF->aktionPlus(l);
- }
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Lädt eine Liste mit Dateien im aktuellen Ordner des Datei Editors
- // zNamen: Enthält nach erfolgreichem Aufruf eine Liste mit Dateinamen (ohne erhöhten Reference Counter)
- // Gibt die Anzahl der Dateien zurück
- int EditorClient::deGetDateiListe(Framework::RCArray< Framework::Text >* zNamen)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x7", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = 0;
- k->getNachrichtEncrypted((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- char l = 0;
- k->getNachrichtEncrypted(&l, 1);
- char* n = new char[l + 1];
- n[l] = 0;
- if (l)
- k->getNachrichtEncrypted(n, l);
- zNamen->add(new Text(n));
- delete[] n;
- }
- cs.unlock();
- return anz;
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return -1;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Lädt eine Liste mit Bildern aus einer Bilddatei des Datei Editors
- // zNamen: Enthält nach erfolgreichem Aufruf eine Liste mit den Bildnamen (ohne erhöhten Reference Counter)
- // Gibt die Anzahl der Bilder zurück
- int EditorClient::deGetBildListe(Framework::Text* zDatei, Framework::RCArray< Framework::Text >* zNamen)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x8", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zDatei->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = 0;
- k->getNachrichtEncrypted((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- k->getNachrichtEncrypted(&l, 1);
- char* n = new char[l + 1];
- n[l] = 0;
- if (l)
- k->getNachrichtEncrypted(n, l);
- zNamen->add(new Text(n));
- delete[] n;
- }
- cs.unlock();
- return anz;
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Lädt eine Liste mit 2D Modellen aus einer Modeldatei im Datei Editor
- // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
- // zNamen: Enthält nach erfolgreichem Aufruf eine Liste mit den Modelnamen (ohne erhöhten Reference Counter)
- // Gibt die Anzahl der Modelle zurück
- int EditorClient::deGetModelListe(Framework::Text* zDatei, Framework::RCArray< Framework::Text >* zNamen)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x9", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zDatei->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = 0;
- k->getNachrichtEncrypted((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- k->getNachrichtEncrypted(&l, 1);
- char* n = new char[l + 1];
- n[l] = 0;
- if (l)
- k->getNachrichtEncrypted(n, l);
- zNamen->add(new Text(n));
- delete[] n;
- }
- cs.unlock();
- return anz;
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Lädt eine Liste mit Sounds aus einer Sounddatei im Datei Editor
- // zDatei: Der Name der Sounddatei (ohne erhöhten Reference Counter)
- // zNamen: Enthält nach erfolgreichem Aufruf eine Liste mit den Soundnamen (ohne erhöhten Reference Counter)
- // Gibt die Anzahl der Sounds zurück
- int EditorClient::deGetSoundListe(Framework::Text* zDatei, Framework::RCArray< Framework::Text >* zNamen)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xA", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zDatei->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = 0;
- k->getNachrichtEncrypted((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- k->getNachrichtEncrypted(&l, 1);
- char* n = new char[l + 1];
- n[l] = 0;
- if (l)
- k->getNachrichtEncrypted(n, l);
- zNamen->add(new Text(n));
- delete[] n;
- }
- cs.unlock();
- return anz;
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Löscht ein Model aus einer Modeldatei des Datei Editors
- // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
- // zModel: Der Name des Models (ohne erhöhten Reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::deModelLöschen(Framework::Text* zDatei, Framework::Text* zModel)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xB", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zDatei->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- l = (char)zModel->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zModel->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Löscht einen Sound aus einer Sounddatei des Datei Editors
- // zDatei: Der Name der Sounddatei (ohne erhöhten Reference Counter)
- // zSound: Der Name des Sounds (ohne erhöhten Reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::deSoundLöschen(Framework::Text* zDatei, Framework::Text* zSound)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xC", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zDatei->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- l = (char)zSound->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zSound->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Setzt das arbeitsverzeichnis auf den obersten ordner
- bool EditorClient::deResetPath()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x11", 1);
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Lädt ein Model aus einer Modeldatei des Datei Editors
- // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
- // zModel: Enthält nach erfolgreichem Aufruf das Model (ohne erhöhten Reference Counter)
- // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- Framework::Model2DData* EditorClient::deModelLaden(Framework::Text* zDatei, Framework::Text* zModel, Framework::FBalken* zF)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zDatei->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- l = (char)zModel->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zModel->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = 0;
- k->getNachrichtEncrypted((char*)&anz, 4);
- if (zF)
- zF->setAktionAnzahl(anz);
- Array< Polygon2D >* pol = new Array< Polygon2D >();
- for (int i = 0; i < anz; i++)
- {
- Polygon2D p;
- p.schwerpunkt = new Vertex(0, 0);
- p.vertex = new Array< Vertex >();
- p.tKordinaten = new Array< Vertex >();
- k->getNachrichtEncrypted((char*)&p.transparent, 1);
- char nLän = 0;
- k->getNachrichtEncrypted(&nLän, 1);
- char* txt = new char[nLän + 1];
- if (nLän)
- k->getNachrichtEncrypted(txt, nLän);
- txt[nLän] = 0;
- p.name = new Text(txt);
- delete[] txt;
- int anz2 = 0;
- k->getNachrichtEncrypted((char*)&anz2, 4);
- for (int j = 0; j < anz2; j++)
- {
- Vertex v;
- k->getNachrichtEncrypted((char*)&v.x, 4);
- k->getNachrichtEncrypted((char*)&v.y, 4);
- *p.schwerpunkt += v * (float)(1.0 / anz2);
- Vertex t;
- k->getNachrichtEncrypted((char*)&t.x, 4);
- k->getNachrichtEncrypted((char*)&t.y, 4);
- p.vertex->add(v);
- p.tKordinaten->add(t);
- }
- pol->add(p);
- if (zF)
- zF->aktionPlus();
- }
- Model2DData* data = new Model2DData();
- data->erstelleModell(pol);
- cs.unlock();
- return data;
- }
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Lädt einen Sound herunter und gibt ihn zurück
- // file: Ein Zeiger auf die GSLDatei, in der der Sound gespeichert werden soll
- // zDatei: Der Name der Sounddatei (ohne erhöhten Reference Counter)
- // zSound: Der Name des Sounds (ohne erhöhten Reference Counter)
- // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
- // Gibt bei misserfolg 0 zurück
- GSL::GSLSoundV* EditorClient::deSoundLaden(GSL::GSLDateiV* file, Framework::Text* zDatei, Framework::Text* zSound, Framework::FBalken* zF)
- {
- file->setDatei((char*)"data/tmp/editor/dateien/sounds/tmp.gsl");
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- file->release();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xE", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zDatei->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- l = (char)zSound->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zSound->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- DownloadSound dws(k, zF);
- file->speicherSound(&dws, zSound->getText());
- GSL::GSLSoundV* s = file->getSound(zSound->getText());
- file->release();
- cs.unlock();
- return s;
- }
- }
- }
- }
- }
- file->release();
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Speichert ein Model in eine Modeldatei des Datei Editors
- // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
- // zModel: Der Name des Models (ohne erhöhten Reference Counter)
- // zData: Die Daten des Models (ohne erhöhten Reference Counter)
- // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::deModelSpeichern(Framework::Text* zDatei, Framework::Text* zModel, Framework::Model2DData* zData, Framework::FBalken* zF)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xF", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zDatei->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- l = (char)zModel->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zModel->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int anz = zData->polygons ? zData->polygons->getEintragAnzahl() : 0;
- if (zF)
- zF->setAktionAnzahl(anz);
- k->sendeEncrypted((char*)&anz, 4);
- for (int i = 0; i < anz; i++)
- {
- Polygon2D pol = zData->polygons->get(i);
- k->sendeEncrypted((char*)&pol.transparent, 1);
- char nLän = pol.name->getLength();
- k->sendeEncrypted(&nLän, 1);
- if (nLän)
- k->sendeEncrypted(pol.name->getText(), nLän);
- int anz2 = pol.vertex->getEintragAnzahl();
- k->sendeEncrypted((char*)&anz2, 4);
- for (int j = 0; j < anz2; j++)
- {
- Vertex v = pol.vertex->get(j);
- Vertex p;
- if (pol.tKordinaten)
- p = pol.tKordinaten->hat(j) ? pol.tKordinaten->get(j) : Vertex(0, 0);
- k->sendeEncrypted((char*)&v.x, 4);
- k->sendeEncrypted((char*)&v.y, 4);
- k->sendeEncrypted((char*)&p.x, 4);
- k->sendeEncrypted((char*)&p.y, 4);
- }
- if (zF)
- zF->aktionPlus();
- }
- k->getNachrichtEncrypted(&ret, 1);
- }
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Speichert einen Sound in einer Sounddatei des Datei Editors
- // zDatei: Der Name der Modeldatei (ohne erhöhten Reference Counter)
- // zSound: Der Name des Sounds (ohne erhöhten Reference Counter)
- // zData: Die Daten des Sounts (ohne erhöhten Reference Counter)
- // zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erhöhten Reference Counter)
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::deSoundSpeichern(Framework::Text* zDatei, Framework::Text* zSound, GSL::GSLSoundV* zData, Framework::FBalken* zF)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xD", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x10", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char l = (char)zDatei->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zDatei->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- l = (char)zSound->getLength();
- k->sendeEncrypted(&l, 1);
- k->sendeEncrypted(zSound->getText(), l);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- char channels = zData->istMono() ? 1 : 2;
- k->sendeEncrypted(&channels, 1);
- int sample = zData->getSampleRate();
- k->sendeEncrypted((char*)&sample, 4);
- __int64 slän = zData->getDatLength();
- k->sendeEncrypted((char*)&slän, 8);
- if (zF)
- zF->setAktionAnzahl(slän);
- zData->open();
- char* buffer = new char[2048];
- while (slän > 0)
- {
- int l = slän > 2048 ? 2048 : (int)slän;
- zData->getDaten(buffer, l);
- k->sende(buffer, l);
- slän -= l;
- if (zF)
- zF->aktionPlus(l);
- }
- delete[] buffer;
- zData->close();
- }
- }
- }
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Lädt die Kauf Statistik der geladenen Karte
- // verkauft: Enthält nach erfolgreichem Aurfuf eine Liste mit den Anzahlen der Käufe der Karte der letzten 30 Tage
- // einkommen: Enthält nach erfolgreichem Aurfuf eine Liste mit den Anzahlen der verdinten Kupfer in den letzten 30 Tagen
- // gespielt: Enthält nach erfolgreichem Aurfuf eine Liste mit den Anzahlen der Spielen der letzten 30 Tage
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- int EditorClient::getVerkaufStatistik(Framework::Array< int >* verkauft, Framework::Array< int >* einkommen, Framework::Array< int >* gespielt)
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\x10", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- int kaufAnz = 0;
- k->getNachrichtEncrypted((char*)&kaufAnz, 4);
- char anz = 0;
- k->getNachrichtEncrypted(&anz, 1);
- for (int i = 0; i < anz; i++)
- {
- int kupfer = 0;
- int kauf = 0;
- int games = 0;
- k->getNachrichtEncrypted((char*)&kupfer, 4);
- k->getNachrichtEncrypted((char*)&kauf, 4);
- k->getNachrichtEncrypted((char*)&games, 4);
- einkommen->add(kupfer);
- verkauft->add(kauf);
- gespielt->add(games);
- }
- cs.unlock();
- return kaufAnz;
- }
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Startet den Editor Modus, welcher für jedes Spiel unterschiedlich funktioniert
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- bool EditorClient::initEditor()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\x7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xE", 1);
- k->getNachrichtEncrypted(&ret, 1);
- }
- if (ret == 3)
- {
- char byte = 0;
- k->getNachrichtEncrypted(&byte, 1);
- char* f = new char[byte + 1];
- f[byte] = 0;
- k->getNachrichtEncrypted(f, byte);
- err = f;
- delete[] f;
- cs.unlock();
- return 0;
- }
- if (ret != 1)
- err = "Unbekannter Fehler";
- cs.unlock();
- return ret == 1;
- }
- // Erhält die Verbindung aufrecht
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- // Sollte während einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
- bool EditorClient::keepAlive()
- {
- if (!cs.tryLock())
- return 1;
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- char res = 0;
- bool ok = k->sendeEncrypted("\x5", 1);
- ok &= k->getNachrichtEncrypted(&res, 1);
- cs.unlock();
- if (res != 1 || !ok)
- trenne(0);
- if (res != 1)
- err = "Unbekannter Fehler";
- return res == 1;
- }
- // Trennt die Verbindung zum Server
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- // Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
- bool EditorClient::trenne(bool abmelden)
- {
- cs.lock();
- verbinde();
- if (!k)
- {
- cs.unlock();
- return 1;
- }
- if (abmelden)
- {
- k->sendeEncrypted("\4", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 3)
- { // error
- k->getNachrichtEncrypted(&ret, 1);
- char* msg = new char[ret + 1];
- msg[ret] = 0;
- if (ret)
- k->getNachrichtEncrypted(msg, ret);
- err = "error while unregister Client Editor Server returned: ";
- err += msg;
- delete[] msg;
- }
- }
- k->sendeEncrypted("\3", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 3)
- { // error
- k->getNachrichtEncrypted(&ret, 1);
- char* msg = new char[ret + 1];
- msg[ret] = 0;
- if (ret)
- k->getNachrichtEncrypted(msg, ret);
- err = "error while trenne Editor Server returned: ";
- err += msg;
- delete[] msg;
- }
- k->trenne();
- k = (Network::Klient*)k->release();
- cs.unlock();
- return 1;
- }
- // Beginnt eine individuelle Editor Nachricht
- // Gibt den Klient zurück, über den mit dem Server kommuniziert werden kann. Im Fehlerfall wird 0 zurückgegeben
- // Der Thread, der diese Methode aufgerufen hat, sollte nach dem Erfolgreichen Aufruf am Ende der Kommunikation mit dem Server endEditorMessage aufrufen
- Network::Klient* EditorClient::beginEditorMessage()
- {
- cs.lock();
- if (!k)
- {
- err = "Der Client ist nicht verbunden.";
- cs.unlock();
- return 0;
- }
- k->sendeEncrypted("\7", 1);
- char ret = 0;
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- {
- k->sendeEncrypted("\xF", 1);
- k->getNachrichtEncrypted(&ret, 1);
- if (ret == 1)
- return k;
- }
- if (ret == 3)
- {
- k->getNachrichtEncrypted(&ret, 1);
- char* msg = new char[ret + 1];
- msg[ret] = 0;
- if (ret)
- k->getNachrichtEncrypted(msg, ret);
- err = "error while beginning Editor Message Server returned: ";
- err += msg;
- delete[] msg;
- }
- err = "Unbekannter Fehler";
- cs.unlock();
- return 0;
- }
- // Beendet eine Editor Nachricht
- // sollte nur nach dem erfolgreichem Aufrufen von beginEditorMessage aufgerufen werden (vom selben Thread)
- void EditorClient::endEditorMessage()
- {
- cs.unlock();
- }
- // Gibt 1 zurück, falls der Client verbunden ist, 0 sonst
- bool EditorClient::istVerbunden() const
- {
- return k != 0;
- }
- // gibt den Letzten Fehlertext zuück
- // sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
- const char* EditorClient::getLetzterFehler() const
- {
- return err;
- }
|