|
|
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.
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 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 |
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 |
| |
|
|  |
|