// Client returns an RPC client for the plugin. // // Subsequent calls to this will return the same RPC client. func (c *Client) Client() (*pluginrpc.Client, error) { addr, err := c.Start() if err != nil { return nil, err } c.l.Lock() defer c.l.Unlock() if c.client != nil { return c.client, nil } c.client, err = pluginrpc.Dial(addr.Network(), addr.String()) if err != nil { return nil, err } // Begin the stream syncing so that stdin, out, err work properly err = c.client.SyncStreams( c.config.SyncStdout, c.config.SyncStderr) if err != nil { c.client.Close() c.client = nil return nil, err } return c.client, nil }
// Client returns an RPC client for the plugin. // // Subsequent calls to this will return the same RPC client. func (c *Client) Client() (*pluginrpc.Client, error) { addr, err := c.Start() if err != nil { return nil, err } c.l.Lock() defer c.l.Unlock() if c.client != nil { return c.client, nil } c.client, err = pluginrpc.Dial(addr.Network(), addr.String()) if err != nil { return nil, err } return c.client, nil }