"EventPipe"

Schnelle objektorientierte, kompilierende Programmiersprache.
Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: "EventPipe"

Beitrag von Glocke » Do Jan 17, 2013 12:22 am

Xin hat geschrieben:Den Event-Konstruktor solltest Du Dir nochmal ansehen.
Inwiefern?
Xin hat geschrieben:Was das Casten angeht, wirst Du da kaum drumrumkommen.
Ich hab's geahnt :D
Xin hat geschrieben:Wenn Du vermeiden möchtest, viele Fragen stellen zu müssen, erstellst Du ein Array mit Funktionspointern und benutzt die event_id, um die Funktion zu finden, die das entsprechende Event bearbeitet.
Du meinst mit schlauesarray[event->event_id] den Funktionszeiger holen? Setzt das nicht voraus, dass die Funktionen alle die gleiche Signatur verwenden - und damit alle den gleichen Event-Typ bekommen (also Event) - d.h. ich muss das Event dann in der Funktion casten? Das müsste auch mit Methodenzeigern klappen, oder?

Benutzeravatar
Yoghurt
Beiträge: 79
Registriert: Fr Nov 16, 2012 8:01 am
Wohnort: Niederbayern

Re: "EventPipe"

Beitrag von Yoghurt » Do Jan 17, 2013 8:09 am

Glocke hat geschrieben:
Xin hat geschrieben:Was das Casten angeht, wirst Du da kaum drumrumkommen.
Ich hab's geahnt :D
Warum? Wenn du das ganze Objekt hast, kannst du ja einfach die Methode do_event ausführen, oder hab ich da einen Denkfehler?
Glocke hat geschrieben:
Xin hat geschrieben:Wenn Du vermeiden möchtest, viele Fragen stellen zu müssen, erstellst Du ein Array mit Funktionspointern und benutzt die event_id, um die Funktion zu finden, die das entsprechende Event bearbeitet.
Du meinst mit schlauesarray[event->event_id] den Funktionszeiger holen? Setzt das nicht voraus, dass die Funktionen alle die gleiche Signatur verwenden - und damit alle den gleichen Event-Typ bekommen (also Event) - d.h. ich muss das Event dann in der Funktion casten? Das müsste auch mit Methodenzeigern klappen, oder?
Die Idee find ich cool. 8-)
Ich denke vermutlich manchmal zu objektorientiert um die einfachen (besseren) Lösungen in C++ zu finden. :)

Die Funktionen sind ja eigentlich schon die Events, die dann ausgeführt werden sollen. Du musst eig. nur die Event-Daten mitübergeben bzw. über das Netzwerk schieben. Die kannst du ja in einer Basisklasse kapseln. Dann könnte die Signatur der Event-Funktionen immer gleich sein.
Zum Beispiel:

Code: Alles auswählen

 void do_event(EventData*) 
Je nachdem was für ein Event ausgelöst wurde weißt du ja dann was für Daten du erwartest/bekommst und kannst diese dann konvertieren/casten.
"Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: "EventPipe"

Beitrag von Xin » Do Jan 17, 2013 12:31 pm

Yoghurt hat geschrieben:
Glocke hat geschrieben:
Xin hat geschrieben:Was das Casten angeht, wirst Du da kaum drumrumkommen.
Ich hab's geahnt :D
Warum? Wenn du das ganze Objekt hast, kannst du ja einfach die Methode do_event ausführen, oder hab ich da einen Denkfehler?
Eine statische Methode der Basisklasse wüsste nicht, um was für ein (abgeleitetes) Objekt es sich handelt.
Yoghurt hat geschrieben:
Glocke hat geschrieben:
Xin hat geschrieben:Wenn Du vermeiden möchtest, viele Fragen stellen zu müssen, erstellst Du ein Array mit Funktionspointern und benutzt die event_id, um die Funktion zu finden, die das entsprechende Event bearbeitet.
Du meinst mit schlauesarray[event->event_id] den Funktionszeiger holen? Setzt das nicht voraus, dass die Funktionen alle die gleiche Signatur verwenden - und damit alle den gleichen Event-Typ bekommen (also Event) - d.h. ich muss das Event dann in der Funktion casten? Das müsste auch mit Methodenzeigern klappen, oder?
Die Idee find ich cool. 8-)
Ich denke vermutlich manchmal zu objektorientiert um die einfachen (besseren) Lösungen in C++ zu finden. :)
Das ist die Lösung, die C++ für Objektorientierung <üblicherweise> verwendet. Nur kannst Du sie hier nicht verwenden, weil ein Zeiger auf dieses Funktionsarray auf dem Client eben an einer anderen Stelle im Speicher liegt als auf dem Server.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Yoghurt
Beiträge: 79
Registriert: Fr Nov 16, 2012 8:01 am
Wohnort: Niederbayern

