WebSocket.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. #include <functional>
  3. #include <Thread.h>
  4. #include <Critical.h>
  5. #include "Klient.h"
  6. namespace Network
  7. {
  8. namespace WebSocket
  9. {
  10. struct Frame
  11. {
  12. bool fin, rsv1, rsv2, rsv3; // bit 0 bis 3
  13. char opcode; // bit 4 bis 7
  14. bool mask; // bit 8
  15. __int64 dataLength; // bit 9 bis 15 oder bis 31 oder bis 79
  16. unsigned char key[ 4 ]; // wenn mask = 1 dann die nächsten 32 bits
  17. char *data; // die daten
  18. // baut frames zusammen welche zu einer nachricht gehören
  19. __declspec( dllexport ) Frame &operator+=( const Frame &b );
  20. };
  21. enum DataType
  22. {
  23. TEXT,
  24. BINARY
  25. };
  26. class WebSocketClient : public Framework::Thread
  27. {
  28. private:
  29. std::function< void( WebSocketClient *, __int64 size, const char *data, DataType typ ) > callback;
  30. Klient *klient;
  31. Framework::Text path;
  32. Framework::Text host;
  33. Frame *lastPingFrame;
  34. Array< Frame > *queue;
  35. unsigned short port;
  36. Critical c;
  37. Critical c2;
  38. public:
  39. // Erstellt ein neues Websocket
  40. // path: Der Pfad zur Resource
  41. // host: Die Adresse des Servers
  42. // port: Der Port des Servers
  43. __declspec( dllexport ) WebSocketClient( const char *path, const char *host, unsigned short port );
  44. __declspec( dllexport ) virtual ~WebSocketClient();
  45. // Setzt die Funktion, welche zum verarbeiten von Servernachrichten aufgerufen werden soll
  46. __declspec( dllexport ) void setMessageCallback( std::function< void( WebSocketClient *, __int64 size, const char *data, DataType typ ) > callback );
  47. // Führt den WebSocket Handshake aus falls noch nicht verbunden
  48. __declspec( dllexport ) bool connect();
  49. // Sendet eine Nachricht an den Server
  50. // size: Die länge der Nachricht
  51. // data: Die Daten
  52. // typ: Den Typ der Nachricht
  53. __declspec( dllexport ) bool send( __int64 size, const char *data, DataType typ = TEXT );
  54. // Diese Funktion verarbeitet Servernachrichten. Sie sollte nicht manuell aufgerufen werden, da sie automatisch gestartet wird
  55. __declspec( dllexport ) void thread() override;
  56. // bricht die verbindung ab
  57. __declspec( dllexport ) void disconnect();
  58. // Gibt 1 zurück, wenn eine Verbindung zum Server besteht, 0 sonnst
  59. __declspec( dllexport ) bool isConnected() const;
  60. };
  61. }
  62. }