12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package cabinet_pkg
- import "sync"
- var cabinets *cabinetHub
- // cabinetHub 管理柜子的集合
- type cabinetHub struct {
- // 所有柜子 map[id]*cabinet
- cabinets map[int]*cabinet
- cabinetIPs map[string]int
- mutex *sync.Mutex
- }
- func NewCabinets() {
- if cabinets == nil {
- cabinets = &cabinetHub{
- cabinets: make(map[int]*cabinet),
- cabinetIPs: make(map[string]int),
- mutex: &sync.Mutex{},
- }
- }
- }
- func GetCabinets() []MemInfo {
- if cabinets == nil {
- return nil
- }
- infos := make([]MemInfo, 0)
- for _, cb := range cabinets.cabinets {
- infos = append(infos, cb.memInfo)
- }
- return infos
- }
- func GetCabinet(cabinetId int) *MemInfo {
- if cabinets == nil {
- return nil
- }
- if val, ok := cabinets.getCabinet(cabinetId); ok {
- return &val.memInfo
- }
- return nil
- }
- func (ch *cabinetHub) setCabinet(id int, cab *cabinet) {
- ch.mutex.Lock()
- defer ch.mutex.Unlock()
- ch.cabinets[id] = cab
- ch.cabinetIPs[cab.memInfo.CabinetIP] = id
- return
- }
- func (ch *cabinetHub) getCabinet(id int) (*cabinet, bool) {
- ch.mutex.Lock()
- defer ch.mutex.Unlock()
- cab, ok := ch.cabinets[id]
- return cab, ok
- }
- func (ch *cabinetHub) getCabinetByIP(ip string) (*cabinet, bool) {
- ch.mutex.Lock()
- defer ch.mutex.Unlock()
- cabId, ok := ch.cabinetIPs[ip]
- if !ok {
- return nil, false
- }
- cab, ok := ch.cabinets[cabId]
- return cab, ok
- }
- func (ch *cabinetHub) deleteCabinet(id int) {
- cab, ok := ch.getCabinet(id)
- if ok {
- ch.mutex.Lock()
- delete(ch.cabinets, id)
- delete(ch.cabinetIPs, cab.memInfo.CabinetIP)
- ch.mutex.Unlock()
- }
- }
|