You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TConnectionDelegate.h 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #pragma once
  2. #include "IConnection.h"
  3. namespace Socket {
  4. struct SConnectionDelegate
  5. {
  6. void* data;
  7. bool (*fpOpen)(void*);
  8. bool (*fpClose)(void*);
  9. bool (*fpIsReadyToSend)(void*, size_t);
  10. bool (*fpIsReadyToReceive)(void*, size_t);
  11. size_t (*fpSendBuffer)(void*, const void*, size_t);
  12. size_t (*fpReceiveBuffer)(void*, void*, size_t);
  13. bool (*fpSendBufferBlocking)(void*, const void*, size_t);
  14. bool (*fpReceiveBufferBlocking)(void*, void*, size_t);
  15. bool (*fpIsConnected)(void*);
  16. bool (*fpRelease)(void*);
  17. };
  18. template <class T>
  19. class Socket_API TConnectionDelegate : public T
  20. {
  21. public:
  22. TConnectionDelegate(const SConnectionDelegate connectionDelegate) : m_connectionDelegate(connectionDelegate) { }
  23. virtual bool close() { return m_connectionDelegate.fpClose(m_connectionDelegate.data); }
  24. virtual bool isReadyToSend(const size_t timeOut) const { return m_connectionDelegate.fpIsReadyToSend(m_connectionDelegate.data, timeOut); }
  25. virtual bool isReadyToReceive(const size_t timeOut) const { return m_connectionDelegate.fpIsReadyToReceive(m_connectionDelegate.data, timeOut); }
  26. virtual size_t sendBuffer(const void* buffer, const size_t size) { return m_connectionDelegate.fpSendBuffer(m_connectionDelegate.data, buffer, size); }
  27. virtual size_t receiveBuffer(void* buffer, const size_t size) { return m_connectionDelegate.fpReceiveBuffer(m_connectionDelegate.data, buffer, size); }
  28. virtual bool sendBufferBlocking(const void* buffer, const size_t size)
  29. {
  30. return m_connectionDelegate.fpSendBufferBlocking(m_connectionDelegate.data, buffer, size);
  31. }
  32. virtual bool receiveBufferBlocking(void* buffer, const size_t bufferSize)
  33. {
  34. return m_connectionDelegate.fpReceiveBufferBlocking(m_connectionDelegate.data, buffer, bufferSize);
  35. }
  36. virtual bool isConnected() const { return m_connectionDelegate.fpIsConnected(m_connectionDelegate.data); }
  37. virtual void release() { m_connectionDelegate.fpRelease(m_connectionDelegate.data); }
  38. virtual ~TConnectionDelegate() { }
  39. protected:
  40. virtual bool open() { return m_connectionDelegate.fpOpen(m_connectionDelegate.data); }
  41. SConnectionDelegate m_connectionDelegate;
  42. };
  43. } // namespace Socket