| | |
| | | package bhomedbapi |
| | | |
| | | import ( |
| | | "basic.com/valib/bhshmq.git/proto/source/bhome_msg" |
| | | "basic.com/valib/c_bhomebus.git/proto/source/bhome_msg" |
| | | ) |
| | | |
| | | //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) |
| | | logPrint("NewClient ip:", opt.ip, " topic:", opt.topic, " nodes:", opt.nodes) |
| | | if !checkRemoteNetNode(opt.ip, &opt.nodes) { |
| | | return nil |
| | | } |
| | | } |
| | | return &SBusClient{ |
| | | nodes: opt.nodes, |
| | | } |
| | | } |
| | | |
| | | |
| | | type Option struct { |
| | | nodes []bhome_msg.BHAddress |
| | | nodes []*bhome_msg.MsgQueryTopicReply_BHNodeAddress |
| | | topic string |
| | | devId string |
| | | ip string |
| | | port int32 |
| | | } |
| | | |
| | | type IOption interface { |
| | |
| | | } |
| | | } |
| | | |
| | | func WithNodes(nodeArr []bhome_msg.BHAddress) IOption { |
| | | func WithNodes(nodeArr []*bhome_msg.MsgQueryTopicReply_BHNodeAddress) IOption { |
| | | return newFuncOption(func(o *Option) { |
| | | o.nodes = nodeArr |
| | | }) |
| | | } |
| | | |
| | | 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 |
| | | }) |
| | | } |
| | | |
| | |
| | | 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 |
| | | } |