package HikNetSDK import ( "sync" "unsafe" ) type HIKNvr struct { core unsafe.Pointer State bool NvrConfig Nvr mux sync.RWMutex } func NewHIKNvr(nvrConfig Nvr) *HIKNvr { return &HIKNvr{ core: newHIKNvr(), NvrConfig: nvrConfig, State: false, mux: sync.RWMutex{}, } } func (h *HIKNvr) opt(action func() bool) bool { h.mux.RLock() if h.State { h.mux.RUnlock() h.mux.Lock() h.State = action() h.mux.Unlock() } h.mux.RUnlock() return h.State } func (h *HIKNvr) Login() bool { h.mux.Lock() h.State = initNvr(h.core, h.NvrConfig.Ip, h.NvrConfig.Port, h.NvrConfig.User, h.NvrConfig.Password, h.NvrConfig.Channel) h.mux.Unlock() return h.State } func (h *HIKNvr) CheckTimeRegionWithMonth(year int, month int) string { h.mux.RLock() if h.State { h.mux.RUnlock() data := checkTimeRegionWithMonth(h.core, year, month) if data == "" { h.mux.Lock() h.State = false h.mux.Unlock() } else { h.mux.Lock() h.State = true h.mux.Unlock() return data } } else { h.mux.RUnlock() } return "" } func (h *HIKNvr) CheckTimeRegionWithDay(year int, month int, day int) string { h.mux.RLock() if h.State { h.mux.RUnlock() data := checkTimeRegionWithDay(h.core, year, month, day) if data == "" { h.mux.Lock() h.State = false h.mux.Unlock() } else { h.mux.Lock() h.State = true h.mux.Unlock() return data } } else { h.mux.RUnlock() } return "" } func (h *HIKNvr) UTCDiff() int { h.mux.RLock() if h.State { data := nvrUTCDiff(h.core) h.mux.RUnlock() if nvrUTCDiff(h.core) == 5000 { h.mux.Lock() h.State = false h.mux.Unlock() } else { h.mux.Lock() h.State = true h.mux.Unlock() return data } } else { h.mux.RUnlock() } return 5000 }