2009. augusztus 26., szerda

Solarah Online Szerver Prototípus Ismertető

Ennek a bejegyzésnek a témája most elég technikai jellegű lesz, nem titkoltan azzal a szándékkal, hogy hátha felkelti valaki hozzáértő érdeklődését és beszáll a fejlesztésbe a gyorsabb haladás érdekében. Egy-két újabb konceptrajzot is beraktunk a szövegbe, hogy a többieknek is jusson valami csemege.


Kicsit több mint egy hónapja publikáltam a launchpad-on a majdani szerverünk prototípusának kezdetleges állapotban lévő forráskódját. Ezzel a célunk egy szerver keretrendszer kialakítása, amelyből majd a trunk-ba illesztve a szerver programunk első bevethető verziója fejlődne ki. Az alábbiakban ennek az általunk tervezett felépítését és nagyvonalú működését mutatom be.


A szerver öt önálló binárisként (és processzként) futtatott kiszolgáló egységből áll: master, worker, auth, chat és logger. Ezek mind képesek külön számítógépen futni vagy alapesetben a master indítja a többi processzt – vagy azokat, amelyek azonos hoston futnak vele - forkkal. A processzek egymással tcp kapcsolaton beszélnek, meghatározott portokon keresztül.


A master felügyeli egy un. masterporton kapcsolódva a többiek futását, statisztikát gyűjt róluk, indítja és leállítja a szolgáltatásokat. Később egy szöveges (ncurses alapú) konzolt is megvalósítunk, amin keresztül közvetlenül lehet felügyelni a szerver futását.


Minden processzt alapvetően azonos felépítéssel tervezünk, aminek az alapelemeit az ACE Framework adja. Az un. half-sync/half-async mintát használjuk. Ennek az a lényege, hogy egy threadben kezeljük a hálózati kapcsolatokat és a forgalom (küldés és fogadás) lebonyolítását az ACE_Reactor és kapcsolódó osztályok segítségével és egy másik – ehhez képest aszinkron módon futó - thread-ben végezzük a beérkezett üzenetek feldolgozását és a kiszolgáló funkciók futtatását. A két thread egymással egy üzenetsoron keresztül kommunikál.

A kiszolgálók tehát úgy működnek, hogy a hálózati kapcsolatokon beérkező üzenetek egy üzenetsorba kerülnek, amiből egy feldolgozó thread veszi ki, és dolgozik velük. Opcionálisan threadpool-t is használhatunk, ami azt jelenti, hogy egyszerre több feldolgozó szál vár üzenetre, és így párhuzamosan üzenet feldolgozása is futhat – amennyiben ez megoldható és szükség van rá.


A master által végzett feladatokat már leírtam, következzen most a többi négy kiszolgáló.


A logger processz végzi a szerverben a többi kiszolgálótól érkező logbejegyzések rögzítését fáljba vagy adabázisba. A konkrét feladatokat megvalósító rész készülhet luában is, mert nincsen szükség a c++ sebességelőnyére ebben az esetben, viszont talán kevesebb kóddal és rugalmasabban megvalósítható (esetleg akár menet közben is cserélhető).


A chat processz végzi a szerverben a felhasználói csevegés és egyéb hasonló feladatok (pl. hírek, bejelentések) lebonyolítását. Alapvetően csatornák vannak, amelyekhez felhasználók kapcsolódnak és az adott csatornára küldött üzeneteket szórja szét a tagoknak. A megvalósítás itt is lehetne akár luában.


Az auth processz végzi a szerverben a felhasználók azonosítását a nevük és jelszavuk alapján ill. az un. „game session” létrehozását. A felhasználói adatokat és jogosultságokat egy Postgresql alapú adatbázisban tároljuk. Ezt az adatbáziskezelőt használjuk igény szerint máshol is. A megvalósítás itt is lehetne akár luában.


A worker végzi a szerverben a felhasználói hálózati kapcsolatok kezelését a RakNet rutinkönyvtár segítségével, az entitásrendszer és szabályrendszer szkriptek futtatását és az entitások egymáshoz való térbeli viszonyát követő (máshol talán fizika modulnak hívott) proximity motor futtatását. A szkriptek fájlrendszeren (esetleg adabázisban) foglalnak helyet, az entitások adatai pedig egy entitásadatbázisban.

