limit_client.go 727 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package sessdata
  2. import (
  3. "sync"
  4. "github.com/bjdgyc/anylink/base"
  5. )
  6. const limitAllKey = "__ALL__"
  7. var (
  8. limitClient = map[string]int{limitAllKey: 0}
  9. limitMux = sync.Mutex{}
  10. )
  11. func LimitClient(user string, close bool) bool {
  12. limitMux.Lock()
  13. defer limitMux.Unlock()
  14. _all := limitClient[limitAllKey]
  15. c, ok := limitClient[user]
  16. if !ok { // 不存在用户
  17. limitClient[user] = 0
  18. }
  19. if close {
  20. limitClient[user] = c - 1
  21. limitClient[limitAllKey] = _all - 1
  22. return true
  23. }
  24. // 全局判断
  25. if _all >= base.Cfg.MaxClient {
  26. return false
  27. }
  28. // 超出同一个用户限制
  29. if c >= base.Cfg.MaxUserClient {
  30. return false
  31. }
  32. limitClient[user] = c + 1
  33. limitClient[limitAllKey] = _all + 1
  34. return true
  35. }