HikNvr.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. data := checkTimeRegionWithMonth(h.core, year, month)
  42. if data == "" {
  43. h.mux.Lock()
  44. h.State = false
  45. h.mux.Unlock()
  46. } else {
  47. h.mux.Lock()
  48. h.State = true
  49. h.mux.Unlock()
  50. return data
  51. }
  52. } else {
  53. h.mux.RUnlock()
  54. }
  55. return ""
  56. }
  57. func (h *HIKNvr) CheckTimeRegionWithDay(year int, month int, day int) string {
  58. h.mux.RLock()
  59. if h.State {
  60. h.mux.RUnlock()
  61. data := checkTimeRegionWithDay(h.core, year, month, day)
  62. if data == "" {
  63. h.mux.Lock()
  64. h.State = false
  65. h.mux.Unlock()
  66. } else {
  67. h.mux.Lock()
  68. h.State = true
  69. h.mux.Unlock()
  70. return data
  71. }
  72. } else {
  73. h.mux.RUnlock()
  74. }
  75. return ""
  76. }
  77. func (h *HIKNvr) UTCDiff() int {
  78. h.mux.RLock()
  79. if h.State {
  80. data := nvrUTCDiff(h.core)
  81. h.mux.RUnlock()
  82. if nvrUTCDiff(h.core) == 5000 {
  83. h.mux.Lock()
  84. h.State = false
  85. h.mux.Unlock()
  86. } else {
  87. h.mux.Lock()
  88. h.State = true
  89. h.mux.Unlock()
  90. return data
  91. }
  92. } else {
  93. h.mux.RUnlock()
  94. }
  95. return 5000
  96. }