onvif/api/api.go

66 lines
1.6 KiB
Go
Raw Normal View History

2018-04-05 20:18:28 +08:00
package api
import (
"github.com/yakovlevdmv/goonvif"
"github.com/yakovlevdmv/goonvif/Device"
"fmt"
2018-04-07 03:25:40 +08:00
"reflect"
2018-04-05 20:18:28 +08:00
)
2018-04-07 03:25:40 +08:00
//func RunApi () {
// router := gin.Default()
//
// router.POST("/:service/:method", func(c *gin.Context) {
// serviceName := c.Param("service")
// methodName := c.Param("method")
// message := callNecessaryMethod(&serviceName, &methodName, "192.168.13.12")
// c.XML(http.StatusOK, message)
// })
// router.Run()
//}
2018-04-05 20:18:28 +08:00
2018-04-07 03:25:40 +08:00
func soapHandling(tp interface{}, tags* map[string]string) {
ifaceValue := reflect.ValueOf(tp).Elem()
typeOfStruct := ifaceValue.Type()
if ifaceValue.Kind() != reflect.Struct {
return
2018-04-05 20:18:28 +08:00
}
2018-04-07 03:25:40 +08:00
for i := 0; i < ifaceValue.NumField(); i++ {
field := ifaceValue.Field(i)
tg, err := typeOfStruct.FieldByName(typeOfStruct.Field(i).Name)
if err == false {
fmt.Println(err)
}
(*tags)[typeOfStruct.Field(i).Name] = string(tg.Tag)
2018-04-05 20:18:28 +08:00
2018-04-07 03:25:40 +08:00
subStruct := reflect.New(reflect.TypeOf( field.Interface() ))
soapHandling(subStruct.Interface(), tags)
}
2018-04-05 20:18:28 +08:00
}
2018-04-07 03:25:40 +08:00
func callNecessaryMethod(serviceName* string, methodName* string, deviceXaddr* string) *string {
switch *serviceName {
2018-04-05 20:18:28 +08:00
case "Device", "device":
2018-04-07 03:25:40 +08:00
return callDeviceMethods(methodName, deviceXaddr)
}
return nil
}
func callDeviceMethods(methodName* string, deviceXaddr* string) *string {
switch *methodName {
case "GetCapabilities":
return GetCapabilities(deviceXaddr)
default:
return nil
2018-04-05 20:18:28 +08:00
}
}
2018-04-07 03:25:40 +08:00
func GetCapabilities(deviceXaddr* string) *string {
device := goonvif.NewDevice(*deviceXaddr)
data, err := device.CallMethod(Device.GetCapabilities{Category:"All"})
if err != nil {
fmt.Println(err)
}
return &data
2018-04-05 20:18:28 +08:00
}