diff --git a/README.md b/README.md index 519525af..b1035ce5 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,12 @@ webSocket.setOnMessageCallback( // Now that our callback is setup, we can start our background thread and receive messages webSocket.start(); -// Send a message to the server +// Send a message to the server (default to BINARY mode) webSocket.send("hello world"); +// The message can be sent in TEXT mode +webSocket.sendText("hello again"); + // ... finally ... // Stop the connection diff --git a/ixwebsocket/IXWebSocket.cpp b/ixwebsocket/IXWebSocket.cpp index 9b08bf5f..b0c846e6 100644 --- a/ixwebsocket/IXWebSocket.cpp +++ b/ixwebsocket/IXWebSocket.cpp @@ -302,7 +302,13 @@ namespace ix WebSocketSendInfo WebSocket::send(const std::string& text, const OnProgressCallback& onProgressCallback) { - return sendMessage(text, false, onProgressCallback); + return sendMessage(text, SendMessageKind::Binary, onProgressCallback); + } + + WebSocketSendInfo WebSocket::sendText(const std::string& text, + const OnProgressCallback& onProgressCallback) + { + return sendMessage(text, SendMessageKind::Text, onProgressCallback); } WebSocketSendInfo WebSocket::ping(const std::string& text) @@ -311,11 +317,11 @@ namespace ix constexpr size_t pingMaxPayloadSize = 125; if (text.size() > pingMaxPayloadSize) return WebSocketSendInfo(false); - return sendMessage(text, true); + return sendMessage(text, SendMessageKind::Ping); } WebSocketSendInfo WebSocket::sendMessage(const std::string& text, - bool ping, + SendMessageKind sendMessageKind, const OnProgressCallback& onProgressCallback) { if (!isConnected()) return WebSocketSendInfo(false); @@ -332,13 +338,22 @@ namespace ix std::lock_guard lock(_writeMutex); WebSocketSendInfo webSocketSendInfo; - if (ping) + switch (sendMessageKind) { - webSocketSendInfo = _ws.sendPing(text); - } - else - { - webSocketSendInfo = _ws.sendBinary(text, onProgressCallback); + case SendMessageKind::Text: + { + webSocketSendInfo = _ws.sendText(text, onProgressCallback); + } break; + + case SendMessageKind::Binary: + { + webSocketSendInfo = _ws.sendBinary(text, onProgressCallback); + } break; + + case SendMessageKind::Ping: + { + webSocketSendInfo = _ws.sendPing(text); + } break; } WebSocket::invokeTrafficTrackerCallback(webSocketSendInfo.wireSize, false); diff --git a/ixwebsocket/IXWebSocket.h b/ixwebsocket/IXWebSocket.h index 8b35ebe1..3e31e339 100644 --- a/ixwebsocket/IXWebSocket.h +++ b/ixwebsocket/IXWebSocket.h @@ -101,6 +101,8 @@ namespace ix WebSocketSendInfo send(const std::string& text, const OnProgressCallback& onProgressCallback = nullptr); + WebSocketSendInfo sendText(const std::string& text, + const OnProgressCallback& onProgressCallback = nullptr); WebSocketSendInfo ping(const std::string& text); void close(); @@ -120,7 +122,7 @@ namespace ix private: WebSocketSendInfo sendMessage(const std::string& text, - bool ping, + SendMessageKind sendMessageKind, const OnProgressCallback& callback = nullptr); bool isConnected() const; diff --git a/ixwebsocket/IXWebSocketTransport.cpp b/ixwebsocket/IXWebSocketTransport.cpp index 414f7e00..4173b673 100644 --- a/ixwebsocket/IXWebSocketTransport.cpp +++ b/ixwebsocket/IXWebSocketTransport.cpp @@ -742,6 +742,15 @@ namespace ix _enablePerMessageDeflate, onProgressCallback); } + WebSocketSendInfo WebSocketTransport::sendText( + const std::string& message, + const OnProgressCallback& onProgressCallback) + + { + return sendData(wsheader_type::TEXT_FRAME, message, + _enablePerMessageDeflate, onProgressCallback); + } + void WebSocketTransport::sendOnSocket() { std::lock_guard lock(_txbufMutex); diff --git a/ixwebsocket/IXWebSocketTransport.h b/ixwebsocket/IXWebSocketTransport.h index 2bb96aba..61e8c73f 100644 --- a/ixwebsocket/IXWebSocketTransport.h +++ b/ixwebsocket/IXWebSocketTransport.h @@ -30,6 +30,13 @@ namespace ix { class Socket; + enum class SendMessageKind + { + Text, + Binary, + Ping + }; + class WebSocketTransport { public: @@ -71,6 +78,8 @@ namespace ix void poll(); WebSocketSendInfo sendBinary(const std::string& message, const OnProgressCallback& onProgressCallback); + WebSocketSendInfo sendText(const std::string& message, + const OnProgressCallback& onProgressCallback); WebSocketSendInfo sendPing(const std::string& message); void close(); ReadyStateValues getReadyState() const;