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