mirror of
https://github.com/arduino-libraries/ArduinoHttpClient.git
synced 2025-04-19 21:22:15 +03:00
91 lines
2.7 KiB
C++
91 lines
2.7 KiB
C++
// (c) Copyright Arduino. 2016
|
|
// Released under Apache License, version 2.0
|
|
|
|
#ifndef WebSocketClient_h
|
|
#define WebSocketClient_h
|
|
|
|
#include <Arduino.h>
|
|
|
|
#include "HttpClient.h"
|
|
|
|
static const int TYPE_CONTINUATION = 0x0;
|
|
static const int TYPE_TEXT = 0x1;
|
|
static const int TYPE_BINARY = 0x2;
|
|
static const int TYPE_CONNECTION_CLOSE = 0x8;
|
|
static const int TYPE_PING = 0x9;
|
|
static const int TYPE_PONG = 0xa;
|
|
|
|
class WebSocketClient : public HttpClient
|
|
{
|
|
public:
|
|
WebSocketClient(Client& aClient, const char* aServerName, uint16_t aServerPort = HttpClient::kHttpPort);
|
|
WebSocketClient(Client& aClient, const String& aServerName, uint16_t aServerPort = HttpClient::kHttpPort);
|
|
WebSocketClient(Client& aClient, const IPAddress& aServerAddress, uint16_t aServerPort = HttpClient::kHttpPort);
|
|
|
|
/** Start the Web Socket connection to the specified path
|
|
@param aURLPath Path to use in request (optional, "/" is used by default)
|
|
@return 0 if successful, else error
|
|
*/
|
|
int begin(const char* aPath = "/");
|
|
int begin(const String& aPath);
|
|
|
|
/** Begin to send a message of type (TYPE_TEXT or TYPE_BINARY)
|
|
Use the write or Stream API's to set message content, followed by endMessage
|
|
to complete the message.
|
|
@param aURLPath Path to use in request
|
|
@return 0 if successful, else error
|
|
*/
|
|
int beginMessage(int aType);
|
|
|
|
/** Completes sending of a message started by beginMessage
|
|
@return 0 if successful, else error
|
|
*/
|
|
int endMessage();
|
|
|
|
/** Try to parse an incoming messages
|
|
@return 0 if no message available, else size of parsed message
|
|
*/
|
|
int parseMessage();
|
|
|
|
/** Returns type of current parsed message
|
|
@return type of current parsedMessage (TYPE_TEXT or TYPE_BINARY)
|
|
*/
|
|
int messageType();
|
|
|
|
/** Returns if the current message is the final chunk of a split
|
|
message
|
|
@return true for final message, false otherwise
|
|
*/
|
|
bool isFinal();
|
|
|
|
/** Read the current messages as a string
|
|
@return current message as a string
|
|
*/
|
|
String readString();
|
|
|
|
// Inherited from Print
|
|
virtual size_t write(uint8_t aByte);
|
|
virtual size_t write(const uint8_t *aBuffer, size_t aSize);
|
|
// Inherited from Stream
|
|
virtual int available();
|
|
/** Read the next byte from the server.
|
|
@return Byte read or -1 if there are no bytes available.
|
|
*/
|
|
virtual int read();
|
|
virtual int read(uint8_t *buf, size_t size);
|
|
virtual int peek();
|
|
|
|
private:
|
|
uint8_t iTxMessageType;
|
|
uint8_t iTxBuffer[128];
|
|
uint64_t iTxSize;
|
|
|
|
uint8_t iRxOpCode;
|
|
uint64_t iRxSize;
|
|
bool iRxMasked;
|
|
int iRxMaskIndex;
|
|
uint8_t iRxMaskKey[4];
|
|
};
|
|
|
|
#endif
|