Ez a processz valósítja meg a játékszerver legfontosabb funkcionalitását, a többi kiszolgáló tulajdonképpen az erről leválasztható és önállóan működni tudó funkciókból jött létre.


Ezek voltak a legfontosabb információk a Solarah Online első szerverprogramjáról ill. arról, hogy hogy akarjuk kialakítani. Feltűnhetett, hogy nincsen szó itt klaszterezésről, terheléselosztásról, monitorozhatóságról, távoli menedzselhetőségről, stb. Ezeket a tulajdonságokat, képességeket nem akarjuk mindjárt ebben a szerververzióban megvalósítani. Próbálunk (épeszű idő és munka árán) megvalósítható célokat kitűzni magunk elé, és a fokozatosság elvét követjük.


Remélem minden mondat értelmesre sikerült. Kérdéseiteket és észrevételeiteket a honlapon megtalálható kontaktokra írjátok.


2009. január 1., csütörtök

Az előző részek tartalmából

Engem is elkapott a nagy össznépi agybaj s nekiállok összefoglalni az elmúlt évet. Essünk is neki:

Az év mint mindig most is egy vizsgaidőszakkal indult, ami jellegéből adódóan nem túl gyümölcsöző a project szempontjából.
A vizsgaidőszakból egyenesen egy SV konfba majd nemsokkal késöbb az SV Sörbe futottunk, ami az első Solarah találkozóhoz képest jól sikeredett. Volt ott korai Solarah teszt és megkaptuk az első külsős bug jelentést is, remek volt. :)



Ezután nyárig a következők történtek: fejlesztés, fejlesztés, vizsgaidőszak, fejlesztés
Nem nevezném különösebben sikeres időszaknak, nem haladtunk olyan gyorsan mint az tervezve volt de azért volt előrelépés ekkor is bőven: Armen, szabályrendszer finomítások, animációk kliensbe építése, animált kamera, stb...

Július. Megrendeztük az első SV tábort ami a vártnál is jobban sikerült. Remekül éreztük magunkat, remekül haladtunk a munkával, és úgy általában csak leg-ekben lehet beszélni az eseményről pedig volt bőven hibalehetőség (pl bográcsozásnál Microsoft kézikönyvet használtunk gyújtósnak).



A tábor utáni időszakban egészen szeptemberig nem történt semmi, ebből okulva szeptemberben meghatároztunk egy fix kiadási ütemezést aminek első eredménye a decemberben megjelent első demo. A demo mellé pedig járt parti is ami szintén jól sikerült minden technikai nehézség ellenére.


Az év utolsó másfél hetében nekiálltunk a 0.2.1 elkészítésének a visszajelzések alapján. Innen is
köszönet mindenkinek aki kipróbálta és teszteredményeket vagy hibajelentéseket küldött vissza.

Ennyi lett volna az Úr 2008. éve, remélem nem hagytam semmi fontosat az apró részletek között amit nem írtam meg.

A végén pedig az újévi kívánság mert anélkül nincs ilyen post:
Solarahban gazdag, sikeres és boldog új évet kívánok a Silent Vertigo csapat nevében minden kedves (és kedvetlen) olvasónak!

2008. december 22., hétfő

Niskával poharazgatva

Túl egy vizsgákkal teli és nagyon erős Solarah fejlesztéssel megspékelt héten, amikor az átlagos alvásidőm öt óra alá szorult most kényelmesen hátradőlve, a szemembe beégett forráskód képét ignorálva írom ezt a postot.

Írom ezt a postot mert az első kiadott demo megérdemli, hogy időben meg legyen említve itt is. Ende kásakerülgetés, itt a link. Nézzétek meg, ízlelgessétek, s jelentsetek hibát ha találtok!

Nincs más hátra mint előre: köszönöm hát a csapat összes tagjának akik előre haladnak maguk előtt tolva a Solarah szekerét, s bár hozzám hasonló állapotban vannak, már folyik irc-n a tervezgetés és a demo tanulságainak levonása. Köszönöm az érdeklődőknek, fórumitáknak a jó meglátásaikat, ötleteiket és a végtelen türelmüket - remek érzés úgy dolgozni, hogy van aki várja a művet.

Azzal akartam zárni ezt a postot, hogy találkozunk a téli szünet után, egy hónap múlva. Mégsem így zárom mert biztos vagyok benne, a szünet alatt sem lesz tetszhalott a Solarah. Ezért ha mindenkinek megfelel, maradjunk annyiban, egy hét múlva ugyanitt. ;)