Re: "EventPipe"

Beitrag von Yoghurt » Do Jan 17, 2013 1:09 pm

Xin hat geschrieben:
Yoghurt hat geschrieben:Warum? Wenn du das ganze Objekt hast, kannst du ja einfach die Methode do_event ausführen, oder hab ich da einen Denkfehler?
Eine statische Methode der Basisklasse wüsste nicht, um was für ein (abgeleitetes) Objekt es sich handelt.
Ich muss ja keine statischen Methoden machen, oder?
Falls ich solche generelle (statische) Methoden in meiner Klasse haben will kann ich die ja auch in der Basisklassen definieren.
Und bei den anderen weiß die Instanz ja sowieso was sie ist.
Xin hat geschrieben:
Yoghurt hat geschrieben:Die Idee find ich cool. 8-)
Ich denke vermutlich manchmal zu objektorientiert um die einfachen (besseren) Lösungen in C++ zu finden. :)
Das ist die Lösung, die C++ für Objektorientierung <üblicherweise> verwendet.
Wie meinst du das?
Xin hat geschrieben:Nur kannst Du sie hier nicht verwenden, weil ein Zeiger auf dieses Funktionsarray auf dem Client eben an einer anderen Stelle im Speicher liegt als auf dem Server.
Auf dem Client brauche ich dieses Array eigentlich ja nicht oder?
Ich hab mir das jetzt so vorgestellt: Der Client schickt die Event-ID an den Server und der schaut im Array nach zu welcher Funktion das Event gehört und führt diese dann aus.
"Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: "EventPipe"

Beitrag von Xin » Do Jan 17, 2013 1:43 pm

Yoghurt hat geschrieben:
Xin hat geschrieben:
Yoghurt hat geschrieben:Warum? Wenn du das ganze Objekt hast, kannst du ja einfach die Methode do_event ausführen, oder hab ich da einen Denkfehler?
Eine statische Methode der Basisklasse wüsste nicht, um was für ein (abgeleitetes) Objekt es sich handelt.
Ich muss ja keine statischen Methoden machen, oder?
Sorry, missverständlich ausgedrückt... eine Methode ist eine statische Funktion, die als ersten Parameter den this-Zeiger bekommt - im Gegensatz zu einer statischen-Funktion, die keinen this-Pointer hat. Beide Funktionen sind prinzipiell aber statisch.

