package event import ( "fmt" "sync" ) var ( PrintObject *PrintObjectStruct // 缓存的打印机对象 PrintAddrAndIp *PrintAddrAndIpStruct // 缓存打印机地址:[ip:printNo] event 文件包,connect只能获取到addr PrintIpAndAddr *PrintIpAndAddrStruct // 缓存打印机地址:[printNo:ip] api_controller 只能获取到printNo ) func init() { fmt.Println("初始化打印机对象") PrintObject = &PrintObjectStruct{ PrintObject: make(map[string]*TcpClient), RWMutex: new(sync.RWMutex), } PrintAddrAndIp = &PrintAddrAndIpStruct{ PrintObject: make(map[string]string), RWMutex: new(sync.RWMutex), } PrintIpAndAddr = &PrintIpAndAddrStruct{ PrintObject: make(map[string]string), RWMutex: new(sync.RWMutex), } } type PrintObjectStruct struct { PrintObject map[string]*TcpClient *sync.RWMutex } func (p *PrintObjectStruct) GetPrintObj(printNo string) (*TcpClient, bool) { p.RLock() defer p.RUnlock() tcpObj, ok := PrintObject.PrintObject[printNo] return tcpObj, ok } func (p *PrintObjectStruct) SetPrintObj(printNo string, tcpObj *TcpClient) { p.RLock() defer p.RUnlock() PrintObject.PrintObject[printNo] = tcpObj } func (p *PrintObjectStruct) DelPrintObj(printNo string) { p.RLock() defer p.RUnlock() delete(PrintObject.PrintObject, printNo) } type PrintAddrAndIpStruct struct { PrintObject map[string]string *sync.RWMutex } func (p *PrintAddrAndIpStruct) GetPrintAddrAndIp(ip string) (string, bool) { p.RLock() defer p.RUnlock() printNo, ok := PrintAddrAndIp.PrintObject[ip] return printNo, ok } func (p *PrintAddrAndIpStruct) SetPrintAddrAndIp(ip string, printNo string) { p.RLock() defer p.RUnlock() PrintAddrAndIp.PrintObject[ip] = printNo } func (p *PrintAddrAndIpStruct) DelPrintAddrAndIp(ip string) { p.RLock() defer p.RUnlock() delete(PrintAddrAndIp.PrintObject, ip) } type PrintIpAndAddrStruct struct { PrintObject map[string]string *sync.RWMutex } func (p *PrintIpAndAddrStruct) GetPrintIpAndAddr(printNo string) (string, bool) { p.RLock() defer p.RUnlock() tcpObj, ok := PrintIpAndAddr.PrintObject[printNo] return tcpObj, ok } func (p *PrintIpAndAddrStruct) SetPrintIpAndAddr(printNo string, ip string) { p.RLock() defer p.RUnlock() PrintIpAndAddr.PrintObject[printNo] = ip } func (p *PrintIpAndAddrStruct) DelPrintIpAndAddr(printNo string) { p.RLock() defer p.RUnlock() delete(PrintIpAndAddr.PrintObject, printNo) }