CX_WIDGET::PushSocket
189117
Beschreibung:
Falls das Widget, auf welchem diese Methode aufgerufen wird, ein Web-Widget ist und mit einem MorphIT-Client verbunden ist, dann kann mit PushSocket eine beliebige Nachricht an das entsprechende Web-Widget im Browser geschickt werden.
Falls das Widget im Browser noch nicht geöffent wurde, dann geht die Nachricht ohne Warnung verloren. Deshalb sollte sichergestellt werden, dass das Web-Widget auch wirklich existiert und bereit ist, bevor eine Nachricht per PushSocket an das Widget geschickt wird. Das kann am einfachsten dadurch sichergestellt werden, dass PushSocket nur innerhalb von _SOCKET -Messages verwendet wird, als Antwort auf eine Anfrage vom Web-Widget. (Wie im Codebeispiel auch gezeigt wird).
Der Nachrichten-Typ, der bei PushSocket übergeben wird dient dazu, eine Kategorisierung der Nachrichten zu erreichen. Das Web-Widget erhält die übergebenen Daten und den Typ. Sendet das Web-Widget eine Nachricht an das ClassiX-System, dann wird diese Nachricht in eine Message umgewandelt, indem der typ in Großbuchstaben umgewandelt wird und ein _SOCKET angehängt wird. Aus einem fetch_data wird also FETCH_DATA_SOCKET. Anschließend werden die Daten auf den Stack gelegt. Dabei werden die Daten vom JSON-Format in einen kompatiblen ClassiX-Typen umgewandelt.
Als zu übermittelnde Daten sind alle Datentypen erlaubt, die auch von CX_JSON_PARSER::WriteToString akzeptiert werden (Also alle Typen, die sich einfach in einen JSON-Wert übersetzten lassen).
PushSocket ist ein asynchroner Aufruf, der sofort zurückkehrt. Das Senden der Nachricht geschieht verzögert und es gibt keine Garantie, wann genau das Web-Widget die Nachricht erhält. Es ist lediglich garantiert, dass bei mehreren PushSocket aufrufen das Web-Widget die Nachrichten in der gleichen Reihenfolge erhält.
Code-Beispiel:
Web(webWidget, APP("QM/widget.html"), 10, 25, 700, 200) [ FETCH_DATA_SOCKET: Drop //Ignore passed data from web widget Var(json) CreateTransObject(CX_JSON_OBJECT) -> json "value" "key" json Call(PutTyped) json "response" Widget Call(PushSocket) //Push data to socket as message of type "response" ]
Stack | Positionn | Objekttyp | Kurzbeschreibung |
---|---|---|---|
Stack(In) | Top | CX_WIDGET | Ein Widget |
Top-1 | STRING | Der Message-Typ | |
Top-2 | JSON-Typ | Die zu übermittelnden Daten | |
Stack(Out) | Top |