Parsen erledigt bei euch der MapManager? Wäre es nicht sinnvoller dafür eine Zwischenschicht zu implementieren? Die könnte ja parsen und dann die jeweiligen Befehle weiterreichen. Doppelt müsstest du da eigentlich auch nichts erledigen.
Da habe ich mich bewusst gegen entschieden, da ich auf diese Weise auf Clientseite nicht unterscheiden muss, ob ich online oder offline bin. Das Spiel produziert nur Befehle in Form von Strings und gibt sie an die Clientklasse weiter. Diese entscheidet dann, ob sie es direkt an den MapManager sendet, oder per TCP verschickt. Der Server pflückt nur den TCP Stream auseinander und reicht die Stringbefehle seinerseits an den MapManager weiter. Genauso erhält die Clientklasse die Antwort entweder über den TCP Stream oder direkt vom MapManager lokal.
Bei einer Zwischenschicht müsste ich im Spiel selbst unterscheiden, ob ich Befehle ausführe, oder verschicke. Das erledigt jetzt die Clientklasse, da die Befehle immer per String kommen.
Ein weiterer Vorteil dieses Ansatzes ist, dass ich das komplette Handling in einer Klasse mit Multithreading liegen habe (Da sind insgesamt 5 parallele Threads am Werk). Gerade wenn es z.B. um das Generieren von Terrain geht, was recht rechenaufwändig ist, habe ich hier beim lokalen Spiel einen enormen Performancegewinn, als wenn der MapManager direkt angesprochen würde. So hatte ich es nämlich vorher und das war echt übel...
Und PS: Auf diese Weise ist es später auch sehr leicht, ein lokales Spiel ebenfalls z.B. als LAN-Spiel zu öffnen.