|
@@ -0,0 +1,166 @@
|
|
|
+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
|
|
|
+ }
|
|
|
+}
|