Client 2 Client

Leserbewertung(4):bewerten...
kommentieren...
Hans Brender

Nachrichtenaustausch zwischen 2 oder mehreren VB-Clients auf einem Rechner oder über mehrere Rechner im Intranet

Zwischen 2 VB-Programmen (Clients) sollen beliebige Nachrichten ausgetauscht werden. Dabei sollen die Programme nicht voneinander abhängig sein, d.h. wenn ein VB-Client nicht läuft, darf die Nachricht  zwar versendet werden, trotzdem muß der Sende-Client ohne Probleme weiterarbeiten.

Voraussetzungen

Nachrichten zwischen 2 (oder mehr) VB-Clients auszutauschen, vielleicht sogar über das Intranet, stellt uns vor keine allzu großen Probleme. Durch minimale Festlegungen schaffen wir es, eine Asynchronität herzustellen. Dies ist notwendig, weil der Empfangsclient vielleicht auf Grund der empfangenen Nachricht einen längeren Prozess startet. Würde die Nachricht synchron an den Empfangsclient gesendet, wäre der Sendeclient für die Zeitdauer des länger andauernden Prozesses nicht in der Lage, weiter zu arbeiten. Die Ursache läßt sich recht einfach nachvollziehen. Wenn wir in einem Programm eine Prozedur oder Funktion aufrufen, bei der ein längerer Prozess stattfindet, wird erst nach kompletter Abarbeit der Prozedur oder Funktion Zeit für zusätzliche Prozesse zur Verfügung gestellt. jegliche Bildschirmausgabe wird unterdrückt. Nur durch Einfügen von DoEvents Befehlen kann Prozessorleistung an andere Teile des Programms abgegeben werden. Liegt diese Prozedur jedoch in einem anderen Programm, oder gar auf einem anderen Rechner, bleibt uns diese Methode vorenthalten.

Für unseren Nachrichtenaustausch zweier oder mehrerer Programme benötigen wir einen Server, hier Austausch-Server genannt. Jeder Client meldet sich bei diesem Server an.

Der Server

Der Server enthält eine Form frmAustausch, ein Modul basAustausch für die gemeinsamen globalen Variablen und zwei Klassen clsInfo und clsAustausch. Die Instanz-Eigenschaft der Klasse clsInfo ist privat, in Ihr werden nur 2 Public-Variablen untergebracht, zu einem eine eindeutige Client-PCNr, zum anderen die Empfangsklasse als Objekt. Die Instanz-Eigenschaft der Klasse clsAustausch wird auf MultiUse eingestellt. Alle Clients sollen des Austausch-Server benutzen und nicht jedesmal eine neue Instanz erstellen.

Die öffentlichen Methoden der Klasse clsAustausch:

IsClientConnected dient zur Anfrage, ob ein bestimmter Client angemeldet ist.
AddObjReference Über diese Funktion wird dem Austauschserver die Empfangsklasse übergeben. Nach Instanzierung muß diese Funktion aufgerufen werden, damit der Server Nachrichten an den Anmelder zurückschicken kann
DropObjReference Diese Funktion dient zum Abmelden des Clients
SendMessage Durch den Aufruf dieser Methode wird die Nachricht an einen anderen Client verschickt.

Die private Methoden der Klasse clsAustausch:

Class_Initalize Bei der ersten Instanzierung wird die globale Collection  g_colInfo für Empfangsklassen instanziert und ein ein globaler Zähler g_iCountConnection inkrementiert
Class_Terminate Mit jeder Abmeldung eines Clients wird der globale Zähler g_iCountConnection dekrementiert, bei 0 wird die Form frmAustausch auf Nothing gesetzt. Diese Form dient lediglich als Container für einen Timer, der für die asynchrone Entkopplung zwischen Client und Server sorgt.

Die Projekteigenschaften des Austausch-Servers:

Projekttyp ActiveX-EXE
Startobjekt Sub Main
Projektname HBAustausch
Projektbeschreibung HBsoft Datenaustausch zwischen Clients
Versionskompatibilität Binär


die Clients

Beide Clients sind bis auf eine einzige Konstante iCLIENT identisch. Diese Konstante ist im Client1 mit 1 1, im Client2 mit 2 festgeschrieben. Alle anderen Methoden, Eigenschaften etc. sind absolut gleich. Die beiden Clients enthalten eine Testform frmClient , ein Modul welches die Sub Main enthält und eine Klasse clsEmpfang (Instanz-Eigenschaft SingleUse)  mit einer einzigen öffentlichen Methode ReceiveMessage. Um die Instanz der clsEmpfang auf SingleUse einzustellen, ist es notwendig, daß der Projekttyp der Clients als ActiveX.Exe eingestellt ist.

Die Projekteigenschaften:

  Client 1 Client 2
Projekttyp ActiveX-EXE ActiveX-EXE
Startobjekt Sub Main Sub Main
Projektname Client1 Client2
Projektbeschreibung Austausch Test Client 1 Austausch Test Client 2