cabinet_hub.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package cabinet_pkg
  2. import "sync"
  3. var cabinets *cabinetHub
  4. // cabinetHub 管理柜子的集合
  5. type cabinetHub struct {
  6. // 所有柜子 map[id]*cabinet
  7. cabinets map[int]*cabinet
  8. cabinetIPs map[string]int
  9. mutex *sync.Mutex
  10. }
  11. func NewCabinets() {
  12. if cabinets == nil {
  13. cabinets = &cabinetHub{
  14. cabinets: make(map[int]*cabinet),
  15. cabinetIPs: make(map[string]int),
  16. mutex: &sync.Mutex{},
  17. }
  18. }
  19. }
  20. func GetCabinets() []MemInfo {
  21. if cabinets == nil {
  22. return nil
  23. }
  24. infos := make([]MemInfo, 0)
  25. for _, cb := range cabinets.cabinets {
  26. infos = append(infos, cb.memInfo)
  27. }
  28. return infos
  29. }
  30. func GetCabinet(cabinetId int) *MemInfo {
  31. if cabinets == nil {
  32. return nil
  33. }
  34. if val, ok := cabinets.getCabinet(cabinetId); ok {
  35. return &val.memInfo
  36. }
  37. return nil
  38. }
  39. func (ch *cabinetHub) setCabinet(id int, cab *cabinet) {
  40. ch.mutex.Lock()
  41. defer ch.mutex.Unlock()
  42. ch.cabinets[id] = cab
  43. ch.cabinetIPs[cab.memInfo.CabinetIP] = id
  44. return
  45. }
  46. func (ch *cabinetHub) getCabinet(id int) (*cabinet, bool) {
  47. ch.mutex.Lock()
  48. defer ch.mutex.Unlock()
  49. cab, ok := ch.cabinets[id]
  50. return cab, ok
  51. }
  52. func (ch *cabinetHub) getCabinetByIP(ip string) (*cabinet, bool) {
  53. ch.mutex.Lock()
  54. defer ch.mutex.Unlock()
  55. cabId, ok := ch.cabinetIPs[ip]
  56. if !ok {
  57. return nil, false
  58. }
  59. cab, ok := ch.cabinets[cabId]
  60. return cab, ok
  61. }
  62. func (ch *cabinetHub) deleteCabinet(id int) {
  63. cab, ok := ch.getCabinet(id)
  64. if ok {
  65. ch.mutex.Lock()
  66. delete(ch.cabinets, id)
  67. delete(ch.cabinetIPs, cab.memInfo.CabinetIP)
  68. ch.mutex.Unlock()
  69. }
  70. }