github.com/NeowayLabs/nash@v0.2.2-0.20200127205349-a227041ffd50/cmd/nash/rpc.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io" 6 "net" 7 "os" 8 9 "github.com/madlambda/nash" 10 ) 11 12 func serveConn(sh *nash.Shell, conn net.Conn) { 13 var data [1024]byte 14 15 for { 16 17 n, err := conn.Read(data[:]) 18 19 if err != nil { 20 if err == io.EOF { 21 return 22 } 23 24 fmt.Printf("Failed to read data: %s", err.Error()) 25 return 26 } 27 28 if string(data[0:n]) == "quit" { 29 return 30 } 31 32 err = sh.ExecuteString("-nashd-", string(data[0:n])) 33 34 if err != nil { 35 fmt.Printf("nashd: %s\n", err.Error()) 36 37 _, err = conn.Write([]byte("1")) 38 39 if err != nil { 40 fmt.Printf("Failed to send command status.\n") 41 return 42 } 43 } else { 44 _, err = conn.Write([]byte("0")) 45 46 if err != nil { 47 fmt.Printf("Failed to send command status.\n") 48 return 49 } 50 } 51 } 52 } 53 54 func startNashd(sh *nash.Shell, socketPath string) { 55 os.Remove(socketPath) 56 57 addr := &net.UnixAddr{ 58 Net: "unix", 59 Name: socketPath, 60 } 61 62 listener, err := net.ListenUnix("unix", addr) 63 64 if err != nil { 65 fmt.Printf("ERROR: %s\n", err.Error()) 66 return 67 } 68 69 // Accept only one connection 70 conn, err := listener.AcceptUnix() 71 72 if err != nil { 73 fmt.Printf("ERROR: %v", err.Error()) 74 } 75 76 serveConn(sh, conn) 77 listener.Close() 78 }