Ich meinte, dass es sich eben nicht um eine virtuelle Funktion handelt, wo zur Laufzeit eben noch nicht feststeht, welche Funktion genau benutzt wird.
Yoghurt hat geschrieben:Und bei den anderen weiß die Instanz ja sowieso was sie ist.
Eine Methode von class Tier weiß nicht, ob es ein class Katze oder ein class Hund vor sich hat.
Yoghurt hat geschrieben:
Xin hat geschrieben:
Yoghurt hat geschrieben:Die Idee find ich cool. 8-)
Ich denke vermutlich manchmal zu objektorientiert um die einfachen (besseren) Lösungen in C++ zu finden. :)
Das ist die Lösung, die C++ für Objektorientierung <üblicherweise> verwendet.
Wie meinst du das?
Virtuelle Funktionen werden über ein Array von Funktionspointern realisiert. Nicht grundsätzlich, aber ich halte es für unwahrscheinlich, dass es jemand anders macht.
Yoghurt hat geschrieben:
Xin hat geschrieben:Nur kannst Du sie hier nicht verwenden, weil ein Zeiger auf dieses Funktionsarray auf dem Client eben an einer anderen Stelle im Speicher liegt als auf dem Server.
Auf dem Client brauche ich dieses Array eigentlich ja nicht oder?
Ich hab mir das jetzt so vorgestellt: Der Client schickt die Event-ID an den Server und der schaut im Array nach zu welcher Funktion das Event gehört und führt diese dann aus.
Wäre dies über C++ Mittel realisiert, müsste der Client dieses Array in jedem Fall haben. Da der Virtual-Table-Pointer dann aber auf die VTable des Clienten zeigt, ist dieser Pointer beim Server mit an Sicherheit grenzender Wahrscheinlichkeit ein Zeiger ins Nirwana.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Yoghurt
Beiträge: 79
Registriert: Fr Nov 16, 2012 8:01 am
Wohnort: Niederbayern

Re: "EventPipe"

Beitrag von Yoghurt » Do Jan 17, 2013 2:22 pm

Xin hat geschrieben:
Yoghurt hat geschrieben:Ich muss ja keine statischen Methoden machen, oder?
Sorry, missverständlich ausgedrückt... eine Methode ist eine statische Funktion, die als ersten Parameter den this-Zeiger bekommt - im Gegensatz zu einer statischen-Funktion, die keinen this-Pointer hat. Beide Funktionen sind prinzipiell aber statisch.
Ah okay. Wieder etwas gelernt. :)
Xin hat geschrieben:Ich meinte, dass es sich eben nicht um eine virtuelle Funktion handelt, wo zur Laufzeit eben noch nicht feststeht, welche Funktion genau benutzt wird.
Die virtuelle Funktion muss natürlich in einer Subklasse (von der dann die Instanz ist) überschrieben werden. Somit ist die Funktion ja determiniert, oder lieg ich da falsch?
Xin hat geschrieben:
Yoghurt hat geschrieben:Und bei den anderen weiß die Instanz ja sowieso was sie ist.
Eine Methode von class Tier weiß nicht, ob es ein class Katze oder ein class Hund vor sich hat.
Wenn ich eine Klasse Tier habe die meinetwegen die virtuelle Methode bewegen() hat, und diese in den von Tier erbenden Klassen Hund (läuft) und Fisch (schwimmt) überschreibe, dann kann ich doch folgendes machen:

Code: Alles auswählen

Tier* tier;

//tier = new Tier(); //geht nicht wegen virtueller Methode

tier = new Hund();
tier.bewegen() //läuft
delete tier;

tier = new Fisch();
tier.bewegen() //schwimmt
delete tier;

tier = 0;
Xin hat geschrieben:
Yoghurt hat geschrieben:Auf dem Client brauche ich dieses Array eigentlich ja nicht oder?
Ich hab mir das jetzt so vorgestellt: Der Client schickt die Event-ID an den Server und der schaut im Array nach zu welcher Funktion das Event gehört und führt diese dann aus.
Wäre dies über C++ Mittel realisiert, müsste der Client dieses Array in jedem Fall haben. Da der Virtual-Table-Pointer dann aber auf die VTable des Clienten zeigt, ist dieser Pointer beim Server mit an Sicherheit grenzender Wahrscheinlichkeit ein Zeiger ins Nirwana.
Das verstehe ich auch nicht. Warum muss der Client das Array kennen?

Am Client löst irgendwas meinen "do_login" Eventhandler aus.
Dann schreibe ich die LoginEventID in die Liste der Events (Queue oder sonst eine Collection).
Client ist hier fertig.

Dann bekommt der Server übers Netzwerk diese Events.
Er holt sich über das assoziative Array die passende Funktion zum LoginEvent:

