Sto scrivendo un'applicazione che invia e riceve messaggi attraverso la rete e li spinge in una coda std::deque
. e sto cercando il modello di programmazione appropriato per gestire tutti i diversi tipi possibili di messaggi che potrebbe ricevere.
Ogni tipo di messaggio avrà un insieme di dati completamente diverso. Ad esempio:
-
Connessione riuscita
-
scollegamento
-
Un altro peer connesso
- Nome peer
- Indirizzo peer
- Altro stato peer
-
Stato dell'oggetto sincronizzazione
- posizione delta
- rotazione delta
- altro stato dell'oggetto
-
Meta Event A
- Alcuni dati
-
Meta Event B
- Alcuni dati
Etc.
La mia reazione iniziale è creare una classe base Message
e quindi creare sottoclassi ObjectSyncMessage
, MetaEventAMessage
, PeerConnectedMessage
, ecc. perché ogni messaggio richiede variabili membro completamente diverse rispetto agli altri eventi.
Mi blocco quando vado ad elaborare la coda dei messaggi. Tutto ciò che ho letto dice di evitare l'uso di un interruttore e di determinare a quale classe appartiene un messaggio (vedi qui ).
C'è un modo migliore per affrontare questo problema? Non penso di volere che i messaggi stessi agiscano sullo stato del resto della mia applicazione, ma piuttosto fungono da sacchetti di dati e mi permettono di gestire lo stato della mia applicazione nella classe che funziona attraverso la coda.