doc / bring back detailed APIs
This commit is contained in:
		
							
								
								
									
										134
									
								
								docs/usage.md
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								docs/usage.md
									
									
									
									
									
								
							| @@ -1,8 +1,8 @@ | |||||||
| ## Examples | # Examples | ||||||
|  |  | ||||||
| The [*ws*](https://github.com/machinezone/IXWebSocket/tree/master/ws) folder countains many interactive programs for chat, [file transfers](https://github.com/machinezone/IXWebSocket/blob/master/ws/ws_send.cpp), [curl like](https://github.com/machinezone/IXWebSocket/blob/master/ws/ws_http_client.cpp) http clients, demonstrating client and server usage. | The [*ws*](https://github.com/machinezone/IXWebSocket/tree/master/ws) folder countains many interactive programs for chat, [file transfers](https://github.com/machinezone/IXWebSocket/blob/master/ws/ws_send.cpp), [curl like](https://github.com/machinezone/IXWebSocket/blob/master/ws/ws_http_client.cpp) http clients, demonstrating client and server usage. | ||||||
|  |  | ||||||
| ### Windows note | ## Windows note | ||||||
|  |  | ||||||
| To use the network system on Windows, you need to initialize it once with *WSAStartup()* and clean it up with *WSACleanup()*. We have helpers for that which you can use, see below. This init would typically take place in your main function. | To use the network system on Windows, you need to initialize it once with *WSAStartup()* and clean it up with *WSACleanup()*. We have helpers for that which you can use, see below. This init would typically take place in your main function. | ||||||
|  |  | ||||||
| @@ -20,7 +20,7 @@ int main() | |||||||
| } | } | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### WebSocket client API | ## WebSocket client API | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| #include <ixwebsocket/IXWebSocket.h> | #include <ixwebsocket/IXWebSocket.h> | ||||||
| @@ -65,7 +65,129 @@ webSocket.sendBinary("some serialized binary data"); | |||||||
| webSocket.stop() | webSocket.stop() | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### WebSocket server API | ### Sending messages | ||||||
|  |  | ||||||
|  | `websocket.send("foo")` will send a message. | ||||||
|  |  | ||||||
|  | If the connection was closed and sending failed, the return value will be set to false. | ||||||
|  |  | ||||||
|  | ### ReadyState | ||||||
|  |  | ||||||
|  | `getReadyState()` returns the state of the connection. There are 4 possible states. | ||||||
|  |  | ||||||
|  | 1. ReadyState::Connecting - The connection is not yet open. | ||||||
|  | 2. ReadyState::Open       - The connection is open and ready to communicate. | ||||||
|  | 3. ReadyState::Closing    - The connection is in the process of closing. | ||||||
|  | 4. ReadyState::Closed     - The connection is closed or could not be opened. | ||||||
|  |  | ||||||
|  | ### Open and Close notifications | ||||||
|  |  | ||||||
|  | The onMessage event will be fired when the connection is opened or closed. This is similar to the [Javascript browser API](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket), which has `open` and `close` events notification that can be registered with the browser `addEventListener`. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | webSocket.setOnMessageCallback([](const ix::WebSocketMessagePtr& msg) | ||||||
|  |     { | ||||||
|  |         if (msg->type == ix::WebSocketMessageType::Open) | ||||||
|  |         { | ||||||
|  |             std::cout << "send greetings" << std::endl; | ||||||
|  |  | ||||||
|  |             // Headers can be inspected (pairs of string/string) | ||||||
|  |             std::cout << "Handshake Headers:" << std::endl; | ||||||
|  |             for (auto it : msg->headers) | ||||||
|  |             { | ||||||
|  |                 std::cout << it.first << ": " << it.second << std::endl; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         else if (msg->type == ix::WebSocketMessageType::Close) | ||||||
|  |         { | ||||||
|  |             std::cout << "disconnected" << std::endl; | ||||||
|  |  | ||||||
|  |             // The server can send an explicit code and reason for closing. | ||||||
|  |             // This data can be accessed through the closeInfo object. | ||||||
|  |             std::cout << msg->closeInfo.code << std::endl; | ||||||
|  |             std::cout << msg->closeInfo.reason << std::endl; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | ); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Error notification | ||||||
|  |  | ||||||
|  | A message will be fired when there is an error with the connection. The message type will be `ix::WebSocketMessageType::Error`. Multiple fields will be available on the event to describe the error. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | webSocket.setOnMessageCallback([](const ix::WebSocketMessagePtr& msg) | ||||||
|  |     { | ||||||
|  |         if (msg->type == ix::WebSocketMessageType::Error) | ||||||
|  |         { | ||||||
|  |             std::stringstream ss; | ||||||
|  |             ss << "Error: "         << msg->errorInfo.reason      << std::endl; | ||||||
|  |             ss << "#retries: "      << msg->eventInfo.retries     << std::endl; | ||||||
|  |             ss << "Wait time(ms): " << msg->eventInfo.wait_time   << std::endl; | ||||||
|  |             ss << "HTTP Status: "   << msg->eventInfo.http_status << std::endl; | ||||||
|  |             std::cout << ss.str() << std::endl; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | ); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### start, stop | ||||||
|  |  | ||||||
|  | 1. `websocket.start()` connect to the remote server and starts the message receiving background thread. | ||||||
|  | 2. `websocket.stop()` disconnect from the remote server and closes the background thread. | ||||||
|  |  | ||||||
|  | ### Configuring the remote url | ||||||
|  |  | ||||||
|  | The url can be set and queried after a websocket object has been created. You will have to call `stop` and `start` if you want to disconnect and connect to that new url. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | std::string url("wss://example.com"); | ||||||
|  | websocket.configure(url); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Ping/Pong support | ||||||
|  |  | ||||||
|  | Ping/pong messages are used to implement keep-alive. 2 message types exists to identify ping and pong messages. Note that when a ping message is received, a pong is instantly send back as requested by the WebSocket spec. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | webSocket.setOnMessageCallback([](const ix::WebSocketMessagePtr& msg) | ||||||
|  |     { | ||||||
|  |         if (msg->type == ix::WebSocketMessageType::Ping || | ||||||
|  |             msg->type == ix::WebSocketMessageType::Pong) | ||||||
|  |         { | ||||||
|  |             std::cout << "pong data: " << msg->str << std::endl; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | ); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | A ping message can be sent to the server, with an optional data string. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | websocket.ping("ping data, optional (empty string is ok): limited to 125 bytes long"); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Heartbeat. | ||||||
|  |  | ||||||
|  | You can configure an optional heart beat / keep-alive, sent every 45 seconds | ||||||
|  | when there is no any traffic to make sure that load balancers do not kill an | ||||||
|  | idle connection. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | webSocket.setHeartBeatPeriod(45); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Supply extra HTTP headers. | ||||||
|  |  | ||||||
|  | You can set extra HTTP headers to be sent during the WebSocket handshake. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | WebSocketHttpHeaders headers; | ||||||
|  | headers["foo"] = "bar"; | ||||||
|  | webSocket.setExtraHeaders(headers); | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## WebSocket server API | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| #include <ixwebsocket/IXWebSocketServer.h> | #include <ixwebsocket/IXWebSocketServer.h> | ||||||
| @@ -130,7 +252,7 @@ server.wait(); | |||||||
|  |  | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### HTTP client API | ## HTTP client API | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| #include <ixwebsocket/IXHttpClient.h> | #include <ixwebsocket/IXHttpClient.h> | ||||||
| @@ -213,7 +335,7 @@ bool ok = httpClient.performRequest(args, [](const HttpResponsePtr& response) | |||||||
| // ok will be false if your httpClient is not async | // ok will be false if your httpClient is not async | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### HTTP server API | ## HTTP server API | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| #include <ixwebsocket/IXHttpServer.h> | #include <ixwebsocket/IXHttpServer.h> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user