Code: Alles auswählen

func = funcArray[LoginEventID];
Dann wird func ausgeführt.

So würde ich mir das ungefähr vom Ablauf her vorstellen.
"Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: "EventPipe"

Beitrag von Xin » Do Jan 17, 2013 2:37 pm

Yoghurt hat geschrieben:
Xin hat geschrieben:Ich meinte, dass es sich eben nicht um eine virtuelle Funktion handelt, wo zur Laufzeit eben noch nicht feststeht, welche Funktion genau benutzt wird.
Die virtuelle Funktion muss natürlich in einer Subklasse (von der dann die Instanz ist) überschrieben werden. Somit ist die Funktion ja determiniert, oder lieg ich da falsch?
Wenn Du das Objekt zwischenzeitlich mal über das Netzwerk bewegst, um dann eine Funktion zu rufen, die dann determiniert wird aufgrund eines Pointers, der für einen anderen Computer gültig wäre... ich würde sagen, dass hier die Chance auf den 6er im Lotto vergleichsweise gut ist. ;-)
Xin hat geschrieben:
Yoghurt hat geschrieben:Und bei den anderen weiß die Instanz ja sowieso was sie ist.
Eine Methode von class Tier weiß nicht, ob es ein class Katze oder ein class Hund vor sich hat.
Wenn ich eine Klasse Tier habe die meinetwegen die virtuelle Methode bewegen() hat, und diese in den von Tier erbenden Klassen Hund (läuft) und Fisch (schwimmt) überschreibe, dann kann ich doch folgendes machen:

Code: Alles auswählen

Tier* tier;

//tier = new Tier(); //geht nicht wegen virtueller Methode

tier = new Hund();
tier.bewegen() //läuft
delete tier;

tier = new Fisch();
tier.bewegen() //schwimmt
delete tier;

tier = 0;
[/quote]
Alles richtig - aber nur solange Du Dich auf dem gleichen Computer befindest.
Und sobald Du das Tier durch ein Kupferkabel verschickt hast, bedeutet

Code: Alles auswählen

tier.bewegen() // explodiert
Vollkommen egal, um welche Tierart es sich handelt ;-)
Yoghurt hat geschrieben:
Xin hat geschrieben:
Yoghurt hat geschrieben:Auf dem Client brauche ich dieses Array eigentlich ja nicht oder?
Ich hab mir das jetzt so vorgestellt: Der Client schickt die Event-ID an den Server und der schaut im Array nach zu welcher Funktion das Event gehört und führt diese dann aus.
Wäre dies über C++ Mittel realisiert, müsste der Client dieses Array in jedem Fall haben. Da der Virtual-Table-Pointer dann aber auf die VTable des Clienten zeigt, ist dieser Pointer beim Server mit an Sicherheit grenzender Wahrscheinlichkeit ein Zeiger ins Nirwana.
Das verstehe ich auch nicht. Warum muss der Client das Array kennen?
Weil der Client sonst die Klasse nicht erzeugen kann. Die Virtual Table gehört zur Klasse dazu. Die Virtual Table ist ein solches Array, nur dass die Virtual Table von C++ verwaltet wird - also eben Bordmittel sind - und das Array halt selbst gestrickt ist, weil man sich die Bordmittel über das Netzwerk kaputt macht.
Yoghurt hat geschrieben:Dann bekommt der Server übers Netzwerk diese Events.
Er holt sich über das assoziative Array die passende Funktion zum LoginEvent:

Code: Alles auswählen

func = funcArray[LoginEventID];
Dann wird func ausgeführt.

So würde ich mir das ungefähr vom Ablauf her vorstellen.
So sollst Du Dir das ja auch vorstellen. Die Idee ist nicht sonderlich innovativ, weil C++ diese Idee bei virtuellen Funktionen genauso benutzt. Da es Bordmittel sind, kommt man aber nicht an sie heran, man kann sie also nicht korrigieren, der Zeiger auf die Virtual-Table zeigt also beim Empfänger ins Nirwana und das kann nicht korrigiert werden. Also funktioniert es mit Bordmitteln nicht und muss nachgebildet werden. Daher die Idee mit dem Funktionspointer-Array.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Yoghurt
Beiträge: 79
Registriert: Fr Nov 16, 2012 8:01 am
Wohnort: Niederbayern

