server_tcp_pack_windows.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //go:build windows
  2. package yu_hpsocket
  3. // TcpPackServer
  4. // @Description: TcpPackServerListener 对象,请自己创建和销毁,目的是保证安全
  5. type TcpPackServer struct {
  6. Server[TcpPackServer]
  7. TcpServer
  8. }
  9. // NewTcpPackServer
  10. //
  11. // @Description: 创建 TcpPackServer 对象
  12. func NewTcpPackServer() (t *TcpPackServer) {
  13. t = &TcpPackServer{}
  14. return
  15. }
  16. // Create
  17. //
  18. // @Description: 创建 TcpPackServer 环境
  19. func (t *TcpPackServer) Create(SSL bool) bool {
  20. t.Close()
  21. if t.hListener, _, _ = Create_HP_TcpPackServerListener.Call(); t.hListener == 0 {
  22. return false
  23. }
  24. if t.SSL = SSL; t.SSL {
  25. t.hServer, _, _ = Create_HP_SSLPackServer.Call(t.hListener)
  26. } else {
  27. t.hServer, _, _ = Create_HP_TcpPackServer.Call(t.hListener)
  28. }
  29. if t.hServer == 0 {
  30. Destroy_HP_TcpPackServerListener.Call(t.hListener)
  31. t.hListener = 0
  32. return false
  33. }
  34. _server_on_set(t.hServer, &_server_item{
  35. _type: _server_type_TcpPackServer,
  36. t: t,
  37. })
  38. return true
  39. }
  40. // Close
  41. //
  42. // @Description: 销毁 TcpPackServer 环境
  43. func (t *TcpPackServer) Close() {
  44. t.Stop()
  45. t.Wait(-1)
  46. if t.hServer != 0 {
  47. if t.SSL {
  48. Destroy_HP_SSLPackServer.Call(t.hServer)
  49. } else {
  50. Destroy_HP_TcpPackServer.Call(t.hServer)
  51. }
  52. _server_on_del(t.hServer)
  53. t.hServer = 0
  54. }
  55. if t.hListener != 0 {
  56. Destroy_HP_TcpPackServerListener.Call(t.hListener)
  57. t.hListener = 0
  58. }
  59. }
  60. // SetMaxPackSize
  61. //
  62. // @Description: 设置数据包最大长度(有效数据包最大长度不能超过 4194303/0x3FFFFF 字节,默认:262144/0x40000)
  63. func (t *TcpPackServer) SetMaxPackSize(MaxPackSize int) *TcpPackServer {
  64. if !t.isValid() {
  65. return t
  66. }
  67. HP_TcpPackServer_SetMaxPackSize.Call(t.hServer, MaxPackSize)
  68. return t
  69. }
  70. // SetPackHeaderFlag
  71. //
  72. // @Description: 设置包头标识(有效包头标识取值范围 0 ~ 1023/0x3FF,当包头标识为 0 时不校验包头,默认:0)
  73. func (t *TcpPackServer) SetPackHeaderFlag(PackHeaderFlag int) *TcpPackServer {
  74. if !t.isValid() {
  75. return t
  76. }
  77. HP_TcpPackServer_SetPackHeaderFlag.Call(t.hServer, PackHeaderFlag)
  78. return t
  79. }
  80. // GetMaxPackSize
  81. //
  82. // @Description: 获取数据包最大长度
  83. func (t *TcpPackServer) GetMaxPackSize() int {
  84. if !t.isValid() {
  85. return 0
  86. }
  87. return HP_TcpPackServer_GetMaxPackSize.CallInt(t.hServer)
  88. }
  89. // GetPackHeaderFlag
  90. //
  91. // @Description: 获取包头标识
  92. func (t *TcpPackServer) GetPackHeaderFlag() uintptr {
  93. if !t.isValid() {
  94. return 0
  95. }
  96. return HP_TcpPackServer_GetPackHeaderFlag.CallUintptr(t.hServer)
  97. }