From a4ea6380ed70468b1bbaca0328a65686960fcd52 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期一, 20 四月 2020 16:23:30 +0800
Subject: [PATCH] add svLock

---
 server.go |   29 ++++++++++++++++++++++++++---
 1 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/server.go b/server.go
index 7e58f71..f23728c 100644
--- a/server.go
+++ b/server.go
@@ -1,7 +1,9 @@
 package gopherdiscovery
 
 import (
+	"encoding/json"
 	"log"
+	"sync"
 	"time"
 
 	"golang.org/x/net/context"
@@ -49,6 +51,9 @@
 	nodes StringSet
 	// publisher, we are going to publish the changes of the set here
 	publisher *Publisher
+
+	svInfo map[string][]byte
+	svLock sync.RWMutex
 }
 
 type Publisher struct {
@@ -138,6 +143,7 @@
 	var err error
 	var msg []byte
 	var responses StringSet
+	var si ServiceInfo
 
 	err = d.sock.Send([]byte("are you ok?"))
 	if err != nil {
@@ -146,6 +152,7 @@
 	}
 
 	responses = NewStringSet()
+	d.services.svInfo = make(map[string][]byte, 0)
 	for {
 		msg, err = d.sock.Recv()
 		if err != nil {
@@ -155,7 +162,12 @@
 				return
 			}
 		} else {
-			responses.Add(string(msg))
+			if  json.Unmarshal(msg, &si) == nil {
+				responses.Add(si.ServiceId)
+				d.services.svLock.Lock()
+				d.services.svInfo[si.ServiceId] = si.Info
+				d.services.svLock.Unlock()
+			}
 		}
 	}
 }
@@ -211,6 +223,7 @@
 	s := &Services{
 		nodes:     NewStringSet(),
 		publisher: publisher,
+		svInfo: make(map[string][]byte, 0),
 	}
 
 	return s
@@ -230,8 +243,18 @@
 	//s.publisher.Publish(s.nodes.ToSlice())//publish nodes changed
 }
 
-func (d *DiscoveryServer) AliveNodes() []string {
-	return d.services.nodes.ToSlice()
+func (d *DiscoveryServer) AliveNodes() StringSet {
+	return d.services.nodes
+}
+
+func (d *DiscoveryServer) SvInfo() map[string][]byte {
+	d.services.svLock.Lock()
+	defer d.services.svLock.Unlock()
+	m := make(map[string][]byte)
+	for k,v := range d.services.svInfo {
+		m[k] = v
+	}
+	return m
 }
 
 func (d *DiscoveryServer) PublishMsg(msg string) {

--
Gitblit v1.8.0