receiver.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package handler
  2. import (
  3. "bet24.com/log"
  4. "sync"
  5. "time"
  6. )
  7. type privateroomReceiver struct {
  8. name string
  9. active bool
  10. }
  11. type receiverMgr struct {
  12. receivers []privateroomReceiver
  13. lockReceiver *sync.RWMutex
  14. }
  15. func newReceiverMgr() *receiverMgr {
  16. ret := new(receiverMgr)
  17. ret.ctor()
  18. return ret
  19. }
  20. func (rm *receiverMgr) ctor() {
  21. rm.lockReceiver = &sync.RWMutex{}
  22. go rm.checkRemoveReceivers()
  23. }
  24. func (rm *receiverMgr) checkRemoveReceivers() {
  25. time.AfterFunc(5*time.Minute, rm.checkRemoveReceivers)
  26. rm.removeInactiveReceivers()
  27. }
  28. func (rm *receiverMgr) dump() {
  29. rm.lockReceiver.RLock()
  30. for _, v := range rm.receivers {
  31. log.Release(" %s[%v]", v.name, v.active)
  32. }
  33. rm.lockReceiver.RUnlock()
  34. }
  35. func (rm *receiverMgr) setReceiver(addr string, active bool) {
  36. rm.lockReceiver.Lock()
  37. defer rm.lockReceiver.Unlock()
  38. for k, v := range rm.receivers {
  39. if v.name == addr {
  40. rm.receivers[k].active = active
  41. return
  42. }
  43. }
  44. if active {
  45. rm.receivers = append(rm.receivers, privateroomReceiver{name: addr, active: true})
  46. }
  47. }
  48. func (rm *receiverMgr) getActiveReceivers() []string {
  49. var ret []string
  50. rm.lockReceiver.RLock()
  51. for _, v := range rm.receivers {
  52. if v.active {
  53. ret = append(ret, v.name)
  54. }
  55. }
  56. rm.lockReceiver.RUnlock()
  57. return ret
  58. }
  59. func (rm *receiverMgr) removeInactiveReceivers() {
  60. rm.lockReceiver.Lock()
  61. defer rm.lockReceiver.Unlock()
  62. for i := 0; i < len(rm.receivers); {
  63. if !rm.receivers[i].active {
  64. log.Release("receiverMgr.removeInactiveReceivers %s", rm.receivers[i].name)
  65. rm.receivers = append(rm.receivers[:i], rm.receivers[i+1:]...)
  66. continue
  67. }
  68. i++
  69. }
  70. }