From 1fc291e69cf5cabe8cb743d78f77fb34519495f5 Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期三, 11 三月 2020 14:17:51 +0800 Subject: [PATCH] add resp --- server.go | 18 +++++++++++++++++- client.go | 30 ++++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/client.go b/client.go index 2733153..26b15dd 100644 --- a/client.go +++ b/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 diff --git a/server.go b/server.go index deddb13..01a3b74 100644 --- a/server.go +++ b/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)) } -- Gitblit v1.8.0