github.com/keysonzzz/kmg@v0.0.0-20151121023212-05317bfd7d39/kmg/SubCommand/serviceCmd/rpc.go (about) 1 package serviceCmd 2 3 import ( 4 "fmt" 5 "github.com/bronze1man/kmg/errors" 6 "github.com/bronze1man/kmg/kmgCrypto" 7 "github.com/bronze1man/kmg/kmgErr" 8 "github.com/bronze1man/kmg/kmgProcessMutex" 9 "time" 10 ) 11 12 type StartStatus string 13 14 const ( 15 StartStatusSuccess StartStatus = "StartStatusSuccess" 16 StartStatusFail = "StartStatusFail" 17 ) 18 19 var statusChannel = make(chan StartStatus) 20 21 var rpcPsk = kmgCrypto.Get32PskFromString("w4n4ts28cq") 22 23 var rpcAddress = "127.0.0.1:2777" 24 25 type ServiceRpc struct{} 26 27 func (sr *ServiceRpc) Send(status StartStatus) { 28 statusChannel <- status 29 } 30 31 //TODO 对于不会发 RPC 的进程,应该可以用一个 flag 来表明不需要等待 RPC 响应 32 func waitRpcRespond() chan error { 33 returnChan := make(chan error) 34 lock := &kmgProcessMutex.FileMutex{Name: "kmg_service_lock"} 35 lock.Lock() 36 rpcCloser := ListenAndServe_ServiceRpc(rpcAddress, &ServiceRpc{}, rpcPsk) 37 __closer := func() { 38 err := rpcCloser() 39 time.Sleep(time.Second) 40 lock.UnLock() 41 kmgErr.PanicIfError(err) 42 } 43 go func() { 44 select { 45 case startStatus := <-statusChannel: 46 __closer() 47 if startStatus == StartStatusSuccess { 48 returnChan <- nil 49 } else { 50 returnChan <- errors.New("StartFail") 51 } 52 case <-time.After(time.Minute * 2): 53 __closer() 54 returnChan <- errors.New("Rpc timeout") 55 } 56 }() 57 return returnChan 58 } 59 60 func ServiceStartSuccess() { 61 time.Sleep(time.Millisecond * 100) 62 client := NewClient_ServiceRpc("http://"+rpcAddress, rpcPsk) 63 err := client.Send(StartStatusSuccess) 64 if err != nil { 65 fmt.Println("[Warning kmg service] please use kmg service start/restart", err) 66 } 67 } 68 69 //暂时没什么用 70 func ServiceStartFail() { 71 time.Sleep(time.Second) 72 client := NewClient_ServiceRpc("http://"+rpcAddress, rpcPsk) 73 err := client.Send(StartStatusFail) 74 if err != nil { 75 fmt.Println("src/github.com/bronze1man/kmg/kmg/SubCommand/serviceCmd/rpc.go ServiceStartFail", err) 76 } 77 }