Methodencall mit Parametern via SDL_net?
-
Hi,
folgende Situation: Client und Server verwenden SDL_net zur Kommunikation via TCP. Der Server verfügt zur Laufzeit über eine Instanz der Klasse
Beispiel
, die zwei Methodenbool bar(int i, int j, string k)
unddouble foo(int i, int j)
hat. Die sind absolut frei erfunden und nur als Beispiel gemeint ^^Nun möchte der Client, dass der Server die Methode
bar
mit den Parametern3
,-5
und"Hello World"
aufruft. Wie gehe ich da vor? Ich kann dem Server ja die Parameter schicken, nur keinen Methodenzeiger (zumindest wäre das imho nicht sinnvoll, da sich hinter dem Pointer irgendwas anderes verbergen könnte).Da fehlt mir konzeptionell noch der Anhaltspunkt ^^
LG Glocke
PS. Oder andere Idee: Für jede Methode gibt es einen eigenen Socket über den Parameter und Ergebnisse fließen. Der Client sagt dem Server über einen Kontrollfluss-Socket "lies jetzt auf Socket XY", liest dort (erhält die Parameter, callt die Function und sendet das Ergebnis zurück zum Client) und geht dann zum Kontrollfluss-Socket (wo die nächste Aufgabe wartet). Und dieses ganze Gebilde pro Client
-
Nun möchte der Client, dass der Server die Methode bar mit den Parametern 3, -5 und "Hello World" aufruft.
Das ist wohl der falsche Ansatz. Du schreibst doch die Anwendung und entscheidest während der Entwicklung, was der Server tun und lassen soll - und nicht der Client zur Laufzeit.
Der Client sendet dann zB Daten zur Laufzeit an den Server, welcher dann anhand der Daten (oder auch anderer Einflüsse) entscheidet, was gemacht werden soll / welche weiteren Methoden aufgerufen werden sollen...
-
Warum ist das der falsche Ansatz? Der Server soll den Client (wie es der Name sagt) "bedienen". Wenn der Client im Model etwas tun will (was durch Methode foo gemacht wird) und sich das Model auf dem Server befindet, dann muss der Client ihm doch sagen "mache foo mit den folgenden Parametern". Und dies macht der Client selbstverständlich zur Laufzeit. Und eine Information die der Server erhält ist "benutze foo".
Ich versteh' das Problem nicht :p
-
Ich habe Dich so verstanden, dass Du als Client eine Methode aufrufen willst, und das erscheint mir unsinnig.. wieso sollte der Client Kenntnisse über die Methoden des Servers haben? ..rein programmiertechnisch.
Schick Deine Parameter rüber und irgendeine Kennung, was das für Daten sind. Das muss meiner Meinung nach nicht der aufzurufende Methodenname sein. (Und dann hättest Du auch keine Probleme mit Funktionszeigern.. )Also wenn der Client zB einen Tastendruck verarbeiten musste, schickt er eine entsprechende ID an den Server, die für Tastendruck steht und gleichzeitig die Taste, die gedrückt wurde. Der Server macht den Rest. Und zwar das, was Du beim programmieren des Servers für die Tastendruck-ID definiert hast.
Also ist Dein erster Ansatz gar nicht ganz verkehrt, nur die Methodenaufrufe störten mich
Spass haben
-
iop schrieb:
Schick Deine Parameter rüber und irgendeine Kennung, was das für Daten sind. Das muss meiner Meinung nach nicht der aufzurufende Methodenname sein. (Und dann hättest Du auch keine Probleme mit Funktionszeigern.. )
So hatte ich das auch gedacht, wusste nur nicht ob es etwas "einfacheres" gibt. Im Grunde muss ich als Kennung ja nur eine Nummer (die beide Seiten gleich verstehen) rüberschicken und die "switchen", um die richtige Funktion zu callen.
Einen Zeiger zu versenden hatte ich von Anfang an (auch wenn ich es nicht explizit so formuliert hatte) nicht vor.
Wie siehts bzgl. des 2. Ansatzes aus mit den Sockets pro Aktion? Wahrscheinlich ne Nummer zu viele Kanonen für die Schwarm an Spatzen?
LG Glocke
-
Ich habe bisher keine Erfahrungen mit mehr als einem Socket gleichzeitig - damit konnte ich aber auch alles machen, was ich wollte. Kann natürlich sein, dass es im "Profibereich" Anwendungsfälle gibt, in denen das sinnvoll ist, aber ich denke, für den Anfang wirst Du auch nur mit einem Socket genug zu tun haben.. ein paar Pakete rumschicken ist nicht schwer, eine gut funktionierende, stabile und schnelle Kommunikation aufzubauen kann Dich ein paar Tage wachhalten, auch nur mit einem Socket
..wobei, ich seh grad, dass Du SDL_net verwenden willst, das kenn ich auch nicht Aber mach erstmal mit einem Socket und denke über Umstrukturierung nach, wenn irgendwas echt nicht mehr geht.
Spass haben
-
iop schrieb:
eine gut funktionierende, stabile und schnelle Kommunikation aufzubauen kann Dich ein paar Tage wachhalten, auch nur mit einem Socket
Ja ich weiß _ Hab vor ner Weile mit Java (wegen Studium) nen Socket-basierten Chatroom basteln dürfen und das war teilweise schon "anstrengend" (und spaßig )
iop schrieb:
..wobei, ich seh grad, dass Du SDL_net verwenden willst, das kenn ich auch nicht Aber mach erstmal mit einem Socket und denke über Umstrukturierung nach, wenn irgendwas echt nicht mehr geht.
Klingt einleuchtend
iop schrieb:
Spass haben
Dankööö