Files
HikNetSDKPkg/HikNvr.go

102 lines
2.1 KiB
Go

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()
if checkTimeRegionWithMonth(h.core, year, month) == "" {
h.mux.Lock()
h.State = false
h.mux.Unlock()
} else {
h.mux.Lock()
h.State = true
h.mux.Unlock()
}
} 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) == 500 {
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 1000
}