Bezeichnung
ReceiveData -- empfängt Daten über das Netzwerk (V5.0)
Übersicht
data$, count, done = ReceiveData(id, mode, ...)
data$, count, done = ReceiveData(id, #RECEIVEBYTES, maxbytes[, callback,
                                     userdata])
data$, count, done = ReceiveData(id, #RECEIVEALL[, untilterm, callback,
                                     userdata])
data$, count, done = ReceiveData(id, #RECEIVELINE[, callback, userdata])
Beschreibung
Dieser Befehl kann verwendet werden, um Daten von einem Server oder einem Client zu empfangen. Wenn Sie Daten von einem Server empfangen möchten, müssen Sie eine ID übergeben, welche beim Befehl OpenConnection() angegeben oder mit ihm erstellt wurde. Wenn es ein Server ist und Daten von einem Ihrer Clients abrufen möchten, müssen Sie die Netzwerkkennung des jeweiligen Clients übergeben. Sie können die Identifikatoren Ihrer Clients abrufen, indem Sie das Ereignisse OnConnect benutzen, welches Sie mit dem Befehl InstallEventHandler() installiert haben.

Das zweite Argument legt fest, wie viele Daten Sie vom Absender erhalten möchten. Derzeit werden folgende Modi unterstützt:

#RECEIVEBYTES:
Empfangen Sie alle verfügbaren Daten, aber nicht mehr als die angegebene Anzahl von Bytes. Wenn Sie diesen Modus verwenden, müssen Sie die maximale Anzahl von Bytes, die Sie empfangen möchten, im dritten Argument maxbytes übergeben. ReceiveData() erhält dann nie mehr Bytes als angegeben. Es kann jedoch vorkommen, dass weniger Bytes zurückgegeben werden, falls nicht genügend Daten vom Absender verfügbar sind. Die Anzahl der übermittelten Bytes werden im zweiten Rückgabewert count enthalten sein.

#RECEIVEALL:
Erhalten Sie alle aktuell verfügbaren Daten. Wenn Sie das optionale Argument untilterm auf True setzen, wird ReceiveData() nichts zurückgegeben, bevor der Absender die Verbindung beendet, so dass Sie alle Daten empfangen können, die ein Absender mit nur einem einzigen Aufruf anbieten kann. Wenn untilterm auf False gesetzt ist, gibt ReceiveData() nur die aktuell verfügbaren Daten zurück. Er wird nicht warten, bis weitere Daten ankommen, aber er wird Ihnen sagen, ob mehr Daten zum Abrufen vorhanden sein werden (im dritten Rückgabewert done). Die Voreinstellung für untilterm ist True, d.h. ReceiveData() liest Daten, bis der Absender die Verbindung beendet.

#RECEIVELINE:
Empfangen Sie eine einzelne Textzeile vom Absender. Dieser Modus darf nur bei nicht binären Daten verwendet werden. Der Wagenrücklauf und das Zeilenumbruchzeichen werden nicht in die zurückgegebene Zeichenkette data$ aufgenommen. Sie werden aus dem Netzwerkpuffer gelesen, aber ReceiveData() nicht zurückgegeben, wenn Sie #RECEIVELINE verwenden.

ReceiveData() gibt drei Werte zurück: Der erste Rückgabewert data$ ist eine Zeichenkette, die die Daten enthält, die vom Netzwerk empfangen wurden, oder eine leere Zeichenfolge, wenn Sie eine Callback-Funktion verwenden, um die Daten zu behandeln oder keine Daten gelesen werden konnten. Bitte beachten Sie, dass obwohl die Daten gelesen werden und als Zeichenkette zurückgegeben werden, ist sie nicht auf Text beschränkt. Sie kann auch binäre Daten enthalten, da die Zeichenketten von Hollywood Steuerzeichen und das Nullzeichen gut verarbeiten können. Der zweite Rückgabewert count gibt an, wie viele Bytes aus dem Netzwerkpuffer gelesen werden konnten. Ist dies 0, stehen derzeit keine Daten zur Verfügung. Der dritte Rückgabewert done ist nur sinnvoll, wenn der Übertragungsmodus #RECEIVEALL mit untilterm auf False gesetzt wurde. In diesem Fall gibt der dritte Rückgabewert an, wenn mehr Daten im Netzwerkpuffer vorhanden sind. Wenn es mehr Daten zu lesen gibt, dann ist done False, sonst ist es True.

Ab Hollywood 6.0 gibt es ein optionales Argument callback, mit dem Sie eine Callback-Funktion übergeben können, die die vom Server gelesenen Daten bearbeiten soll. Dies kann nützlich sein, wenn Sie große Datenmengen empfangen müssen, die nicht effizient in einer Zeichenkette gespeichert werden können. Die Callback-Funktion könnte einfach die empfangenen Daten in eine Datei schreiben. Beachten Sie, dass ReceiveData() immer eine leere Zeichenfolge in data$ zurückgibt, wenn Sie eine Callback-Funktion angeben. Die Callback-Funktion wird mit einem einzigen Argument aufgerufen: Eine Tabelle, die mehr Informationen enthält. Hier eine Übersicht der Tabellenfelder, die initialisiert werden, bevor ReceiveData() Ihre Callback-Funktion ausführt:

Action:
#RECEIVEDATA_PACKET

Data:
Die Daten, die vom Server empfangen wurden. Beachten Sie, dass dieses Feld binäre Daten enthalten kann.

Count:
Enthält die Anzahl der Bytes von Data.

Total:
Enthält die Gesamtanzahl von Bytes, die bereits empfangen wurden.

UserData:
Enthält den Wert, den Sie im Argument userdata übergeben haben.

Die Callback-Funktion des Typs #RECEIVEDATA_PACKET sollte normalerweise False zurückgeben. Wenn sie True zurückgibt, wird ReceiveData() seine Operationen abbrechen.

Schließlich gibt es noch das optionale Argument userdata. Der Wert, den Sie hier angeben, wird bei jedem Aufruf an Ihre Callback-Funktion übergeben. Dies ist sinnvoll, wenn Sie vermeiden wollen, mit globalen Variablen zu arbeiten. Mit dem Argument userdata können Sie einfach Daten an Ihre Callback-Funktion übergeben. Sie können einen Wert eines beliebigen Typs verwenden. Zahlen, Zeichenketten, Tabellen und sogar Funktionen können übergeben werden.

Eingaben
id
Identifikator des Senders
mode
der gewünschte Transfermodus; siehe oben für eine Liste der aktuell unterstützten Transfermodi
...
weitere Argumente; hängen vom angegebenen Übertragungsmodus ab; siehe oben
Rückgabewerte
data$
Daten, welche aus dem Netzwerkpuffer gelesen wurden oder eine leere Zeichenfolge, wenn eine Callback-Funktion angegeben ist
count
Anzahl der erfolgreich übertragenen Bytes
done
ob es mehr Daten im Netzwerkpuffer gibt oder nicht (nur wenn #RECEIVEALL zusammen mit untilterm auf False gesetzt ist)
Beispiel
Siehe OpenConnection


Navigation zeigen