| | |
| | | ) |
| | | |
| | | //Factory new client |
| | | /* |
| | | 跨机请求时,topic devId ip必须非空 |
| | | */ |
| | | func NewClient(opts ...IOption) Client { |
| | | opt := defaultOption() |
| | | for _,o := range opts { |
| | | o.apply(&opt) |
| | | } |
| | | if opt.ip != "" { //跨机请求 |
| | | if opt.topic == "" { |
| | | return nil |
| | | } |
| | | opt.nodes = n_getNetNode(opt.topic) |
| | | if !checkRemoteNetNode(opt.ip, &opt.nodes) { |
| | | return nil |
| | | } |
| | | } |
| | | return &SBusClient{ |
| | | nodes: opt.nodes, |
| | | } |
| | | } |
| | | |
| | | |
| | | type Option struct { |
| | | nodes []*bhome_msg.MsgQueryTopicReply_BHNodeAddress |
| | | topic string |
| | | devId string |
| | | ip string |
| | | port int32 |
| | | } |
| | | |
| | | type IOption interface { |
| | |
| | | }) |
| | | } |
| | | |
| | | func WithTopic(topic string) IOption { |
| | | return newFuncOption(func(o *Option){ |
| | | o.topic = topic |
| | | }) |
| | | } |
| | | |
| | | func WithIp(ip string) IOption { |
| | | return newFuncOption(func(o *Option) { |
| | | o.ip = ip |
| | | }) |
| | | } |
| | | |
| | | func WithDevId(devId string) IOption { |
| | | return newFuncOption(func(o *Option) { |
| | | o.devId = devId |
| | | }) |
| | | } |
| | | |
| | | func WithPort(port int32) IOption { |
| | | return newFuncOption(func(o *Option) { |
| | | o.port = port |
| | | }) |
| | | } |
| | | |
| | | func defaultOption() Option { |
| | | return Option{ |
| | | |
| | | } |
| | | } |
| | | |
| | | func checkRemoteNetNode(rip string, netNode *[]*bhome_msg.MsgQueryTopicReply_BHNodeAddress) bool { |
| | | if netNode == nil || len(*netNode) == 0 { |
| | | return false |
| | | } |
| | | |
| | | for _,n := range *netNode { |
| | | if n.Addr != nil && string(n.Addr.Ip) == rip && n.Addr.Port >0 { |
| | | *netNode = append([]*bhome_msg.MsgQueryTopicReply_BHNodeAddress{}, &bhome_msg.MsgQueryTopicReply_BHNodeAddress{ |
| | | Addr: &bhome_msg.BHAddress{ |
| | | Ip: []byte(rip), |
| | | Port: n.Addr.Port, |
| | | }, |
| | | }) |
| | | return true |
| | | } |
| | | } |
| | | return false |
| | | } |