From 01fa778ce2b080dbffbd03d2a00fe844f08608e2 Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie Date: Mon, 4 Aug 2014 07:05:13 -0400 Subject: [PATCH] JSON Encoding for PeerMaps --- tracker/models/peermap.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tracker/models/peermap.go b/tracker/models/peermap.go index 8134779..a6940d3 100644 --- a/tracker/models/peermap.go +++ b/tracker/models/peermap.go @@ -5,6 +5,7 @@ package models import ( + "encoding/json" "net" "sync" @@ -68,6 +69,26 @@ func (pm *PeerMap) Len() int { return len(pm.peers) } +func (pm *PeerMap) MarshalJSON() ([]byte, error) { + pm.RLock() + defer pm.RUnlock() + return json.Marshal(pm.peers) +} + +func (pm *PeerMap) UnmarshalJSON(b []byte) error { + pm.Lock() + defer pm.Unlock() + + peers := make(map[PeerKey]Peer) + err := json.Unmarshal(b, &peers) + if err != nil { + return err + } + + pm.peers = peers + return nil +} + // Purge iterates over all of the peers within a PeerMap and deletes them if // they are older than the provided time. func (pm *PeerMap) Purge(unixtime int64) {