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
|
|
|
}
|