123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #pragma once
- #include <Critical.h>
- #include <functional>
- #include <Random.h>
- #include <Thread.h>
- #include "Klient.h"
- namespace Network
- {
- namespace WebSocket
- {
- struct Frame
- {
- bool fin, rsv1, rsv2, rsv3; // bit 0 bis 3
- char opcode; // bit 4 bis 7
- bool mask; // bit 8
- __int64 dataLength; // bit 9 bis 15 oder bis 31 oder bis 79
- unsigned char key[4]; // wenn mask = 1 dann die nächsten 32 bits
- char* data; // die daten
- // baut frames zusammen welche zu einer nachricht gehören
- __declspec(dllexport) Frame& operator+=(const Frame& b);
- };
- enum DataType
- {
- TEXT,
- BINARY
- };
- class WebSocketClient : public Framework::Thread
- {
- private:
- std::function<void(
- WebSocketClient*, __int64 size, const char* data, DataType typ)>
- callback;
- Klient* klient;
- Framework::Text path;
- Framework::Text host;
- Frame* lastPingFrame;
- Array<Frame>* queue;
- unsigned short port;
- Critical c;
- Critical c2;
- RandomGenerator gen;
- bool nextClose;
- public:
- // Erstellt ein neues Websocket
- // path: Der Pfad zur Resource
- // host: Die Adresse des Servers
- // port: Der Port des Servers
- __declspec(dllexport) WebSocketClient(
- const char* path, const char* host, unsigned short port);
- __declspec(dllexport) virtual ~WebSocketClient();
- // Setzt die Funktion, welche zum verarbeiten von Servernachrichten
- // aufgerufen werden soll
- __declspec(dllexport) void setMessageCallback(
- std::function<void(WebSocketClient*,
- __int64 size,
- const char* data,
- DataType typ)> callback);
- // Führt den WebSocket Handshake aus falls noch nicht verbunden
- __declspec(dllexport) bool connect();
- // Sendet eine Nachricht an den Server
- // size: Die länge der Nachricht
- // data: Die Daten
- // typ: Den Typ der Nachricht
- __declspec(dllexport) bool send(
- __int64 size, const char* data, DataType typ = TEXT);
- // Diese Funktion verarbeitet Servernachrichten. Sie sollte nicht
- // manuell aufgerufen werden, da sie automatisch gestartet wird
- __declspec(dllexport) void thread() override;
- // bricht die verbindung ab
- __declspec(dllexport) void disconnect();
- // Gibt 1 zurück, wenn eine Verbindung zum Server besteht, 0 sonnst
- __declspec(dllexport) bool isConnected() const;
- };
- } // namespace WebSocket
- } // namespace Network
|