liuxiaolong
2020-03-11 1fc291e69cf5cabe8cb743d78f77fb34519495f5
add resp
2个文件已修改
48 ■■■■ 已修改文件
client.go 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server.go 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
client.go
@@ -1,6 +1,7 @@
package gopherdiscovery
import (
    "encoding/json"
    "errors"
    "log"
@@ -24,7 +25,7 @@
    // Service that needs to be discovered, for example for a web server could be
    // http://192.168.1.1:8080
    service string
    service ServiceInfo
    heartbeatmsg chan []byte
@@ -45,11 +46,16 @@
    changes chan []byte
}
func Client(urlServer string, service string) (*DiscoveryClient, error) {
    return ClientWithSub(urlServer, "", service)
type ServiceInfo struct {
    ServiceId string `json:"serviceId"`
    Info interface{} `json:"info"`
}
func ClientWithSub(urlServer string, urlPubSub string, service string) (*DiscoveryClient, error) {
func Client(urlServer string, serviceId string) (*DiscoveryClient, error) {
    return ClientWithSub(urlServer, "", serviceId)
}
func ClientWithSub(urlServer string, urlPubSub string, serviceId string) (*DiscoveryClient, error) {
    var sock mangos.Socket
    var err error
    var subscriber *Subscriber
@@ -76,10 +82,13 @@
        return nil, err
    }
    svInfo := ServiceInfo{
        ServiceId: serviceId,
    }
    client := &DiscoveryClient{
        urlServer:    urlServer,
        urlPubSub:    urlPubSub,
        service:      service,
        service:      svInfo,
        ctx:          ctx,
        cancel:       cancel,
        sock:         sock,
@@ -106,6 +115,10 @@
    d.cancel()
}
func (d *DiscoveryClient) SetResp(i interface{}) {
    d.service.Info = i
}
func (d *DiscoveryClient) run() {
    var err error
    var msg []byte
@@ -120,7 +133,12 @@
                log.Println("DiscoveryClient: Cannot receive the SURVEY", err.Error())
                continue
            }
            err = d.sock.Send([]byte(d.service))
            sendB, err := json.Marshal(d.service)
            if err != nil {
                log.Println("DiscoveryClient: marshal d.serviceInfo err", err.Error())
                continue
            }
            err = d.sock.Send(sendB)
            if err != nil {
                log.Println("DiscoveryClient: Cannot send the SURVEY response", err.Error())
                continue
server.go
@@ -1,6 +1,7 @@
package gopherdiscovery
import (
    "encoding/json"
    "log"
    "time"
@@ -49,6 +50,8 @@
    nodes StringSet
    // publisher, we are going to publish the changes of the set here
    publisher *Publisher
    svInfo map[string]interface{}
}
type Publisher struct {
@@ -138,6 +141,7 @@
    var err error
    var msg []byte
    var responses StringSet
    var si ServiceInfo
    err = d.sock.Send([]byte("are you ok?"))
    if err != nil {
@@ -155,7 +159,10 @@
                return
            }
        } else {
            responses.Add(string(msg))
            if  json.Unmarshal(msg, &si) == nil {
                responses.Add(si.ServiceId)
                d.services.svInfo[si.ServiceId] = si.Info
            }
        }
    }
}
@@ -211,6 +218,7 @@
    s := &Services{
        nodes:     NewStringSet(),
        publisher: publisher,
        svInfo: make(map[string]interface{}, 0),
    }
    return s
@@ -234,6 +242,14 @@
    return d.services.nodes
}
func (d *DiscoveryServer) SvInfo() map[string]interface{} {
    m := make(map[string]interface{})
    for k,v := range d.services.svInfo {
        m[k] = v
    }
    return m
}
func (d *DiscoveryServer) PublishMsg(msg string) {
    d.services.publisher.Publish([]byte(msg))
}