Salve ragazzi, e da tempo che non scrivo, collego, o faccio altro.
Colpa un po' della vita frenetica che mi ritrovo.
Ormai ho una certa età e mi ritrovo a fare l'amministratore delegato di un'azienda.
Ma... le passioni rimangono
Anche se ho fallito miseramente con Mire, Voglio che tutto il lavoro non vada perduto.
Chi ha seguito in tutti questi anni tutto il mio percorso, sà che parte del motore integrante di Mire è di MMORpgmaker.
Un progetto che nacque molti anni prima ma mai portato avanti.
Un po' per inesperienza, un po' per abbandono dedicandomi esclusivamente a Mire.
Quello che sto facendo ultimamente, e di trasportare la vecchia tecnologia obsoleta su Core.
Chi non sà di cosa parlo, può fare una ricerca su google alla voce .NET Core
Ma cosa più importante per cui lo sto facendo, non è tanto per il motore ma per il Server ed il Working Core, e del suo funzionamento.
In effetti, googlando, mi sono reso conto che non ho caricato più aggiornamenti gli ultimi siti riportano ancora la primissima versione beta del programma.
Anche se la reposity è ancora incompleta, pian piano appena ho tempo la sera, copio e incollo parti mancanti adattando il tutto alla tecnologia .NET Core.
Da questa reposity su Github, potete avere accesso ai sorgenti e capire come funziona un motore di gioco Multipiattaforma. Ma cosa più importante, come un server gestisce le informazioni.
Vi allego il link della reposity
MakingItalia/MMORpgmaker: MMORpgmaker (github.com)
Requisiti:
Net 6.0 ( Core )
MySQL ( Basta scaricare ed installare appServ - Server Web e Database MySQL )
Ovviamente basta fare git clone
1) Modificate il file nella cartella MMORpgmaker\Server\Program.cs
Modificare le seguenti righe
string mysql_host = "127.0.0.1"; int mysql_host_port = 3306; string mysql_user = "root"; //username del MySQL string mysql_pass = ""; //Password del MySQL string mysql_db = ""; //Vostro Database
2) Compilate il progetto spostandovi nella cartella principale del git ovvero in MMORpgmaker
apriamo una console, e digitiamo:
dotnet build -nowarn:1303
Questo indipendentemente dal sistema operativo su cui siamo.
3) Ci spostiamo nella cartella server (sempre da terminale) -> cd Server
e scriviamo
dotnet run
Partirà la configurazione del server, scrivete tutti i campi come sopra per la configurazione
Il programma creerà automaticamente le tabelle sul database ed i relativi dati di esempio.
ad un certo punto il programma crasha. niente di anomalo.
Andiamo in
MMORpgmaker\Server\data\Config.txt
E' apparso questo file, modifichiamolo e dentro scriviamo la configurazione manualmente
server_ip:127.0.0.1 server_port:6400 mysql_ip:127.0.0.1 mysql_db:mmorpgmaker mysql_user:root mysq_pass:vostra_password
salviamo il txt, e riavviamo il server con dotnet run
a questo punto il server è cofigurato ed'è pronto
invece per il client, semplicemente:
dotnet run
o se siete in windows, aprire direttamente l'exe che abbiamo creato compilando il progetto.
Per capire come funziona il server, vi basta aprire il progetto Packet ( Packet.dll )
Che sarebbe il Core Work di tutto il server.
Il Server è strutturato su Paccheti serializzati in bytes con un specifico Header.
Cosa significa esattamente?
Che ogni pacchetto scambiato Client / Server non supera una certa soglia di bytes.
MMORpgmaker usa pacchetti che non superano i 60bytes quindi potete immaginare la potenza e la velocità di cui trasmette informazioni, ma soprattutto di quanti utenti può mantenere sfruttando piccolissime porzioni di bytes.
Aprendo la libreria MMORpgmaker/PacketData.cs at master · MakingItalia/MMORpgmaker (github.com)
Troviamo in fondo gli Header Packet.
Che in pratica con un uint valore esadecimale identifica il tipo di comando che server o client impartisce in modo da interpretarlo.
Esempio il client invia al server
ACT_LOGIN = 0x41
quindi 0x41 , il server legge prima di tutto l'header in seguito recupera gli argomenti contenuto nel body del pacchetto.
ricava i valori, e rispedisce al client l'azione. in questo caso, un true o un false al login, equivale a 0x01 = true 0x00 false
Per il resto cercherò magari in futuro di spiegare più dettagliatamente come funziona il server.
Perché è abbastanza complesso da capire.
Ma appreso il funzionamento potete usarlo tranquillamente anche per progetti su Unity esempio.
Moltissimi server che trovate in giro fatti in C# inviano stringhe di dati che poi vengono interpretate.
Ma MMORpgmaker non funziona così.
Interpretare una stringa provoca un dispendio di risorse enorme. oltre ad un numero imprecisato ed inutile di carattere ansi che in seguito vengono ignorati.
Questo server ha delle capacità e potenziali enormi.
Ho studiato per tantissimo tempo il metodo perfetto per creare un server degno di rispetto.
Difatti, molti progetti nati come MMORpg sono stati abbandonati proprio perché il server non riusciva a gestire numerose mole di dati.
Bhe.. che potevate aspettarvi se si inviano stringe pesantissime e inutili dove ci interessa un singolo byte il resto è solo spazzatura
Spero di non avervi annoiato.
Ma se siete interessati, potete continuare ad osservarne gli sviluppi o meglio dire, il wrapping da .NET a Core
Saluti dal vostro vecchio amico Thejuster