Zum Hauptinhalt springen

MsxOpen

MsxOpen(int1, handle2) : handle

Ausführbar von Clients mit grafischer Oberfläche Ausführbar vom Server Ausführbar von Clients mit Programmierschnittstelle Ausführbar von der Web-Schnittstelle Ausführbar vom Druckprozessor Ausführbar von der ODBC-Schnittstelle Ausführbar vom SOA-Service

Nachrichtenkanal öffnen

Details

Mit diesem Befehl wird ein Datenaustauschkanal geöffnet, welcher das Schreiben oder Lesen von Nachrichten in beliebiger Anzahl und Größe ermöglicht. Die Kommunikation kann entweder über eine Socket-Verbindung , über eine externe Datei oder über den Prozessspeicher hergestellt werden. Die Art der Verbindung (_MsxSocket / _MsxFile / _MsxThread / _MsxProcess) und ob Daten geschrieben (_MsxWrite) oder gelesen (_MsxRead) werden sollen, wird im Parameter (int1) angegeben.

In (handle2) wird der entsprechende Deskriptor (Socket-Verbindung, geöffnete Datei oder Job - bzw. JobControl -Objekt) übergeben. Es kann nur eine Konstante für die Verbindung mit einer Konstanten für die Datenrichtung kombiniert werden.

Die Kommunikation zwischen einem Client bzw. einer Ereignisfunktion des SOA-Service und einem als Thread gestartetem Job oder zwischen zwei als Thread gestarteten Jobs erfolgt über den Prozessspeicher.

Zum Verbindungsaufbau aus der Ereignisfunktion oder einem Job, muss das JobControl -Objekt des zu erreichenden Jobs übergeben werden. Zur Verbindungsannahme im Job, muss das Task-Objekt des Jobs übergeben werden.

Zum Erzeugen des Kanals muss in der Ereignisfunktion der Deskriptor des JobControl -Objekts übergeben werden. In einer mit JobStart () gestarteten Funktion muss der Kanal mit dem übergebenen Task -Objekt geöffnet werden.

Außer bei einem Kanal über eine externe Datei, kann ein Kanal zum Senden (Schreiben) und zum Empfangen (Lesen) von Nachrichten verwendet werden. In diesem Fall müssen dann zwei Kanäle mit dem selben Deskriptor geöffnet werden.

Um Nachrichten über Sockets zu empfangen, muss beim Empfänger ein Nachrichtenkanal zum Lesen geöffnet werden. Dazu kann ein SckListen () durchgeführt werden. Im darauf folgenden EvtSocket können die Daten dann abgeholt werden. Falls die Nachrichtenübertragung über eine Datei durchgeführt wird, kann der Empfänger das Dateiverzeichnis entweder mit FsiMonitorAdd () überwachen oder den Empfang zu einem selbst definierten Zeitpunkt durchführen. Beim Überwachen des Verzeichnisses wird ebenfalls ein Ereignis, das EvtFsiMonitor, ausgelöst.

Beispiele:

// Nachricht über Socket versenden
tSck # SckConnect('10.1.1.16', 1250);
if (tSck > 0)
{
tMsx # MsxOpen(_MsxSocket | _MsxWrite, tSck);
...

// Nachricht über externe Datei lesen
tFile # FsiOpen(tFileName, _FsiStdRead);
if (tFile > 0)
{
tMsx # MsxOpen(_MsxFile | _MsxRead, tFile);
...

Folgende Laufzeitfehler sind möglich:

  • _ErrHdlInvalid: Der übergebene Socket- oder Dateideskriptor ist ungültig.
  • _ErrValueInvalid: Es wurde in (int1) eine ungültige Konstantenkombination übergeben.