48 lines
1.3 KiB
C++
48 lines
1.3 KiB
C++
#ifndef WEBSOCKET_H
|
|
#define WEBSOCKET_H
|
|
|
|
#include <functional>
|
|
#include <string>
|
|
#include <map>
|
|
#include <thread>
|
|
#include "transport.h"
|
|
|
|
|
|
class WebSocket {
|
|
public:
|
|
WebSocket(Transport *transport);
|
|
~WebSocket();
|
|
|
|
void SetHeader(const char* key, const char* value);
|
|
void SetReceiveBufferSize(size_t size);
|
|
bool IsConnected() const;
|
|
bool Connect(const char* uri);
|
|
bool Send(const std::string& data);
|
|
bool Send(const void* data, size_t len, bool binary = false, bool fin = true);
|
|
void Ping();
|
|
void Close();
|
|
|
|
void OnConnected(std::function<void()> callback);
|
|
void OnDisconnected(std::function<void()> callback);
|
|
void OnData(std::function<void(const char*, size_t, bool binary)> callback);
|
|
void OnError(std::function<void(int)> callback);
|
|
|
|
private:
|
|
Transport *transport_;
|
|
std::thread receive_thread_;
|
|
bool continuation_ = false;
|
|
size_t receive_buffer_size_ = 2048;
|
|
|
|
std::map<std::string, std::string> headers_;
|
|
std::function<void(const char*, size_t, bool binary)> on_data_;
|
|
std::function<void(int)> on_error_;
|
|
std::function<void()> on_connected_;
|
|
std::function<void()> on_disconnected_;
|
|
|
|
void ReceiveTask();
|
|
bool SendAllRaw(const void* data, size_t len);
|
|
bool SendControlFrame(uint8_t opcode, const void* data, size_t len);
|
|
};
|
|
|
|
#endif // WEBSOCKET_H
|