102 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			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
 | |
| }
 |