HikNvr.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package HikNetSDK
  2. import (
  3. "sync"
  4. "unsafe"
  5. )
  6. type HIKNvr struct {
  7. core unsafe.Pointer
  8. State bool
  9. NvrConfig Nvr
  10. mux sync.RWMutex
  11. }
  12. func NewHIKNvr(nvrConfig Nvr) *HIKNvr {
  13. return &HIKNvr{
  14. core: newHIKNvr(),
  15. NvrConfig: nvrConfig,
  16. State: false,
  17. mux: sync.RWMutex{},
  18. }
  19. }
  20. func (h *HIKNvr) opt(action func() bool) bool {
  21. h.mux.RLock()
  22. if h.State {
  23. h.mux.RUnlock()
  24. h.mux.Lock()
  25. h.State = action()
  26. h.mux.Unlock()
  27. }
  28. h.mux.RUnlock()
  29. return h.State
  30. }
  31. func (h *HIKNvr) Login() bool {
  32. h.mux.Lock()
  33. h.State = initNvr(h.core, h.NvrConfig.Ip, h.NvrConfig.Port, h.NvrConfig.User, h.NvrConfig.Password, h.NvrConfig.Channel)
  34. h.mux.Unlock()
  35. return h.State
  36. }
  37. func (h *HIKNvr) CheckTimeRegionWithMonth(year int, month int) string {
  38. h.mux.RLock()
  39. if h.State {
  40. h.mux.RUnlock()
  41. if checkTimeRegionWithMonth(h.core, year, month) == "" {
  42. h.mux.Lock()
  43. h.State = false
  44. h.mux.Unlock()
  45. } else {
  46. h.mux.Lock()
  47. h.State = true
  48. h.mux.Unlock()
  49. }
  50. } else {
  51. h.mux.RUnlock()
  52. }
  53. return ""
  54. }
  55. func (h *HIKNvr) CheckTimeRegionWithDay(year int, month int, day int) string {
  56. h.mux.RLock()
  57. if h.State {
  58. h.mux.RUnlock()
  59. data := checkTimeRegionWithDay(h.core, year, month, day)
  60. if data == "" {
  61. h.mux.Lock()
  62. h.State = false
  63. h.mux.Unlock()
  64. } else {
  65. h.mux.Lock()
  66. h.State = true
  67. h.mux.Unlock()
  68. return data
  69. }
  70. } else {
  71. h.mux.RUnlock()
  72. }
  73. return ""
  74. }
  75. func (h *HIKNvr) UTCDiff() int {
  76. h.mux.RLock()
  77. if h.State {
  78. data := nvrUTCDiff(h.core)
  79. h.mux.RUnlock()
  80. if nvrUTCDiff(h.core) == 500 {
  81. h.mux.Lock()
  82. h.State = false
  83. h.mux.Unlock()
  84. } else {
  85. h.mux.Lock()
  86. h.State = true
  87. h.mux.Unlock()
  88. return data
  89. }
  90. } else {
  91. h.mux.RUnlock()
  92. }
  93. return 1000
  94. }