IO.Profile.BUS.Role.hpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #pragma once
  2. #include <list>
  3. #include <vector>
  4. #include <functional>
  5. #include "String.DString.hpp"
  6. #include "IO.Profile.hpp"
  7. #include "IO.Profile.BUS.Define.hpp"
  8. namespace ECOM::IO
  9. {
  10. class Link;
  11. }
  12. namespace ECOM::ServiceBus::Controller
  13. {
  14. namespace Role
  15. {
  16. using IOLink = ECOM::IO::Link;
  17. //-----------------------------------------------------------------------------
  18. // Sender
  19. //-----------------------------------------------------------------------------
  20. class _IO_Profile_BUS_API Sender
  21. {
  22. public:
  23. Sender ();
  24. virtual ~Sender ();
  25. public:
  26. // !! 返回值一定非空. 但是不能保证返回的 Link 一定是 Connected
  27. virtual auto NewLink () -> std::unique_ptr <IOLink> = 0; // 命令端口.
  28. public:
  29. int GetNbOfChannel () const; // 总共有多少个通道 ?
  30. virtual int GetCommandPort () const = 0;
  31. virtual eSTR::DString ToString () const = 0;
  32. };
  33. //-----------------------------------------------------------------------------
  34. // Receiver
  35. // 此对象需要设计成线程安全的, 或者说一旦构造完毕就是只读的.
  36. // 因为对象需要在线程之间共享, BUSY::FireOnMessage () 等函数中, 把这个对象直接传递到异步线程中.
  37. //-----------------------------------------------------------------------------
  38. class _IO_Profile_BUS_API Receiver
  39. {
  40. public:
  41. Receiver ();
  42. virtual ~Receiver ();
  43. public:
  44. // !! 返回值一定非空. 但是不能保证返回的 Link 一定是 Connected
  45. virtual auto NewLink () -> std::unique_ptr <IOLink> = 0; // 状态端口, 接收
  46. virtual auto NewLinkForCommand () -> std::unique_ptr <IOLink> = 0; // 命令端口, 发送.
  47. virtual auto NewLinkForAck () -> std::unique_ptr <IOLink> = 0; // 命令端口, 发送 Ack.
  48. public:
  49. int GetNbOfChannel () const; // 总共有多少个通道 ?
  50. virtual int GetStatusPort () const = 0;
  51. virtual eSTR::DString ToString () const = 0; // 返回格式: 192.168.1.100 -> 6631, 用于 Log 等
  52. };
  53. }
  54. }
  55. //namespace IOPBUS = ECOM::IO::Profile::ServiceBus;