All communication consists of messages that are one line of human-readable UTF-8 text (with no terminating newline), optionally followed by a single newline and arbitrary (potentialy even binary) data. The WebSocket distinction between 'text' and 'binary' frames has no meaning for us for messages that don't contain additional binary data; such messages can be either 'binary' or 'text' from the WebSocket point of view even if we require them (the single line) to be UTF-8. In other words, an implementation is free to send such a single-line message as a WebSocket 'binary' frame, and the receiving implementation must treat that equally as if it was a 'text' frame. The WebSocket protocol says that 'text' frames are to be "interpreted" as UTF-8, so it is probably best to indeed use 'binary' frames for messages that contain optional non-UTF-8 data. The protocol is not a request-response one. Messages may be sent in either direction at any time, either in response to some message, or spontaneously. For 'tile' messages, the client may send a bunch of tile requests without waiting for return messages. The server may send tiles proactively (guessing what the client might need). Etc. client -> server ================ canceltiles All outstanding tile messages from the client to the server are dropped and will not be handled. There is no guarantee of exactly which tile: messages might still be sent back to the client. downloadas name= id= format= options= Exports the current document to the desired format and returns a download URL The id identifies the request on the client. getchildid Requests the child id so that it knows where the files needs to be sent when it is inserted in the document gettextselection mimetype= Request selection's content paste mimetype= Paste content at the current cursor position. insertfile name= type= Inserts the file with the name into the document, we currently support type = 'graphic' key type= char= key= is 'input' or 'up', and are numbers. load Deprecated. load [part=] url= [timestamp=