# Kapselung der Netz-Objekte



## Scarabol (28. Feb 2012)

Hey Leute,

ich versuche mich gerade an einem kleinen Netzwerkspiel und springe die ganze Zeit zwischen mehreren Ansätzen wie ich die Objekte am besten verpacke:

1. Client und Host benutzen die gleichen Klassen
- Vorteil: wenig Implementierungsarbeit, Objekte können "einfach" verschickt werden
- Nachteil: Client und Host brauchen teills sehr unterschiedliche Funktionalitäten für das Objekt, daher viel Overhead und/oder ungültige Zugriffe, da das Objekt ja immer 2 Seiten hat. So werden auf dem Host z.B. keine Bilder geladen und können daher auch nicht nach ihrer Größe abgefragt werden.

2. Client und Host benutzen für jedes Objekt im Spiel eine eigene Klasse
a) Die Klassen erben von einer gemeinsamen Basisklasse, die über das Netzwerk verschickt werden kann und die "wichtigen" Member enthält die auf beiden Seiten gültig sind. Dabei sind die Erweiterungen von Client und Server immer transient.

b) Es gibt drei Sätze von Klassen für jedes Spielobjekt, eine beim Client, eine beim Host und eine Klasse, die über das Netzwerk verschickt werden kann. Beim Versenden und Empfangen werden die Objekte nun von der "lokalen" Klasse (Client oder Host) in eine Instanz einer Netzwerk Klasse gepackt und bei Empfang wieder in eine "lokale" Instanz umgewandelt.
- Vorteil: Es werden immer Kopien der Objekte verschickt, unerwünscht mitgesendete Daten kann es so fast nicht geben.
- Nachteil: Implizit wird erstmal gar nichts gesendet

Da ich "fast" keine Ahnung von "echter" Programmierung habe, würde mich interessieren, wie man sowas "in echt" angeht???

Gruß
Scarabol


----------



## Massenhaft (29. Feb 2012)

Hi,

ich habe mich auch mal an einem Netzwerkspiel versucht. Ich habe nur Nachrichten verschickt und
keine expliziten  POJOs. Die Nachrichten sind durch "OPCodes" gekennzeichnet.

```
ENTITY_POSITION ((byte) 0x9, 18),
```
In den Nachrichten ist die "gemeinsame" Entity-Id für den Client und Server vermerkt, dadurch ist klar für welches POJO die Nachricht war. Die POJOs konnte ich im Client und Server nutzen.
Das gesamte Projekt findest du unter:
slick-netty-network-game-example - An UDP 2d netwok game example - Google Project Hosting


----------



## Scarabol (29. Feb 2012)

Hi, danke für die Infos.

Hier gehts mir lediglich um die Infos, wie ich das ganze in Code gieße. Aber falls es dich interessiert, ich schick die Objekte einmal über TCP rüber, wenn Sie erstellt werden und update die Objekte dann nur noch mit UDP Packeten die aus der ID und der Information bestehen, so ähnlich wie du denke ich.

Gruß
Scarabol


----------



## strade87 (29. Feb 2012)

DU könntest natürlich auch ein eigenes Protokoll entwickeln, mit dem du dann nur die eigentlchen Nutzdaten sendest und daraus wieder das Ursprungspaket generieren kannst. Hat natürlich den Nachteil, dass du selber die Bauanleitung für die Pakete schreiben musst.
Wenn du kaum Content hast würde ichs aber machen, wies Massenhaft vorgeschlagen hat.


----------

