1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00
ULib/include/ulib/net/client/websocket.h
2018-10-09 16:57:44 +02:00

105 lines
2.2 KiB
C++

// ============================================================================
//
// = LIBRARY
// ULib - c++ library
//
// = FILENAME
// websocket.h - simple websocket client
//
// = AUTHOR
// Stefano Casazza
//
// ============================================================================
#ifndef ULIB_WEBSOCKET_CLIENT_H
#define ULIB_WEBSOCKET_CLIENT_H 1
#include <ulib/net/client/client.h>
#include <ulib/ssl/net/sslsocket.h>
#include <ulib/utility/websocket.h>
/**
* @class UWebSocketClient
*/
class U_EXPORT UWebSocketClient {
public:
// Check for memory error
U_MEMORY_TEST
// Allocator e Deallocator
U_MEMORY_ALLOCATOR
U_MEMORY_DEALLOCATOR
/**
* Constructor
*/
UWebSocketClient()
{
U_TRACE_CTOR(0, UWebSocketClient, "")
U_NEW(UClient<USSLSocket>, client, UClient<USSLSocket>(U_NULLPTR));
}
~UWebSocketClient()
{
U_TRACE_DTOR(0, UWebSocketClient)
U_INTERNAL_ASSERT_POINTER(client)
U_DELETE(client)
}
// SERVICES
bool readMessage()
{
U_TRACE_NO_PARAM(0, "UWebSocketClient::readMessage()")
U_INTERNAL_ASSERT_POINTER(client)
UWebSocket::rbuffer->setEmpty();
if (UWebSocket::handleDataFraming(client->UClient_Base::socket) == U_WS_STATUS_CODE_OK) U_RETURN(true);
U_RETURN(false);
}
bool sendMessage(const UString& msg, int type = U_WS_MESSAGE_TYPE_TEXT) // U_WS_MESSAGE_TYPE_BROTLI
{
U_TRACE(0, "UWebSocketClient::sendMessage(%V,%d)", msg.rep, type)
U_INTERNAL_ASSERT_POINTER(client)
return UWebSocket::sendData(client->UClient_Base::socket, type, msg);
}
void close()
{
U_TRACE_NO_PARAM(0, "UWebSocketClient::close()")
U_INTERNAL_ASSERT_POINTER(client)
(void) UWebSocket::sendClose(client->UClient_Base::socket);
client->UClient_Base::close();
}
bool connectServer(const UString& url);
UClient<USSLSocket>* getClient() const { return client; }
#if defined(U_STDCPP_ENABLE) && defined(DEBUG)
const char* dump(bool reset) const;
#endif
protected:
UClient<USSLSocket>* client;
private:
U_DISALLOW_COPY_AND_ASSIGN(UWebSocketClient)
};
#endif