Projekat u Pythonu - Free Software Game Server

Ej imam ideju i vec nekoliko mjeseci razmišljam o njoj i pokušavam da nešto praktično uradim. Radi se o slijedećem. Volio bih da napravim(o!) Otvoren server za - većim dijelom - zabavni softver. Projekat bi bio edukativan i zanimljiv, bez ikakvih opterećenja, samo mi trebaju programeri koji imaju skilla u Pythonu, + poželjno ali nije obavezno , evo po prioritetima

  • Twisted2.0
  • PostreSQL (i python implementacija)
  • PyGTK

Ima li zainteresovanih? Kažem vam, ovo je nešto posebno. Ili bi barem trebalo da bude.

Fina ideja, mada ja ovdje ne vidim nista. Otvoren server za sto? Haj’d nemoj skrtariti na detaljima, nahrani ovu gladnu masu informacijama :slight_smile:

S.

Za igre. Šteta pa ovdje nema attachmenta, rado bih vam okačio svoj UML plan.

To je Server za jednostavnije igre, prvenstveno potezne (društvene). Razlika između trenutnih servera i ovoga je u tome što bi omogućavao da se na njega vežu različite klijent aplikacije. Drugim riječima zamislite da imate ChessMaster i igrate šaha protiv nekog sa, lupam, WinBoardom npr …

Kontate li prednost? Ogroman server! Sa više korisnika od dlakavog battle.net’a ! Poenta (programerska) je u dizajnu. Ja ga zovem Kontroler-Model-Adapter i on bi trebao da omogući laganu realizaciju takvog projekta. Uz dosta truda. Za svaki novi podržan klijent i igru treba vremena da se isprogramira
a) model, to su pravila igre
b) adapter, pretvara događaje u modelu u one koje klijent protokol može da razumije
c) kontroler, to je program koji je ujedno i adapter, ali sa klijentske strane. on komande koje klijent šalje pretvara u ono što model razumije, drugim riječima poziva određene funkcije i zato ga zovem kontroler (tj. client ali izgleda kao kontroler) … Tako nekako. Eto to je to.

Treba ljudi dosta jer neko treba raditi modele, npr za šah, go, monopol, riziko, zatim treba ljudi koji će napraviti kontrolore za irc, http, wap … i naravno adaptere. Dakle postoje dve strane projekta - modeli (igre) i upravljači (kontroleri i adapteri, isti racq samo obrnut smijer).

Malo sam možda nešto loše napisao, ali nadam se da shvatate keč …

Interesantno, ali jos uvijek puno rupa (bla bla, znam da zvucim ko kakva baba).

Je li ima ista slicno vec gotovo? Cisto da ljudi bolje shvate koncepciju.

Dalje, ne mozes porediti battle.net s ovim, jer komunikacija igara s njim je vec unaprijed odredjena definisanim protokolom. Sto je glavni problem, jer
(uzimam tvoj primjer) na koji nacin natjerati, recimo ChessMaster, da komunicira protokolom koji nije u njega ugradjen?

che.guevara poznati optimista :smiley: :smiley: :smiley:
ideja je dobra ali zahteva mnogo truda. sto kaze Sanel : na koji nacin natjerati, recimo ChessMaster, da komunicira protokolom koji nije u njega ugradjen?

Ako sam ja dobro razumio, ChessMaster komunicira svojim protokolom, a modul na serveru prevodi u drugi protokol.

Kao prvo, hehe, da se pohvalim, popravio sam slova šđčćž :slight_smile:
Eto nema više upitnika -.-

Kako?
Nažalost, izgleda da niste pročitali moj tekst. Uopšte nije važno ko je klijent i kakav je njegov protokol. Evo primjera. Očigledno je da vam se ne čitaju longpostovi :slight_smile:

Dakle, kako “natjerati” WinBoard i mIRC programe da omoguće korisnicima da igraju šah međusobno …

Evo u stilu gastronomije :

Sastav: (u zagradama su imena klasa)
Jedna Model klasa šaha (plugins.chess.ChessPlugin)
Jednu klasu za sporazumijevanje sa IRCom (clients.irc.IRCClient)
Jednu klasu za razumijevanje WinBoarda (clients.winboard.WinBoardClient)

