func (c *OneClient) SetPlugins(plugins PluginContainer) {
	c.Plugins = plugins
	c.mu.RLock()
	for _, v := range c.xclients {
		v.SetPlugins(plugins)
	}
	c.mu.RUnlock()
}
SetPlugins sets client's plugins.
package client
import (
	"context"
	"fmt"
	"io"
	"net"
	"sync"
	"github.com/kudoochui/kudos/rpcx/share"
	multierror "github.com/hashicorp/go-multierror"
	"github.com/kudoochui/kudos/rpcx/protocol"
)
type OneClient struct {
	xclients map[string]XClient
	mu       sync.RWMutex
	failMode   FailMode
	selectMode SelectMode
	discovery  ServiceDiscovery
	option     Option
	selectors map[string]Selector
	Plugins   PluginContainer
	latitude  float64
	longitude float64
	auth      string
	serverMessageChan chan<- *protocol.Message
}
func NewOneClient(failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option) *OneClient {
	return &OneClient{
		failMode:   failMode,
		selectMode: selectMode,
		discovery:  discovery,
		option:     option,
		xclients:   make(map[string]XClient),
		selectors:  make(map[string]Selector),
	}
}
func NewBidirectionalOneClient(failMode FailMode, selectMode SelectMode, discovery ServiceDiscovery, option Option, serverMessageChan chan<- *protocol.Message) *OneClient {
	return &OneClient{
		failMode:          failMode,
		selectMode:        selectMode,
		discovery:         discovery,
		option:            option,
		xclients:          make(map[string]XClient),
		selectors:         make(map[string]Selector),
		serverMessageChan: serverMessageChan,
	}
}
func (c *OneClient) SetSelector(nodeName string, s Selector) {
	c.mu.Lock()
	c.selectors[nodeName] = s
	if xclient, ok := c.xclients[nodeName]; ok {
		xclient.SetSelector(s)
	}
	c.mu.Unlock()
}