package zabbixagent import ( "fmt" "github.com/gin-gonic/gin" "zabbixagent2plugintemplate/response" handler "zabbixagent2plugintemplate/router/handler/onvif" service "zabbixagent2plugintemplate/service/onvif" ) func DiscoverONVIFDevices(c *gin.Context) { type device struct { Xaddr string `json:"{#XADDR}"` } devices := make([]device, 0) for xaddr := range service.Sessions { devices = append(devices, device{ Xaddr: xaddr, }) } response.NewResponse().WithData(devices).Send(c) } func RegisterONVIFDevices(c *gin.Context) { var req []handler.CreateSessionRequest if err := c.ShouldBindJSON(&req); err != nil { response.NewResponse().Error(err).Send(c) return } // 用于替换已存在的 Sessions var sessions = make(map[string]*service.Session) for _, v := range req { session, err := service.NewSession(v.Xaddr, v.Username, v.Password) if err != nil { response.NewResponse().Error(err).Send(c) return } _, err = session.GetDeviceInfo() if err != nil { response.NewResponse().Error(err).Send(c) return } sessions[session.Device.GetDeviceParams().Xaddr] = session } service.Sessions = sessions response.NewResponse().Success().WithMessage(fmt.Sprintf("%d device(s) registered", len(sessions))).Send(c) } type ConsumeNotificationsRequest struct { Xaddr string `json:"xaddr"` } func ConsumeONVIFNotifications(c *gin.Context) { var req ConsumeNotificationsRequest if err := c.ShouldBindJSON(&req); err != nil { response.NewResponse().Error(err).Send(c) return } n := service.Notifications[req.Xaddr] delete(service.Notifications, req.Xaddr) response.NewResponse().WithData(n).Send(c) }