github.com/Cloud-Foundations/Dominator@v0.3.4/hypervisor/rpcd/connectToVmManager.go (about) 1 package rpcd 2 3 import ( 4 "github.com/Cloud-Foundations/Dominator/lib/errors" 5 "github.com/Cloud-Foundations/Dominator/lib/srpc" 6 "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 7 ) 8 9 func (t *srpcType) ConnectToVmManager(conn *srpc.Conn) error { 10 var request hypervisor.ConnectToVmManagerRequest 11 if err := conn.Decode(&request); err != nil { 12 return err 13 } 14 input, output, err := t.manager.ConnectToVmManager(request.IpAddress) 15 if input != nil { 16 defer close(input) 17 } 18 e := conn.Encode(hypervisor.ConnectToVmManagerResponse{ 19 Error: errors.ErrorToString(err)}) 20 if e != nil { 21 return e 22 } 23 if e := conn.Flush(); e != nil { 24 return e 25 } 26 if err != nil { 27 return nil // Have successfully sent the error in the response message. 28 } 29 return connectChannelsToConnection(conn, input, output) 30 }