MGS - Multithreaded Game Server

0.5.2

Versione:
0.5.2
Autore:
Detro aka Ivan De Marino
em@il:

Presentazione

MGS e' un Server Multithreaded che offre la possibilita' di partecipare direttamente on-line a Giochi, Chat e altro.
Gli utenti si possono connettere al Server tramite un semplice "TELNET", o tramite Client appositamente progettati: la comunicazione si basa, infatti, sul semplice scambio di messaggi tramite Socket /IP.

Struttura Generale di MGS

MGS e' costituito da una Classe Server, che ascolta su una porta a scelta ed attende connessioni in "passive-mode-socket".
Nel momento in cui la connessione viene effettuata da una Client Socket (detta anche "active-mode-socket"), questa viene girata ad un Thread di gestione ConnectionHandler, insieme alla lista dei Game attualmente in esecuzione sul Server.
Un Game puo' essere sia un Gioco (inteso in senso stretto, come il Pocker o gli Schacchi), sia qualcosa di simile a livello di interazione: ad esempio una ChatRoom.
Quando viene istanziato un nuovo ConnectionHandler, questo crea un nuovo Player e lo assegna, o ad un Game gia' attivo, o ad un nuovo Game, a seconda delle richieste dell'Utente.
Player rappresenta l'Utente connesso ad MGS e gestisce la sua interazione con il Server e con i Game.
I Game interagiscono con i Player a seconda del tipo di "Attivita'" che permettono di svolgere, permettendo quindi all'utente di Giocare, Chattare ed, in generale, fare quello che il particolare Game implementa.

Struttura Full-Threaded

Cio' che piu' di tutto trae vantaggio della struttura "Full-Threaded" sono i Game: ognuno di essi risulta una "unita' di esecuzione a se stante". Quindi tutti i Game procedono in maniera completamente indipendente gli uni dagli altri.

Comunicazione Socket-Based

La scelta di organizzare l'interazione con l'Utente solo tramite un semplice "read-write" su Socket di tipo TCP permette agli utenti sia di poter utilizzare MGS tramite un semplice TelNet (disponibile su ogni Sistema Operativo), sia, in alternativa, di sviluppare un (eventuale) Client in maniera molto semplice.

Istanziazione di Classi Plug-In

Per ovvie ragioni, per istanizare una Classe e' necessario conoscerne la definizione.
Introducendo pero' l'uso delle librerie dinamiche, le cose cambiano: le SharedObjectLibrary (dette "SO" o ".so") sono quelle Librerie che si possono "linkare" a Run-Time ai programmi.
MGS dispone di una Template Factory, chiamata appunto TFactory, che permette di istanziare Classi senza che questa siano conosciute a Compile-Time: il risultato e' quindi che si dispone di vere e proprie Classi Plug-In. Questo meccanismo, in questa implementazione, e' utilizzato per Linkare a Run-Time i Game, caricandoli da una Directory scelta.

Librerie Utilizzate

Per lo sviluppo di MGS si e' fatto uso della libreria Open Source GNU Common C++ 2 v1.2.5: essa, in particolar modo, e' risultata essenziale per semplificare la programmazione con Thread e Socket.
La Classe String offerta da CommonC++2 e' risultata "poco avezza" all'uso con std::iostream, quindi si e' preferito ricorrere a std::string.

Note per la versione 0.5.2

MGS e' compilabile solo con le ultime versioni della CommonC++2 (consigliata la versione 1.2.5) per differenze di namespace della suddetta libreria con le versioni precedenti.

Licenza: GPL

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Generato il Sun Nov 28 13:27:03 2004 per MGS - Multithreaded Game Server da doxygen 1.3.4