Jedan Kontroler za upravljanje šahom koji će biti u sklopu (usko vezan) za WinBoardClient ali će ustvari upravljati ChessPluginom. (clients.winboard.ChessAdapter - neka vas ne zabuni to što ga zovem adapterom ovdje …)

Jedan Kontroler za upravljanje šahom u sklopu IRCClient’a (clients.irc.ChessAdapter)

Jedan adapter koji callbacke servera prevodi u format razumljiv IRC-u (clients.irc.ChessClientAdapter)

Jedan adapter isto to ali za winboard (clients.winboard.ChessClientAdapter)

I još brdo dodataka za IRCClient (po potrebi) dok WinBoard ostaje na tom jednom, jer ipak interfejs i protokol winboardov ne omogućavaju, šta ti znam, Go’a npr …

E kako to sad radi …
Glavni server sluša na portu 3000 npr.
Klijent (ne znamo ko je) se povezuje na taj port.
Server je već pokrenuo (singleton!) instance svih plugina.
Klijent šalje neke podatke kao identifikaciju.
Ti podaci se uspoređuju sa nekim šablonima i na osnovu tih prvih poslanih bajtova ili redova karaktera se utvrđuje “ko je to sa one strane žice”.
Tom klijentu (klasi koja upravlja konekcijom) se pridružuje odgovarajuća Client klasa. U ovom slučaju naš server može da primi samo WB i IRC klijente. IRC će se poznati po tome što mu prva linija uvijek počinje sa USER linijom … WinBoard se prepoznaje slično tako … znači nema problema sa tim.
Nakon identifikacije, sav budući “transfer”, tj podaci koje klijentske aplikacije pošalju na server biće prevedene od strane Client’a (IRCClient ili WinBoardClient) i od tih različitih “komandi” (npr u IRCu će se upravljati tako što, npr ako igrate sa “GedomGluperdom”, jednostavno pošaljete privatnu poruku - PRIVMSG) Client treba da pozove odgovarajuću funkciju unutar plugin Modela. Jasno?

O plugin modelu. Ili igri. Kako to izgleda u slučaju šaha? Evo šta treba klasa da ima:

Atributi:
ime bjelog igraca
ime crnog igraca
odigrani potezi
status

Funkcije:
bijeli_igra(potez)
crni_igra(potez)
chat(poruka) # opcionalno za klijente, opcionalno za server :slight_smile:
bijeli_predaje()
crni_predaje()

E dakle, ti Client’i treba da recimo “PRIVMSG GedoGluperda: e4” prevedu u poziv funkcije plugins.ChessModel.bijeli_igra((1,4), (3,4)) i tako dalje …

I na kraju …
Dosadašnji tekst je objasnio kako različite klijent aplikacije govore serveru, a evo sada kako server govori njima !

Kada bjeli igrač pozove bjeli_potez(…) ostali igrači moraju biti obaviješteni o tome (u ovom slučaju - crni igrač. inače mogu tu biti i gledaoci). To se radi tako što se sada koristi ono što sam pominjao kao Adapteri, naime sad Model šaha poziva funkciju “bjeli_je_igrao(šta)” za svakog prisutnog igrača i nema veze kakve su njihove aplikacije jer svaki od njih ima svoju verziju od “bjeli_je_igrao” funkcije … U ovom slučaju, naš server će pozvati clients.irc.ChessClientAdapter.bjeli_je_igrao i clients.winboard.ChessClientAdapter.bijeli_je_igrao … itd … etc …

kontate sad?
dvosjmjerno prevođenje protokola sa modelom u sredini koji reguliše pravila, evidentira rezultate i ostalo …

uskoro ću da okačim i dijagram…

ovo bi trebao biti ogroman i veoma kvalitetan proizvod. ozbiljno

Ako sam ja dobro razumio, ChessMaster komunicira svojim protokolom, a modul na serveru prevodi u drugi protokol.[/quote]

Tako. Ali samo jedna stvar da se ne zabunimo … ChessMaster komunicira svojim protokolom, a modul na serveru prevodi to u pozive funkcija modela a ne u neki treci protokol. I još nešto. Taj isti model će odmah da obavijesti ostale igrače o odigranom potezu tako što pozove funkciju klijent klase koja će taj poziv da pretvori u klijentov protokol (ovdje - ChessMaster)

