package zdaemon import ( "bytes" "context" "encoding/json" "fmt" "git.swzry.com/zry/SatorIPC/golang/sipc_conn" "io/ioutil" "net" "net/http" "strings" "time" ) func (zd *ZDaemon) ipcDial(ipcaddr string) *http.Client { tr := &http.Transport{ DialContext: func(ctx context.Context, network, addr string) (conn net.Conn, err error) { return sipc_conn.Dial(ipcaddr, 5*time.Second) }, } c := &http.Client{ Transport: tr, } return c } func (zd *ZDaemon) ipcAppCheckAlive() bool { ipcaddr := zd.daemonConfig.IpcAddr c := zd.ipcDial(ipcaddr) uri := fmt.Sprintf("http://%s/check-alive.satori", zd.ipcurlhost) res, err := c.Get(uri) if err != nil { return false } if res.StatusCode == 200 { jr := res.Body jd, err := ioutil.ReadAll(jr) _ = jr.Close() if err != nil { return false } var jv IPCJsonDef_CheckAlive err = json.Unmarshal(jd, &jv) if err != nil { return false } return jv.Alive } else { return false } } func (zd *ZDaemon) ipcAppStop() bool { ipcaddr := zd.daemonConfig.IpcAddr c := zd.ipcDial(ipcaddr) uri := fmt.Sprintf("http://%s/stop.satori", zd.ipcurlhost) res, err := c.Get(uri) if err != nil { if strings.Contains(err.Error(), "EOF") { fmt.Println("Success stop daemon.") return true } fmt.Println("Error in stopping daemon: ", err.Error()) return false } if res.StatusCode == 200 { jr := res.Body jd, err := ioutil.ReadAll(jr) _ = jr.Close() if err != nil { fmt.Println("Error in stopping daemon: ", err.Error()) return false } var jv IPCJsonDef_Stop err = json.Unmarshal(jd, &jv) if err != nil { fmt.Println("Error in stopping daemon: ", err.Error()) return false } if jv.Success { fmt.Println("Success stop daemon. Extra message: ", jv.Msg) } else { fmt.Println("Failed stop daemon. Extra message: ", jv.Msg) } return jv.Success } else { return false } } func (zd *ZDaemon) ipcAppGetStatus() { ipcaddr := zd.daemonConfig.IpcAddr c := zd.ipcDial(ipcaddr) uri := fmt.Sprintf("http://%s/status.satori", zd.ipcurlhost) res, err := c.Get(uri) if err != nil { fmt.Println("Error in getting daemon status: ", err.Error()) return } if res.StatusCode == 200 { jr := res.Body jd, err := ioutil.ReadAll(jr) _ = jr.Close() if err != nil { fmt.Println("Error in getting daemon status: ", err.Error()) return } var jv IPCJsonDef_GetStatus err = json.Unmarshal(jd, &jv) if err != nil { fmt.Println("Error in getting daemon status: ", err.Error()) return } fmt.Println("Status: ", jv.Status) if jv.HasExtra { fmt.Println("Extra Info:") for k, v := range jv.ExtraInfo { fmt.Println("\t", k, "=", v) } } } else { fmt.Println("Error in getting daemon status: HTTP", res.StatusCode, res.Status) return } } func (zd *ZDaemon) ipcAppOtherOperation(op string, args []string) { ipcaddr := zd.daemonConfig.IpcAddr c := zd.ipcDial(ipcaddr) uri := fmt.Sprintf("http://%s/other-operation.satori", zd.ipcurlhost) jvreq := &IPCJsonDef_OtherOperationRequest{ Operation: op, Args: args, } jdat, err := json.Marshal(jvreq) if err != nil { fmt.Println("Error in operation", op, ": ", err.Error()) return } jbuf := bytes.NewReader(jdat) res, err := c.Post(uri, "application/json", jbuf) if err != nil { fmt.Println("Error in operation", op, ": ", err.Error()) return } if res.StatusCode == 200 { jr := res.Body jd, err := ioutil.ReadAll(jr) _ = jr.Close() if err != nil { fmt.Println("Error in operation", op, ": ", err.Error()) return } var jv IPCJsonDef_OtherOperationResponse err = json.Unmarshal(jd, &jv) if err != nil { fmt.Println("Error in operation", op, ": ", err.Error()) return } fmt.Println(jv.Result) } else { fmt.Println("Error in operation", op, ": HTTP", res.StatusCode, res.Status) return } }