Network.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #ifndef Network_H
  2. #define Network_H
  3. #ifdef WIN32
  4. # ifdef _DEBUG
  5. # ifndef _LTMDB
  6. # define _CRTDBG_MAP_ALLOC
  7. # include <crtdbg.h>
  8. # include <stdlib.h>
  9. # define DEBUG_CLIENTBLOCK new (_CLIENT_BLOCK, __FILE__, __LINE__)
  10. # define new DEBUG_CLIENTBLOCK
  11. # define _LTMDB
  12. # endif
  13. # endif
  14. # define _WINSOCK_DEPRECATED_NO_WARNINGS
  15. # include <WinSock2.h>
  16. #else
  17. # include <arpa/inet.h>
  18. # include <fcntl.h>
  19. # include <iostream>
  20. # include <netinet/in.h>
  21. # include <sys/socket.h>
  22. # include <sys/time.h>
  23. # include <unistd.h>
  24. # define __declspec(x)
  25. # define __int64 long long
  26. # ifndef SOCKET
  27. # define SOCKET int
  28. # define SOCKADDR_IN sockaddr_in
  29. # define ADDR_ANY INADDR_ANY
  30. # define closesocket close
  31. # define PHOSTENT hostent*
  32. # endif
  33. #endif
  34. #include <Reader.h>
  35. #include <Writer.h>
  36. namespace Framework
  37. {
  38. class Text;
  39. }
  40. namespace Network
  41. {
  42. __declspec(dllexport) void Start(int maxClients);
  43. __declspec(dllexport) void getHostName(char* name, int bufferLen);
  44. __declspec(dllexport) char* getHostAddresse();
  45. __declspec(dllexport) void Exit();
  46. class Verbindung
  47. {
  48. public:
  49. virtual bool sende(const char* nachricht, int len)
  50. = 0; // sendet Nachricht
  51. virtual bool getNachricht(char* nachricht, int len)
  52. = 0; // empfängt Nachricht
  53. };
  54. class EncryptedVerbindung : public Verbindung
  55. {
  56. public:
  57. virtual bool sendeEncrypted(const char* nachricht, int len)
  58. = 0; // sendet Nachricht
  59. virtual bool getNachrichtEncrypted(char* nachricht, int len)
  60. = 0; // empfängt Nachricht
  61. };
  62. class NetworkReader : public Framework::StreamReader
  63. {
  64. private:
  65. Verbindung* verbindung;
  66. public:
  67. __declspec(dllexport) NetworkReader(Verbindung* v);
  68. __declspec(dllexport) virtual ~NetworkReader();
  69. //! Ließt aus der Datei
  70. //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt
  71. //! werden soll \param len Wie viele Bytes aus der Resource gelesen
  72. //! werden sollen
  73. __declspec(dllexport) void lese(char* bytes, int len) override;
  74. //! Ließt die nächste zeile der Resource ein
  75. //! \return Die gelesene Zeile als Text mit zeilenumbruch
  76. __declspec(dllexport) Framework::Text* leseZeile() override;
  77. //! Prüft, ob die Resource vollständig gelesen wurde
  78. //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst
  79. __declspec(dllexport) bool istEnde() const override;
  80. };
  81. class NetworkWriter : public Framework::StreamWriter
  82. {
  83. private:
  84. Verbindung* verbindung;
  85. public:
  86. __declspec(dllexport) NetworkWriter(Verbindung* v);
  87. __declspec(dllexport) virtual ~NetworkWriter();
  88. //! Schreibt in die Resource
  89. //! \param bytes Ein Array, der die Bytes enthält, welche in die
  90. //! Resource geschrieben werden soll \param len Wie viele Bytes in die
  91. //! Resource geschrieben werden sollen
  92. __declspec(dllexport) void schreibe(
  93. const char* bytes, int len) override;
  94. //! Prüft, ob die Resource vollständig geschrieben wurde
  95. //! return 1, wenn die Resource vollständig geschrieben wurde. 0, sonst
  96. __declspec(dllexport) bool istEnde() const override;
  97. };
  98. class EncryptedNetworkReader : public Framework::StreamReader
  99. {
  100. private:
  101. EncryptedVerbindung* verbindung;
  102. public:
  103. __declspec(dllexport) EncryptedNetworkReader(EncryptedVerbindung* v);
  104. //! Ließt aus der Datei
  105. //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt
  106. //! werden soll \param len Wie viele Bytes aus der Resource gelesen
  107. //! werden sollen
  108. __declspec(dllexport) void lese(char* bytes, int len) override;
  109. //! Ließt die nächste zeile der Resource ein
  110. //! \return Die gelesene Zeile als Text mit zeilenumbruch
  111. __declspec(dllexport) Framework::Text* leseZeile() override;
  112. //! Prüft, ob die Resource vollständig gelesen wurde
  113. //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst
  114. __declspec(dllexport) bool istEnde() const override;
  115. };
  116. class EncryptedNetworkWriter : public Framework::StreamWriter
  117. {
  118. private:
  119. EncryptedVerbindung* verbindung;
  120. public:
  121. __declspec(dllexport) EncryptedNetworkWriter(EncryptedVerbindung* v);
  122. //! Schreibt in die Resource
  123. //! \param bytes Ein Array, der die Bytes enthält, welche in die
  124. //! Resource geschrieben werden soll \param len Wie viele Bytes in die
  125. //! Resource geschrieben werden sollen
  126. __declspec(dllexport) void schreibe(
  127. const char* bytes, int len) override;
  128. //! Prüft, ob die Resource vollständig geschrieben wurde
  129. //! return 1, wenn die Resource vollständig geschrieben wurde. 0, sonst
  130. __declspec(dllexport) bool istEnde() const override;
  131. };
  132. } // namespace Network
  133. #endif