Ma jednostavna stvar da ubi! Poenta je da već jednom mogu da igram sve one gotivne igrice iz Open Source bazena na jednom mjestom bez muke … Projekat bi bio zanimljiv i vjerovatno (ako se ne ebem u zdrav mozak) jedinstven na svijetu … Možda čak i patentiramo pattern :wink: :wink: :wink: :twisted:

che … daj se na posao :smiley: :smiley:
poz

xentonix

Joj što ljudi peglaju sa tim objektno orijentisanim programiranjem, he he.

Treba ti “on wire” adapter koji će mapirati naredbe jednog protokola u drugi. To možda izgleda lako u teoriji, ali je u praksi obično jako teško. Npr, za jednu igru sa konačnim skupom elemenata (šah) postoje standardna 2 protokola za komunikaciju, Winboard i UCI. Da li je lako napisati adapter? Ne bih se zakleo:
http://www.aarontay.per.sg/Winboard/uciwinboard.html

XBoard/Winboard - http://www.tim-mann.org/xboard/engine-intf.html
UCI - http://www.aarontay.per.sg/Winboard/uciapril.html

Xboard se koristi za oba tipa komunikacije:
chess engine <->interfejs
interfejs <-> chess server

P.S.
Ako se kome igra šaha online, posjetite www.freechess.org

Adise, ja bih ovo mogao uraditi i u neoop jeziku. Nije problem.

Nije to OnWire adapter, ovo je nešto slično ali malo slobodnije. To da je WinBoard protokol težak, pa vidi, radi se o OpenSourceu. Sigurno će se naći neko ko je već radio na WB protokolu pa će biti ljubazan da i ovom projektu pomogne. Naš zadatak, tretnutno moj jer nemam pomoći je:

  • da napravimo jasan plan, sa vremenskim rokovima
  • da smislimo i način zarade, recimo http sajt u kojem windows korisnici moraju da se pretplate :twisted:
  • da uradimo sve osnovne klase, šablone
  • da napravimo nekoliko primjera
  • da uradimo kvalitetnu dokumentaciju na Srpsko-Hrvatsko-Bosansko-Crnogorskom jeziku i paralelno na Englesko-Američko-Australijskom
  • da odredimo način promovisanja projekta radi privlačenja programera i korisnika

Eto ljudi. Ideja je fina. Ja već imam nešto koda. Trenutno imam modul koji omogućava chat. Već sam napisao adaptere za telnet (no) protocol i sada hoću da napravim IRC adaptere tako da korisnici telneta i mIRC’a npr mogu da se dopisuju koristeći različite protokole. Ovo ćemo koristiti kao “uvod” za buduće programere.

Pozdrav xentonixu.

mozes li dati neke testne accounte za ovo sto imas gotovo? konkretno da se pogleda?

Pardon?

Ima dosta toga codea, mada već vidim da nisam trebao počinjati sam. Ne bih da to objavljujem ovdje. Samo programerima koji se pridruže. Planiram da source držimo na savanahu, etc …

Znaci ovo bash nikog ne interesuje :frowning:

Izgleda da cu morati da “bacim sve niz rijeku” kao u pjesmi Crvljive, ovaj, Crvene Jabuke …

de polako :slight_smile: nemoj samo bedirati :)… de mi posalji UML crteze ( nisam pyton programer, ali znam analizirati :smiley: )…

Pozdrav

Ice

Aj važi. Slažem se da su UML crteži potrebni … Iako nisam ekspert za modelovanje, valjda ćete razumjeti. Treba mi koji dan da ih uredim.

ja kontao da su vec gotovi… al hajd ako ti nije tesko - nacrtaj - skoditi nece :smiley:

Pozdrav

Ice

i jesi li pogledao? kontas ista?

izgleda da ne :frowning:

heh… ma kontam ja to, samo sto ti ja nemam vremena za vece projekte ( pogotovo u programskom jeziku koji mi je nepoznat ). Sta da ti kazem na to osim da je sareno i dobro uradjeno…

Pozdrav

Ice