Re: "EventPipe"

Beitrag von Yoghurt » Do Jan 17, 2013 2:58 pm

Xin hat geschrieben:
Yoghurt hat geschrieben:Wenn ich eine Klasse Tier habe die meinetwegen die virtuelle Methode bewegen() hat, und diese in den von Tier erbenden Klassen Hund (läuft) und Fisch (schwimmt) überschreibe, dann kann ich doch folgendes machen:

Code: Alles auswählen

Tier* tier;

//tier = new Tier(); //geht nicht wegen virtueller Methode

tier = new Hund();
tier.bewegen() //läuft
delete tier;

tier = new Fisch();
tier.bewegen() //schwimmt
delete tier;

tier = 0;
Alles richtig - aber nur solange Du Dich auf dem gleichen Computer befindest.
Und sobald Du das Tier durch ein Kupferkabel verschickt hast, bedeutet

Code: Alles auswählen

tier.bewegen() // explodiert
Vollkommen egal, um welche Tierart es sich handelt
Aso. Jetzt versteh ich was du damit meinst. :)
Würde das Tier auch explodieren, wenn man die konkrete Instanz übers Netzwerk verschickt?
Dann hat man ja eigentlich wieder einen Hund (oder Fisch), spricht ihn halt nur als Tier an.
Oder denke ich da zu naiv?
Xin hat geschrieben:
Yoghurt hat geschrieben:Das verstehe ich auch nicht. Warum muss der Client das Array kennen?
Weil der Client sonst die Klasse nicht erzeugen kann. Die Virtual Table gehört zur Klasse dazu. Die Virtual Table ist ein solches Array, nur dass die Virtual Table von C++ verwaltet wird - also eben Bordmittel sind - und das Array halt selbst gestrickt ist, weil man sich die Bordmittel über das Netzwerk kaputt macht.
Yoghurt hat geschrieben:Dann bekommt der Server übers Netzwerk diese Events.
Er holt sich über das assoziative Array die passende Funktion zum LoginEvent:
CODE: ALLES AUSWÄHLEN
func = funcArray[LoginEventID];

Dann wird func ausgeführt.

So würde ich mir das ungefähr vom Ablauf her vorstellen.
So sollst Du Dir das ja auch vorstellen. Die Idee ist nicht sonderlich innovativ, weil C++ diese Idee bei virtuellen Funktionen genauso benutzt. Da es Bordmittel sind, kommt man aber nicht an sie heran, man kann sie also nicht korrigieren, der Zeiger auf die Virtual-Table zeigt also beim Empfänger ins Nirwana und das kann nicht korrigiert werden. Also funktioniert es mit Bordmitteln nicht und muss nachgebildet werden. Daher die Idee mit dem Funktionspointer-Array.
Ah okay. Jetzt glaub ich versteh ich das auch. Und vorallem warum es nicht funktioniert.
Du hast von einer Klasse auf dem Client geredet, die virtuelle Funktionen und somit eine VTable hat.
Mit dem Array von Funktionspointern auf dem Server hätte man diese VTable nachbilden können, irgendwie. :P
Aber natürlich zeigen da die Zeiger auf die falschen Adressen.
Lieg ich diesmal richtig? :)

Ich dachte da jetzt an etwas ohne viel Objektorientierung.
Einfach die Event-ID übers Netzwerk verschicken und mittels der Hash-Map (Key = Event-ID, Value = Funktion) dann die zum Event definierte Funktion finden und aufrufen.
"Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: "EventPipe"

Beitrag von Xin » Do Jan 17, 2013 3:18 pm

