package client import ( "encoding/json" "fmt" "io/ioutil" "gat1400Exchange/config" "gat1400Exchange/pkg/logger" "gat1400Exchange/util" "gat1400Exchange/vo" dac "github.com/xinsnake/go-http-digest-auth-client" ) const ( RegisterUrI = "/VIID/System/Register" UnRegisterUrI = "/VIID/System/UnRegister" KeepaliveUrI = "/VIID/System/Keepalive" TimeUrI = "/VIID/System/Time" ) var clientStatus = vo.StatusOtherError var headers = map[string]string{ "User-Agent": "AI camera", "Accept": "*", "User-Identify": config.ClientConf.ChannelNo, "Content-Type": "application/VIID+JSON", } func register() bool { url := fmt.Sprintf("%s://%s:%s%s", config.ClientConf.Proto, config.ClientConf.ServerAddr, config.ClientConf.ServerPort, RegisterUrI) req := vo.RequestRegister{RegisterObject: vo.RequestDeviceID{DeviceID: config.ClientConf.ChannelNo}} reqByte, _ := json.Marshal(req) dr := dac.NewRequest(config.ClientConf.Username, config.ClientConf.Password, "POST", url, string(reqByte)) if headers != nil { for k, v := range headers { dr.Header.Set(k, v) } dr.Header.Del("Accept-Encoding") } resp, err := dr.Execute() if err != nil { logger.Error(err.Error()) return false } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { logger.Error(err.Error()) return false } fmt.Println("rsp:", string(body)) var registerResponse vo.ResponseStatus err = json.Unmarshal(body, ®isterResponse) if err != nil { fmt.Println("register error,", err.Error()) return false } clientStatus = registerResponse.StatusCode if registerResponse.StatusCode == vo.StatusSuccess { fmt.Println("register success") // 注册成功后提交保活和校时 keepalive() syncTime() } else { fmt.Println("register failure, ", registerResponse.StatusString) } return clientStatus == vo.StatusSuccess } func keepalive() int { if clientStatus != vo.StatusSuccess { return clientStatus } var body = vo.RequestKeepalive{ KeepaliveObject: vo.RequestDeviceID{ DeviceID: config.ClientConf.ChannelNo, }, } url := fmt.Sprintf("%s://%s:%s%s", config.ClientConf.Proto, config.ClientConf.ServerAddr, config.ClientConf.ServerPort, KeepaliveUrI) b, _ := json.Marshal(body) rsp, err := util.HttpPost(url, headers, b) if err != nil { logger.Warn("Keepalive request failed, %s", err.Error()) return vo.StatusOtherError } var stat vo.ResponseStatus err = json.Unmarshal(rsp, &stat) if err != nil { logger.Warn("Keepalive response unmarshal failed, %s", err.Error()) return vo.StatusOtherError } return stat.StatusCode } func unRegister() { } func syncTime() { if clientStatus != vo.StatusSuccess { return } }