| | |
| | | |
| | | func (d *DiscoveryClient) run() { |
| | | var err error |
| | | var surveyMsg []byte |
| | | for { |
| | | surveyMsg, err = d.sock.Recv() |
| | | _, err = d.sock.Recv() |
| | | |
| | | if err != nil { |
| | | log.Println("DiscoveryClient: Cannot receive the SURVEY", err.Error()) |
| | | } else { |
| | | log.Printf("client:%s received surveyor msg=%s ",d.service,string(surveyMsg)) |
| | | select { |
| | | case <-d.ctx.Done(): |
| | | return |
| | |
| | | err = d.sock.Send([]byte(d.service)) |
| | | if err != nil { |
| | | log.Println("DiscoveryClient: Cannot send the SURVEY response", err.Error()) |
| | | }else { |
| | | log.Printf("client:%s sent response i'm online",d.service) |
| | | } |
| | | } |
| | | } |
| | |
| | | var msg []byte |
| | | var responses StringSet |
| | | |
| | | err = d.sock.Send([]byte("are you ok?")) |
| | | err = d.sock.Send([]byte("")) |
| | | if err != nil { |
| | | log.Println("DiscoveryServer: Error sending the SURVEY", err.Error()) |
| | | return |
| | |
| | | for { |
| | | msg, err = d.sock.Recv() |
| | | if err != nil { |
| | | if err == mangos.ErrRecvTimeout {//在超时时间内收到的响应 |
| | | if err == mangos.ErrRecvTimeout { |
| | | // Timeout means I can add the current responses to the SET |
| | | fmt.Println("mangos.ErrRecvTimeout") |
| | | d.services.Add(responses) |
| | | return |
| | | } |
| | | //fmt.Println(" err: ",err.Error()) |
| | | //log.Println("DiscoveryServer: Error reading SURVEY responses", err.Error()) |
| | | } else { |
| | | fmt.Printf("poll received msg:%s \n",string(msg)) |
| | | responses.Add(string(msg)) |
| | | //break |
| | | } |
| | | } |
| | | fmt.Println("for out") |
| | | } |
| | | |
| | | func NewPublisher(ctx context.Context, url string) (*Publisher, error) { |
| | |
| | | |
| | | s.nodes = responses |
| | | // publish the changes |
| | | s.publisher.Publish(s.nodes.ToSlice()) |
| | | //s.publisher.Publish(s.nodes.ToSlice())//publish nodes changed |
| | | } |
| | | |
| | | func (d *DiscoveryServer) PublishMsg(msg string){ |