]> Cypherpunks.ru repositories - govpn.git/blobdiff - src/cypherpunks.ru/govpn/stats.go
Use convenient simpler Go 1.9's sync.Map
[govpn.git] / src / cypherpunks.ru / govpn / stats.go
index c8ea6223e655912e60e6623344838174a7f6a718..8354d39de8a2f73008cb0883ae23eea51d0946b3 100644 (file)
@@ -22,6 +22,7 @@ import (
        "encoding/json"
        "log"
        "net"
+       "sync"
        "time"
 )
 
@@ -29,15 +30,13 @@ const (
        RWTimeout = 10 * time.Second
 )
 
-type KnownPeers map[string]**Peer
-
 // StatsProcessor is assumed to be run in background. It accepts
 // connection on statsPort, reads anything one send to them and show
 // information about known peers in serialized JSON format. peers
 // argument is a reference to the map with references to the peers as
 // values. Map is used here because of ease of adding and removing
 // elements in it.
-func StatsProcessor(statsPort net.Listener, peers *KnownPeers) {
+func StatsProcessor(statsPort net.Listener, peers *sync.Map) {
        var conn net.Conn
        var err error
        var data []byte
@@ -52,9 +51,10 @@ func StatsProcessor(statsPort net.Listener, peers *KnownPeers) {
                conn.Read(buf)
                conn.Write([]byte("HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n"))
                var peersList []*Peer
-               for _, peer := range *peers {
-                       peersList = append(peersList, *peer)
-               }
+               peers.Range(func(_, peerI interface{}) bool {
+                       peersList = append(peersList, *peerI.(**Peer))
+                       return true
+               })
                data, err = json.Marshal(peersList)
                if err != nil {
                        panic(err)