Yoghurt hat geschrieben:Aso. Jetzt versteh ich was du damit meinst. :)
Würde das Tier auch explodieren, wenn man die konkrete Instanz übers Netzwerk verschickt?
Dann hat man ja eigentlich wieder einen Hund (oder Fisch), spricht ihn halt nur als Tier an.
Oder denke ich da zu naiv?
Zeiger funktionieren nicht über das Netzwerk. Sobald Du über das Netzwerk was verschickst, sind die zwar Zeiger gültig übermittelt, aber sie gelten halt für einen anderen Computer.
Die Virtual-Table ist ein Zeiger - und der zeigt beim Empfänger zwar genau da hin, wo er auch beim Sender hinzeigt, nur ist beim Empfänger da nicht zwangsläufig der gleiche Inhalt im Speicher.
Yoghurt hat geschrieben:Ah okay. Jetzt glaub ich versteh ich das auch. Und vorallem warum es nicht funktioniert.
Du hast von einer Klasse auf dem Client geredet, die virtuelle Funktionen und somit eine VTable hat.
Mit dem Array von Funktionspointern auf dem Server hätte man diese VTable nachbilden können, irgendwie. :P
Aber natürlich zeigen da die Zeiger auf die falschen Adressen.
Lieg ich diesmal richtig? :)
Bin ich nicht ganz sicher... mit dem Array kannst Du das nachbilden. Weil Du eben nicht den Zeiger auf die VTable übermittelst, sondern lediglich den Index auf eine Funktionimplementation (oder eine selbstgestrickte VTable, wo man sich dann do_event() rausholen kann). Da Server und Client nur über den Index kommunizieren, spielt es keine Rolle, wo die jeweiligen Arrays im Speicher liegen. Darum funktioniert die Kommunikation über den Index / Datentyp, aber eben nicht über die Zeiger auf VTables.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Yoghurt
Beiträge: 79
Registriert: Fr Nov 16, 2012 8:01 am
Wohnort: Niederbayern

Re: "EventPipe"

Beitrag von Yoghurt » Do Jan 17, 2013 3:36 pm

Xin hat geschrieben:Zeiger funktionieren nicht über das Netzwerk. Sobald Du über das Netzwerk was verschickst, sind die zwar Zeiger gültig übermittelt, aber sie gelten halt für einen anderen Computer.
Die Virtual-Table ist ein Zeiger - und der zeigt beim Empfänger zwar genau da hin, wo er auch beim Sender hinzeigt, nur ist beim Empfänger da nicht zwangsläufig der gleiche Inhalt im Speicher.
Okay jetzt hab ichs kapiert. Der Zeiger für die VTable findet einfach seinen Inhalt nicht mehr.
Wie würde man dann sowas in C++ umsetzen? Also wenn ich ein Objekt von einer erbenden Klasse übers Netzwerk verschicken will?
In Java oder C# könnte man ja theoretisch das Objekt serialisieren, verschicken, deserialisieren und dann wieder verwenden.
Xin hat geschrieben:Bin ich nicht ganz sicher... mit dem Array kannst Du das nachbilden. Weil Du eben nicht den Zeiger auf die VTable übermittelst, sondern lediglich den Index auf eine Funktionimplementation (oder eine selbstgestrickte VTable, wo man sich dann do_event() rausholen kann). Da Server und Client nur über den Index kommunizieren, spielt es keine Rolle, wo die jeweiligen Arrays im Speicher liegen. Darum funktioniert die Kommunikation über den Index / Datentyp, aber eben nicht über die Zeiger auf VTables.
Ah okay. So hab ich mir die Kommunikation auch vorgestellt:
Yoghurt hat geschrieben:Ich dachte da jetzt an etwas ohne viel Objektorientierung.
Einfach die Event-ID übers Netzwerk verschicken und mittels der Hash-Map (Key = Event-ID, Value = Funktion) dann die zum Event definierte Funktion finden und aufrufen.
Danke für die vielen Erklärungen und deine Geduld.^^
"Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."

Antworten