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  }