Skip to content

Commit

Permalink
Merge pull request #51 from gilmaimon/change-to-stl-strings-only
Browse files Browse the repository at this point in the history
Change to stl strings only
  • Loading branch information
gilmaimon authored Nov 22, 2019
2 parents 8c391ce + 61ca151 commit 46f3442
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 5 deletions.
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,13 @@ void loop() {
```
***Note:** for ESP32 you only need to change to code that connects to WiFi (replace `#include <ESP8266WiFi.h>` with `#include <WiFi.h>`), everything else stays the same.*

## Binary Data

For binary data it is recommended to use `msg.rawData()` which returns a `std::string`, or `msg.c_str()` which returns a `const char*`.
The reason is that `msg.data()` returns an Arduino `String`, which is great for Serial printing and very basic memory handling but bad for most binary usages.

See [issue #32](https://github.com/gilmaimon/ArduinoWebsockets/issues/32) for further information.

## SSL and WSS Support

No matter what board you are using, in order to use WSS (websockets over SSL) you need to use
Expand Down Expand Up @@ -285,4 +292,5 @@ Thanks for everyone who reported a bug, suggested a feature and contributed to t
- **10/08/2019 (v0.4.10)** - Patch - Bugfix. Fixed a bug (and general in-stability) caused from unchecked and unsafe read operations on sockets. Also improved memory usage and management. Thank you [Jonty](https://github.com/Jonty) for openning and helping with the [issue](https://github.com/gilmaimon/ArduinoWebsockets/issues/26)!
- **14/09/2019 (v0.4.11)** - Bugfixes - masking settings used to not get copied when using assignment between `WebsocketClient` instances. Also handshake validation is now case insensitive. Thank you [logdog2709](https://github.com/logdog2709) for pointing out the [issue](https://github.com/gilmaimon/ArduinoWebsockets/issues/34).
- **12/10/2019 (v0.4.12)** - Patch - Messages are now sent as a single TCP buffer instead of separate messages. Thank you [elC0mpa](https://github.com/elC0mpa) for posting the [issue](https://github.com/gilmaimon/ArduinoWebsockets/issues/44).
- **19/10/2019 (v0.4.13)** - Patch - added `yield` calls in order to prevent software-watchdog resets on esp8266 (on long messages). Thank you [elC0mpa](https://github.com/elC0mpa) for documenting and helping with the [issue](https://github.com/gilmaimon/ArduinoWebsockets/issues/43).
- **19/10/2019 (v0.4.13)** - Patch - added `yield` calls in order to prevent software-watchdog resets on esp8266 (on long messages). Thank you [elC0mpa](https://github.com/elC0mpa) for documenting and helping with the [issue](https://github.com/gilmaimon/ArduinoWebsockets/issues/43).
- **22/11/2019 (v0.4.14)** - Added `rawData` and `c_str` as acccessors in `WebsocketsMessage` so now the raw data can be acccessed which should solve issue #32 and not break any existing sketch.
2 changes: 2 additions & 0 deletions keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ isLast KEYWORD2
WebsocketsMessage KEYWORD1
data KEYWORD2
type KEYWORD2
rawData KEYWORD2
c_str KEYWORD2

WebsocketsEvent KEYWORD1
ConnectionOpened LITERAL1
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=ArduinoWebsockets
version=0.4.13
version=0.4.14
author=Gil Maimon <[email protected]>
maintainer=Gil Maimon <[email protected]>
sentence=A library for writing modern Websockets applications with Arduino.
Expand Down
9 changes: 6 additions & 3 deletions src/tiny_websockets/message.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ namespace websockets {
// The class the user will interact with as a message
// This message can be partial (so practically this is a Frame and not a message)
struct WebsocketsMessage {
WebsocketsMessage(MessageType msgType, WSString msgData, MessageRole msgRole = MessageRole::Complete) : _type(msgType), _length(msgData.size()), _data(internals::fromInternalString(msgData)), _role(msgRole) {}
WebsocketsMessage(MessageType msgType, const WSString& msgData, MessageRole msgRole = MessageRole::Complete) : _type(msgType), _length(msgData.size()), _data(msgData), _role(msgRole) {}
WebsocketsMessage() : WebsocketsMessage(MessageType::Empty, "", MessageRole::Complete) {}

static WebsocketsMessage CreateFromFrame(internals::WebsocketsFrame frame, MessageType overrideType = MessageType::Empty) {
Expand Down Expand Up @@ -68,7 +68,10 @@ namespace websockets {
bool isLast() const { return this->_role == MessageRole::Last; }


WSInterfaceString data() const { return this->_data; }
WSInterfaceString data() const { return internals::fromInternalString(this->_data); }
const WSString& rawData() const { return this->_data; }
const char* c_str() const { return this->_data.c_str(); }

uint32_t length() const { return this->_length; }

class StreamBuilder {
Expand Down Expand Up @@ -177,7 +180,7 @@ namespace websockets {
private:
const MessageType _type;
const uint32_t _length;
const WSInterfaceString _data;
const WSString _data;
const MessageRole _role;
};
}

0 comments on commit 46f3442

Please sign in to comment.