La domanda generale: come posso scrivere una struttura di messaggistica flessibile, ma non di proprietà, per inviare messaggi TCP a client e server?
Esempio:
Ho un server TCP per un gioco che invia alcuni messaggi tramite socket TCP ai client:
-
Messaggi di chat, inclusi testo di chat, chat room e altoparlante.
-
Messaggi di gioco, comprese azioni ed eventi
-
Messaggi client, inclusi i client che si connettono, si collegano e si disconnettono
Per raggiungere questo obiettivo, quando una di queste azioni si verifica all'interno del programma, viene chiamato un gestore di eventi che genera un determinato tipo di evento.
ChatEvent with ChatEventArgs
GameEvent with GameEventArgs
ClientEvent with ClientEventArgs
Tutti estendono la classe EventArgs
.
Ora alla mia domanda. Man mano che le cose diventano più complesse, comincio a racchiudere più informazioni in questi EventArgs
. My GameEventArgs inizia come
GameEventArgs gameArgs = new GameEventArgs(GameAction.Start);
gameArgs.gameId = "gameId123";
gameArgs.turn = "thisPlayersTurn";
JSON json = GameEventArgs.ToJson(gameArgs);
SendMessageToClient(json);
Da questo puoi capire che GameEventArgs ha alcune proprietà pubbliche come gameId
e turn
. Ma un gioco è più che ID e Turni. Il cliente dovrà ricevere azioni di gioco, che possono essere molto complesse. All'improvviso GameEventArgs ha bisogno di sempre più proprietà. Questo va bene, tranne , che solo alcune di queste proprietà saranno inviate alla volta. Potrebbero esserci 20-40 proprietà inutilizzate di GameEventArgs. Dovrei creare più classi che ereditano GameEventArgs e contengono solo determinate proprietà? Invierò spesso messaggi e desidero prendere in considerazione il GC poiché questi messaggi sono utilizzati una sola volta. (Dovrebbero quindi essere IDisposable?).
Esiste un metodo migliore per la creazione di una struttura di messaggistica, in cui verranno utilizzate solo alcune delle proprietà definite del messaggio in una sola volta?