[de] Benachrichtigung wenn ein neuer Client connected ist (solved)

Topics: Technical Support
May 27, 2011 at 4:03 PM

Hey, erstmal muss ich sagen, das ihr wirklich spitzen Arbeit leistet :)

Also, ich benutze das Chat Beispiel und frage mich nun, wie ich dort eine funktion hinzufügen kann, die immer eine Nachricht in der Konsole ausgibt, in der z.b steht "new Client connected with the ip 2.2.2.2 and nickname .... ".

Das soll lediglich in der Server Software integriert werden, sprich der Konsole.

Coordinator
May 28, 2011 at 1:11 AM
Edited May 28, 2011 at 1:11 AM

Hallo Threk,

danke für die Blumen.

Die IP-Adresse des Clients auslesen geht derzeit nicht standardmäßig. An die Clientadresse kommt man nur direkt im Transportkanal oder in einer Kanalsenke dran. Da Du aber nicht der erste bist der danach fragt und es durchaus Sinn macht, wenn man die Clientadresse abrufen kann, werde ich das in Zyan einbauen.

Ich habe dazu ein neues Feature im Issue Tracker angelegt: http://zyan.codeplex.com/workitem/1022

Kann ein bischen dauern, bis es umgesetzt ist, aber realisiert wird es definitiv.

Das MiniChat-Beispiel hat momentan keine Registrierungs-Funktion für Benutzer. Jeder im Chat kann also pro Nachricht seinen Nickname ändern.
Es ist ja auch nur ein ganz einfaches Beispiel, um zu zeigen, wie verteilte Events mit Zyan funktionieren.

In einem realen Projekt würde man Register/Unregister-Funktionen einbauen, mit denen sich die Benutzer erst am Chat "anmelden" müssen.
Außerdem würde man eher einzelne Delegaten statt Events einsetzen. Wenn es sehr viele Clients gibt, können Events Probleme machen, da sie ihre Abonnenten nacheinander benachrichtigen. Über einzelene Delegaten hat man die volle Kontrolle und könnte alle Abonnenten parallel benachrichtigen.

Für kleine Sachen sind Events aber trotzdem okay.

May 28, 2011 at 2:59 PM

Ebenfalls hallo,

nur als kleine Anregung: grundsätzlich könnte ja der Client seine IP auch in seinen Nachrichten mitschicken, was keine weitere Implementierung im Zyan Framework erfordert. Und die Nachricht kann ja im MiniChat.Server verarbeitet werden - oder denke ich da zu einfach?

Gruß, Robert

 

Coordinator
May 28, 2011 at 10:54 PM

Ja, das wäre natürlich möglich und es steh jedem frei das in seinen Anwendungen zu tun. Ich finde es allerdings aus folgenden Gründen keine optimale Lösung:

  1. Sicherheitsproblem: Die Serverkomponente kann so nicht überprüfen, ob die IP-Adresse des Clients auch wirklich seine IP-Adresse ist. Ein bösartiger Client könnte sich so Rechte erschleichen.
  2. Unschöne Architektur: Technische Belange (IP-Adresse) möchte ich nicht zusammen mit fachlichen Belagen (z.B. Benutzername, Kunden-Nr, ...) in den selben Typen haben.
  3. Handarbeit: Ich müsste bei jeder Methode daran denken, die IP als Parameter mitzuschicken, obwohl Zyan intern ja bereits automatisch über die Information verfügt. Das wiederspricht dem Credo "Don´t repeat yourself"

Ich werde mir deshalb die Arbeit machen, und eine kleine Kanalsenke schreiben, welche die Client-IP serverseitig abgreift und sie über die Zyan-API komfortabel zur Verfügung stellen.

Gruß

Rainbird

 

Coordinator
Jun 2, 2011 at 3:13 AM

Hallo Zusammen,

ich habe eine neue Quellcode-Version von Zyan eingecheckt (http://zyan.codeplex.com/SourceControl/list/changesets#).
Die ermittelt nun automatisch die Client-IP und gibt sie an den Server weiter.

In den Serverkomponenten kann man die Client-IP jetzt einfach per ServerSession.CurrentSession.ClientAddress abfragen.

Das MiniChat-Beispiel wurde entsprechend erweitert, um die neuen Funktionen zu demonstrieren.

Viel Spaß beim ausprobieren.

Gruß

Rainbird