format api code file

This commit is contained in:
Eamon
2018-05-16 14:11:00 +08:00
parent 6d8f9c3a71
commit 7d22982453

View File

@@ -1,23 +1,24 @@
package api
import (
"errors"
"fmt"
"io/ioutil"
"net/http"
"path"
"reflect"
"regexp"
"errors"
"strings"
"github.com/beevik/etree"
"github.com/gin-gonic/gin"
"github.com/yakovlevdmv/gosoap"
"github.com/yakovlevdmv/WS-Discovery"
"github.com/yakovlevdmv/goonvif"
"github.com/yakovlevdmv/goonvif/networking"
"net/http"
"io/ioutil"
"github.com/yakovlevdmv/WS-Discovery"
"path"
"github.com/yakovlevdmv/gosoap"
)
func RunApi () {
func RunApi() {
router := gin.Default()
router.POST("/:service/:method", func(c *gin.Context) {
@@ -49,7 +50,7 @@ func RunApi () {
interfaceName := context.GetHeader("interface")
var response = "["
devices := WS_Discovery.SendProbe(interfaceName, nil, []string{"dn:NetworkVideoTransmitter"}, map[string]string{"dn":"http://www.onvif.org/ver10/network/wsdl"})
devices := WS_Discovery.SendProbe(interfaceName, nil, []string{"dn:NetworkVideoTransmitter"}, map[string]string{"dn": "http://www.onvif.org/ver10/network/wsdl"})
for _, j := range devices {
doc := etree.NewDocument()
if err := doc.ReadFromString(j); err != nil {
@@ -57,7 +58,7 @@ func RunApi () {
} else {
endpoints := doc.Root().FindElements("./Body/ProbeMatches/ProbeMatch/XAddrs")
scopes := doc.Root().FindElements("./Body/ProbeMatches/ProbeMatch/Scopes")
scopes := doc.Root().FindElements("./Body/ProbeMatches/ProbeMatch/Scopes")
flag := false
@@ -93,7 +94,6 @@ func RunApi () {
router.Run()
}
//func soapHandling(tp interface{}, tags* map[string]string) {
// ifaceValue := reflect.ValueOf(tp).Elem()
// typeOfStruct := ifaceValue.Type()
@@ -113,7 +113,6 @@ func RunApi () {
// }
//}
func callNecessaryMethod(serviceName, methodName, acceptedData, username, password, xaddr string) (string, error) {
var methodStruct interface{}
var err error
@@ -160,7 +159,7 @@ func callNecessaryMethod(serviceName, methodName, acceptedData, username, passwo
return string(rsp), nil
}
func getEndpoint(service, xaddr string) (string, error) {
func getEndpoint(service, xaddr string) (string, error) {
dev, err := goonvif.NewDevice(xaddr)
if err != nil {
return "", err
@@ -169,19 +168,24 @@ func getEndpoint(service, xaddr string) (string, error) {
var endpoint string
switch pkg {
case "device": endpoint = dev.GetEndpoint("Device")
case "event": endpoint = dev.GetEndpoint("Event")
case "imaging": endpoint = dev.GetEndpoint("Imaging")
case "media": endpoint = dev.GetEndpoint("Media")
case "ptz": endpoint = dev.GetEndpoint("PTZ")
case "device":
endpoint = dev.GetEndpoint("Device")
case "event":
endpoint = dev.GetEndpoint("Event")
case "imaging":
endpoint = dev.GetEndpoint("Imaging")
case "media":
endpoint = dev.GetEndpoint("Media")
case "ptz":
endpoint = dev.GetEndpoint("PTZ")
}
return endpoint, nil
}
func xmlAnalize(methodStruct interface{}, acceptedData* string) (*string, error) {
test := make([]map[string]string, 0) //tags
func xmlAnalize(methodStruct interface{}, acceptedData *string) (*string, error) {
test := make([]map[string]string, 0) //tags
testunMarshal := make([][]interface{}, 0) //data
var mas []string //idnt
var mas []string //idnt
soapHandling(methodStruct, &test)
test = mapProcessing(test)
@@ -194,7 +198,7 @@ func xmlAnalize(methodStruct interface{}, acceptedData* string) (*string, error)
xmlUnmarshal(etr, &testunMarshal, &mas)
ident(&mas)
document:= etree.NewDocument()
document := etree.NewDocument()
var el *etree.Element
var idntIndex = 0
@@ -238,10 +242,10 @@ func xmlAnalize(methodStruct interface{}, acceptedData* string) (*string, error)
}
} else if mas[idntIndex] == "Pop" {
el = el.Parent()
lstIndex -= 1
lstIndex -= 1
}
idntIndex += 1
lstIndex += 1
lstIndex += 1
}
resp, err := document.WriteToString()
@@ -252,7 +256,7 @@ func xmlAnalize(methodStruct interface{}, acceptedData* string) (*string, error)
return &resp, err
}
func xmlMaker(lst* []interface{}, tags* []map[string]string, lstIndex int) (string, map[string]string, string, error) {
func xmlMaker(lst *[]interface{}, tags *[]map[string]string, lstIndex int) (string, map[string]string, string, error) {
var elemName, value string
attr := make(map[string]string)
for tgIndx, tg := range *tags {
@@ -287,7 +291,7 @@ func xmlMaker(lst* []interface{}, tags* []map[string]string, lstIndex int) (stri
return elemName, attr, value, nil
}
func xmlProcessing (tg string) (string, error) {
func xmlProcessing(tg string) (string, error) {
r, _ := regexp.Compile(`"(.*?)"`)
str := r.FindStringSubmatch(tg)
if len(str) == 0 {
@@ -330,7 +334,7 @@ func mapProcessing(mapVar []map[string]string) []map[string]string {
return mapVar
}
func soapHandling(tp interface{}, tags* []map[string]string) {
func soapHandling(tp interface{}, tags *[]map[string]string) {
s := reflect.ValueOf(tp).Elem()
typeOfT := s.Type()
if s.Kind() != reflect.Struct {
@@ -342,23 +346,22 @@ func soapHandling(tp interface{}, tags* []map[string]string) {
if err == false {
fmt.Println(err)
}
*tags = append(*tags, map[string]string{typeOfT.Field(i).Name : string(tmp.Tag)})
subStruct := reflect.New(reflect.TypeOf( f.Interface() ))
*tags = append(*tags, map[string]string{typeOfT.Field(i).Name: string(tmp.Tag)})
subStruct := reflect.New(reflect.TypeOf(f.Interface()))
soapHandling(subStruct.Interface(), tags)
}
}
func xmlUnmarshal(elems []*etree.Element, data* [][]interface{}, mas* []string) {
func xmlUnmarshal(elems []*etree.Element, data *[][]interface{}, mas *[]string) {
for _, elem := range elems {
*data = append(*data, []interface{}{elem.Tag,elem.Attr,elem.Text()})
*data = append(*data, []interface{}{elem.Tag, elem.Attr, elem.Text()})
*mas = append(*mas, "Push")
xmlUnmarshal(elem.FindElements("./*"), data, mas)
*mas = append(*mas, "Pop")
}
}
func ident(mas* []string) {
func ident(mas *[]string) {
var buffer string
for _, j := range *mas {
buffer += j + " "
@@ -366,4 +369,4 @@ func ident(mas* []string) {
buffer = strings.Replace(buffer, "Push Pop ", "PushPop ", -1)
buffer = strings.TrimSpace(buffer)
*mas = strings.Split(buffer, " ")
}
}