ihub.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package nnet
  2. import (
  3. "sync"
  4. "time"
  5. )
  6. var (
  7. // Hub 状态
  8. DefHubConfig = HubConfig{
  9. SizeOfSendChan: 1024,
  10. SizeOfRecvChan: 1024,
  11. ReadBufSize: 2048,
  12. WriteBufSize: 2048,
  13. Timeout: 3 * time.Second,
  14. Tick: 10 * time.Second,
  15. ReadTimeout: 3 * time.Second,
  16. }
  17. )
  18. type HubConfig struct {
  19. SizeOfSendChan uint32
  20. SizeOfRecvChan uint32
  21. ReadBufSize int
  22. WriteBufSize int
  23. Timeout time.Duration // 发送等超时
  24. Tick time.Duration // 定时回调
  25. ReadTimeout time.Duration // 讀超時,如果為0,則無限等待。超時到達,意味著客戶端心跳丟失
  26. }
  27. type IHub interface {
  28. Lock() // support locker semantics
  29. Unlock()
  30. Wg() *sync.WaitGroup // object
  31. ChQuit() <-chan struct{} // 返回一个通道,用于退出 hub 循环
  32. Conf() *HubConfig // 返回配置信息
  33. Callback() ISessionCallback // 返回回调对象
  34. Protocol() IProtocol // 返回数据协议
  35. Start() error // 启动 hub
  36. Stop() error // 停止 hub
  37. DoJob(int) // 执行 hub 中其他任务
  38. PutSession(uint64, ISession) error // session 管理,这里的 session 必须基于 id
  39. DelSession(uint64) error
  40. GetSession(uint64) (ISession, error)
  41. PeekSession(uint64) (ISession, error)
  42. RandSession() (ISession, error)
  43. GetSessionNum() int
  44. GetAllSessions() map[uint64]ISession
  45. }