PageRenderTime 57ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/Socket.h

https://gitlab.com/N3X15/sm-ext-socket
C Header | 75 lines | 54 code | 19 blank | 2 comment | 0 complexity | ae83c0e67a3bb5370e865f9d1c2e1d78 MD5 | raw file
Possible License(s): GPL-2.0
  1. #ifndef INC_SEXT_SOCKET_H
  2. #define INC_SEXT_SOCKET_H
  3. #include <stdint.h>
  4. #include <string>
  5. #include <queue>
  6. #include <boost/asio.hpp>
  7. #include <boost/thread.hpp>
  8. #include <boost/thread/shared_mutex.hpp>
  9. #include "sdk/smsdk_ext.h"
  10. #include "Define.h"
  11. class SocketHandler;
  12. template <class SocketType>
  13. class Socket {
  14. public:
  15. Socket(SM_SocketType st, typename SocketType::socket* asioSocket = NULL);
  16. ~Socket();
  17. bool IsOpen();
  18. bool Bind(const char* hostname, uint16_t port, bool async = true);
  19. bool Connect(const char* hostname, uint16_t port, bool async = true);
  20. bool Disconnect();
  21. bool Listen();
  22. bool Send(const std::string& data, bool async = true);
  23. bool SendTo(const std::string& data, const char* hostname, uint16_t port, bool async = true);
  24. bool SetOption(SM_SocketOption so, int value, bool lock=true);
  25. IPluginFunction* connectCallback;
  26. IPluginFunction* incomingCallback;
  27. IPluginFunction* receiveCallback;
  28. IPluginFunction* sendqueueEmptyCallback;
  29. IPluginFunction* disconnectCallback;
  30. IPluginFunction* errorCallback;
  31. int32_t smHandle;
  32. int32_t smCallbackArg;
  33. volatile unsigned int sendQueueLength;
  34. private:
  35. void ReceiveHandler(char* buf, size_t bufferSize, size_t bytes, const boost::system::error_code&, boost::shared_lock<boost::shared_mutex>*);
  36. void BindPostResolveHandler(typename SocketType::resolver*, typename SocketType::resolver::iterator, const boost::system::error_code&, boost::shared_lock<boost::shared_mutex>*);
  37. void ConnectPostResolveHandler(typename SocketType::resolver*, typename SocketType::resolver::iterator, const boost::system::error_code&, boost::shared_lock<boost::shared_mutex>*);
  38. void ConnectPostConnectHandler(typename SocketType::resolver*, typename SocketType::resolver::iterator, const boost::system::error_code&, boost::shared_lock<boost::shared_mutex>*);
  39. void ListenIncomingHandler(boost::asio::ip::tcp::socket* newAsioSocket, const boost::system::error_code&, boost::shared_lock<boost::shared_mutex>*);
  40. void SendPostSendHandler(char* buf, size_t bytes, const boost::system::error_code& err, boost::shared_lock<boost::shared_mutex>*);
  41. void SendToPostResolveHandler(typename SocketType::resolver*, typename SocketType::resolver::iterator, char* buf, size_t bufLen, const boost::system::error_code&, boost::shared_lock<boost::shared_mutex>*);
  42. void SendToPostSendHandler(typename SocketType::resolver*, typename SocketType::resolver::iterator, char* buf, size_t bufLen, size_t bytesTransferred, const boost::system::error_code&, boost::shared_lock<boost::shared_mutex>*);
  43. //void InitializeResolver();
  44. void InitializeSocket();
  45. SM_SocketType sm_sockettype;
  46. std::queue<SocketOption*> socketOptionQueue;
  47. typename SocketType::socket* socket;
  48. boost::mutex socketMutex;
  49. //typename SocketType::resolver* resolver;
  50. typename SocketType::endpoint* localEndpoint;
  51. boost::mutex* localEndpointMutex;
  52. boost::asio::ip::tcp::acceptor* tcpAcceptor;
  53. boost::mutex* tcpAcceptorMutex;
  54. boost::shared_mutex handlerMutex;
  55. };
  56. #endif