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