Applies To: | HTMLRenderer |
Description
This event is reported when the client component of an HTMLRenderer object opens a WebSocket and the requested URL matches a pattern specified by the InterceptedURLs property. If there is no match, the connection request is processed as an external request by the Chromium Embedded Framework (CEF).
The event message reported as the result of ⎕DQ, or supplied as the right argument to your callback function, is a 6-element vector as follows:
[1] | Object | ref or character vector |
[2] | Event | 'WebSocketUpgrade' or 841 |
[3] | ID | Character vector containing the ID of the WebSocket |
[4] | URL | The requested URL of the WebSocket |
[5] | Headers | ASCII including CRLF |
[6] | Type | Character vector 'auto' or 'manual' |
The protocol for establishing the connection is defined by InterceptedURLs and is reported by the 6th element (Type) of the event message.
If Type is 'auto', the protocol is handled internally and this event is reported when the connection has already been made. Should the connection fail, a WebSocketError event will be reported instead.
If Type is 'manual', a callback function for WebSocketUpgrade is mandatory and is responsible for completing (or denying) the connection. This is achieved by setting the 5th element of the event message (Headers) to indicate an appropriate positive or negative response to the request and returning the entire event message as its result. If a valid response is not generated in this way, the connection will time-out causing a WebSocketError event.
In both cases, the WebSocket ID is subsequently required to send a message by calling the WebSocketSend method or to close the connection using the WebSocketClose method.
Note that several WebSocket connections may be made concurrently.
Example
┌→────────────────────────────────────────────────────────┐ │ ┌→───────────────┐ ┌→──────────────┐ ┌→──────────┐ │ │ #.hr │WebSocketUpgrade│ │5d61d8330065608│ │ws://myapp/│ │ │ └────────────────┘ └───────────────┘ └───────────┘ │ └∊────────────────────────────────────────────────────────┘