2008. december 14., vasárnap

Miklós után szaladva

Hosszú kihagyás után újraindul a blog, remélem mindenki örül. :)

Nem részletezem, hogy mi minden történt az elmúlt hónapokban - elkopna a billentyűzetem. Nomeg amiről most értekezni szeretnék izgalmasabb is. Viszont mielőtt ebbe belevágnék kicsit vissza kell ugorjak az időben.

Szeptemberi SV konf.
A csapat akkor megjelent tagjaival az addigi tapasztalatokat összegezve felosztottuk az évet és három nagy esemény közé szorítottuk a munkanapokat. Megvitattuk azt is, hogy az év mely szakaiban nem tudunk dolgozni (vizsgaidőszak, nyaralás) majd megegyeztünk abban, hogy mindhárom eseményt egy közösségnek kiadott (tech)demoval zárjuk.
Ezen események közül az első a Mikulás sprint.


Mikulás sprint

Ezen a hétvégén a csapat elérhető tagjai összeültek irc-n és nekiálltak az első nyilvános demo elkészítésének. Alábbiakban egy kis áttekintés erről.

A részeg ninják nem látnak a ködben
Kami sajnos nem ért rá a hétvégén, de még előtte leadta az általa készített anyagot, így bekerült a kliensbe némi köd, (eltúlzott) bloom és árnyék is.


A ninják sem győzhetik le a fizikát!
Részemről egy elég régóta húzódó feladat lett letudva a Bullet fizikai motor beillesztésével. Néhány űrbe kilebegett ninja árán eljutottunk addig, hogy már nem lehet falakon átsuhanni és a gravitáció is ki tud babrálni az egyszeri játékossal. (Képen a sárga vonalak egy ütközést mutatnak.)


A ninjának nincs tükörképe
A grafikus részleg is bedobta magát és csináltak sokminden szépet, de ez legyen meglepetés. ;)

A release folyamat hétfőn elindul s vasárnapra le is zárul. Ennek örömére vasárnap (2008 dec. 21) sörözést/teázást tartunk. Dobpergés:

SV Vodka
December 21-én 13:00-ás kezdettel minden érdeklődőt szeretettel várunk Budapesten a Fanyűvőbe (Budapest XIII. Váci út 70.) egy Solarah kipróbálásával összekötött sör
özésre/teázásra!
(Ha érdekel a dolog kérlek jelezd fórumon, hogy kb tudjuk hány emberre számíthatunk.)

2008. július 22., kedd

Silent Vertigo tábor, bográcsozás + második nap + afterparty

A tábor második napjáról Vigi írt nektek egy kis beszámolót, át is adnám neki a szót mert a bevezető úgyse érdekel senkit, íme:

Az első nap egy remek hangulatú bográcsozással zárult, ami után - kicsy várakozásával ellentétben - nem szabadult el a pokol. Még szerencse, hiszen a tanyám bánta volna. :) Az igazat megvallva, több bort kellett volna vennünk, mint sört, mert a bor jobban fogyott. Volt a pincében némi somlai házibor, de a fehér hogy néz már ki boroskólába? Egyáltalán hogy néz már ki a boroskóla? Elrontani kólával a bort... Na mindegy, a lényeg, hogy a lugasunk egyben maradt.

A vacsora pörkölt volt, amit Quest konyhafőnök igen nagy szakértelemmel készített el, örök hála érte! Nem hogy nem maradtunk éhen, de kitűnő íze is volt! Pedig nem is szakácsnak jelentkezett a csapatba. Lehet áttesszük az ellátmányozó részlegre, majd meglátjuk, hogy viselkedik. :P A vacsora mellé vizipipa is dukált, amelyet Azrael kolléga vonszolt le magával a Nagy Faluból, és miközben így füstölögtünk, igen jó hangulatú csevegésbe kezdtünk O'Neill cimbora vezetésével. A Silent Vertigo egy emberként nem tudta eldönteni, hogy előbb a rekeszizmát próbálja meg kilazítani, avagy az asztalba verje a fejét, hátha úgy könnyebb elviselni O'Neill vicceit. Kifogyhatatlan az ürge... :P Végül beszélgettünk (hőbörögtünk) egy kicst, aztán fél háromkor takarodó.

Másnap tízkor kelés, fürdés, kávé, reggeli és mindenki folytatta ott, ahol abbahagyta:


