Polyphase Game Engine
Loading...
Searching...
No Matches
WebSocketClient.h
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <memory>
5#include <stdint.h>
6#include <string>
7#include <vector>
8
9#include "PolyphaseAPI.h"
11
12// ---------------------------------------------------------------------------
13// WebSocket client. Parallel to Http:: - realtime bidirectional messaging with
14// a dedicated server, which HTTP cannot do.
15//
16// Every callback fires on the main thread from WebSocket::Tick(), never from a
17// socket poll or an OS callback thread. Same contract as Http::.
18// ---------------------------------------------------------------------------
19
20using WsOpenCallback = std::function<void()>;
21using WsMessageCallback = std::function<void(const uint8_t* data, uint32_t size, bool binary)>;
22using WsErrorCallback = std::function<void(const char* message)>;
23using WsClosedCallback = std::function<void(uint16_t code, const char* reason, bool wasClean)>;
24
25// One connection. Abstract so the byte transport, the platform message
26// transports and the web build-target addon can each supply their own concrete
27// type behind the same handle.
29{
30public:
31
32 virtual ~WsConnection() {}
33
34 virtual WsState GetState() const = 0;
35
36 // Return false when the connection is not Open or the outgoing queue is
37 // full. Never raises, never invokes callbacks re-entrantly.
38 virtual bool SendText(const char* data, uint32_t size) = 0;
39 virtual bool SendBinary(const uint8_t* data, uint32_t size) = 0;
40
41 // Begins the close handshake. Safe to call in any state.
42 virtual void Close(uint16_t code, const char* reason) = 0;
43
44 // Callbacks. Passing an empty std::function clears one. While a message
45 // callback is set, incoming messages are delivered to it instead of being
46 // queued for TakePacket().
47 virtual void SetOpenCallback(WsOpenCallback cb) = 0;
49 virtual void SetErrorCallback(WsErrorCallback cb) = 0;
50 virtual void SetClosedCallback(WsClosedCallback cb) = 0;
51
52 // Polling alternative to the message callback.
53 virtual uint32_t GetAvailablePacketCount() const = 0;
54 virtual bool TakePacket(WsMessage& outMessage) = 0;
55
56 virtual const std::string& GetSelectedProtocol() const = 0;
57 virtual uint16_t GetCloseCode() const = 0;
58 virtual const std::string& GetCloseReason() const = 0;
59 virtual bool WasDowngraded() const = 0;
60};
61
62namespace WebSocket
63{
64 // Lifecycle. Initialize is called from Engine::Initialize right after
65 // Http::Initialize.
68
69 // Pumps every live connection and fires the queued callbacks. Called once
70 // per frame from Engine::Update - this is the only place Lua is touched.
71 POLYPHASE_API void Tick();
72
73 // False on platforms with no transport at all (Variant-2 addon targets
74 // that do not supply their own implementation).
76
77 // Why not, when IsAvailable() is false. Empty string when available.
79
80 // Returns null and fills outError when the URL is malformed or the scheme
81 // has no transport on this build.
82 POLYPHASE_API std::shared_ptr<WsConnection> Connect(const WsConnectOptions& options, std::string& outError);
83}
Export macros for Polyphase Engine symbols.
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
std::function< void(uint16_t code, const char *reason, bool wasClean)> WsClosedCallback
Definition WebSocketClient.h:23
std::function< void(const char *message)> WsErrorCallback
Definition WebSocketClient.h:22
std::function< void(const uint8_t *data, uint32_t size, bool binary)> WsMessageCallback
Definition WebSocketClient.h:21
std::function< void()> WsOpenCallback
Definition WebSocketClient.h:20
WsState
Definition WebSocketTypes.h:17
Definition WebSocketClient.h:29
virtual bool TakePacket(WsMessage &outMessage)=0
virtual bool SendText(const char *data, uint32_t size)=0
virtual uint16_t GetCloseCode() const =0
virtual const std::string & GetSelectedProtocol() const =0
virtual void SetMessageCallback(WsMessageCallback cb)=0
virtual void SetOpenCallback(WsOpenCallback cb)=0
virtual WsState GetState() const =0
virtual bool WasDowngraded() const =0
virtual ~WsConnection()
Definition WebSocketClient.h:32
virtual const std::string & GetCloseReason() const =0
virtual void Close(uint16_t code, const char *reason)=0
virtual void SetClosedCallback(WsClosedCallback cb)=0
virtual uint32_t GetAvailablePacketCount() const =0
virtual bool SendBinary(const uint8_t *data, uint32_t size)=0
virtual void SetErrorCallback(WsErrorCallback cb)=0
Definition WebSocketClient.cpp:772
void Shutdown()
Definition WebSocketClient.cpp:783
void Tick()
Definition WebSocketClient.cpp:803
const char * GetMissingDependencyMessage()
Definition WebSocketClient.cpp:841
bool IsAvailable()
Definition WebSocketClient.cpp:836
void Initialize()
Definition WebSocketClient.cpp:773
Definition WebSocketTypes.h:61
Definition WebSocketTypes.h:69