Prog:
Ácsi az éjjel álmot látott, kinyitotta az Álmoskönyvet és azt olvasta benne, hogy a harminchét vindózkékhalál feltámadása és nyálfröcskölő csaholása valójában a megoldást mutatja a Bullet fizikai rendszer integrálásának problémájára és kerek öt perc alatt leküzdötte azt az akadályt, amire ráment az első napja. [Köszönöm a megelőlegezett bizalmat, de csak a kezdeti problémák legyűréséről volt szó. - ACsi] E örö, e bódottá! Kami pedig csendben, nyugodtan és rutinosan (nem mondom, hogy öregesen, mert leszedi a fejemet ;) ) folytatta az editor babrálását.


Graf:
Valóban a leglátványosabb eredményeket a grafikusok produkálják. Kicsy csiszolgatta tovább Geniont, de nem sikerült teljesen befejeznie. Korábban elment, minthogy lincselhettük volna... majd még úgyis elkapjuk. A grafosok általánosságban folytatták azt, amit az első napon elkezdtek, azaz Temaruk fegyvereket kovácsolt, Azrael a gladiátortábort, azon belül a főnök házát szépítette, Lace pedig firkálgatott. Szeki sajnos nem tudott jelen lenni, de otthon dolgozott ő is párhuzamosan és igen tetszetős dolgot alkotott, de azt nem árulom el, hogy mit ;).


Ynev:
Kicsyvel ellentétben én láttam azt a referencia dokumentumot... valami kis papírfecnin volt, amit a tábor utáni romeltakarításkor eldobtam a kukába. Remélem a fejükben van. :D O'Neill néhány falu és egy Kyel templom kidolgozásával foglalatoskodott, miután Karrdéval ketten helyre tettek néhány fontos dolgot Hat Várossal kapcsolatban. Frazor befejezte a papi negyed részletes leírását: juhé!


Rendszer:
A szabályrendszerrel kapcsolatban a hétvégén főleg olyan kérdéseket vitattunk meg, amelyek a rendszert Ynev oldaláról érintik, hiszen Ácsi és kicsy is a saját területével foglalatoskodott, nem lett volna logikus megosztani a figyelmüket. (Ez a hivatalos megfogalmazás, valójában örültünk, hogy nem akadékoskodnak folyamatosan és nem magyarázzák a kocka marhaságaikat :P) Na azért egy-egy Harcrendszert érintő kérdésben kikértük az egész csapat véleményét. Terítékre került a gazdasági rendszer, amely problémára - a megbeszéltek alapján - Quest csinált egy exceltáblát, ami meglehetősen jól szimulálja a dinamikus gazdaságot. A referencia dokumentum pedig valóban készülget. Úgy tűnik, hogy - minimális kivétellel - sikerült leírni azt, amit eddig kőbe véstünk, azaz napirenden vagyunk vele.


Mivel a hétfői munka miatt többen hazamentek már vasárnap, a vacsora családiasabb volt, mint a szombati: nem bográcsoztunk, hanem Frazor irányításával, ámbár közös erővel lecsót készítettünk és jóízűen elfogyasztottuk. Természetesen O'Neill viccei nem maradhattak el. Hiába kérleltük... :)

Összességében azt tudom mondani, hogy nagyon jól haladtunk. 12 fiatal összezárva egy hétvégére és nem baromkodtuk el, hanem a hülyéskedés mellett sikerült produktívnak maradnunk. Szerintem kezdünk öregedni. NEMÁR! :S

Hétfőn végül mindenki elindult haza. Kivéve én. Nekem maradt a romeltakarítás. Két háromköbméteres konténert fullra lapátoltam a szeméttel meg törmelékkel, de persze a többiek még sajnálni sem hajlandók. :D Na jó, igazából nem gondoltam volna, hogy ilyen sok ember ilyen rendet tud maga után hagyni. Mint házigazda azt mondom, le a kalappal, szinte nem is volt mit eltakarítani, csupán néhány azstalt meg fekvőhelyet elpakolni a helyére. És temrészetesen köszönöm szüleimnek, akik nemcsak lehetővé tették ezt a kis összeröffenést, de sokat segítettek a lebonyolításában is. [Az egész csapat hálás nekik és neked, fogadjátok innen is hatalmas hálánkat egy szép kerek köszönésbe foglalva. És természetesen Brutust is üdvözöljük. ;) - ACsi]