diff options
author | Maran <maran.hidskes@gmail.com> | 2014-06-02 21:20:27 +0800 |
---|---|---|
committer | Maran <maran.hidskes@gmail.com> | 2014-06-02 21:20:27 +0800 |
commit | fb6ff61730ed92ada68c9c5a5b3a6f9976a78161 (patch) | |
tree | 63cd039495d38dd047c231d52a3356bdb5e8b3f2 /ethpub | |
parent | ff8a834ccc630e85292968aaed8abc52044797f8 (diff) | |
download | dexon-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar dexon-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.gz dexon-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.bz2 dexon-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.lz dexon-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.xz dexon-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.zst dexon-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.zip |
Implemented Public Peer interface
Diffstat (limited to 'ethpub')
-rw-r--r-- | ethpub/pub.go | 13 | ||||
-rw-r--r-- | ethpub/types.go | 30 |
2 files changed, 42 insertions, 1 deletions
diff --git a/ethpub/pub.go b/ethpub/pub.go index a9a962f14..6d4c230ad 100644 --- a/ethpub/pub.go +++ b/ethpub/pub.go @@ -6,6 +6,7 @@ import ( "github.com/ethereum/eth-go/ethutil" "math/big" "strings" + "sync/atomic" ) type PEthereum struct { @@ -51,6 +52,18 @@ func (lib *PEthereum) GetPeerCount() int { return lib.manager.PeerCount() } +func (lib *PEthereum) GetPeers() []PPeer { + var peers []PPeer + for peer := lib.manager.Peers().Front(); peer != nil; peer = peer.Next() { + p := peer.Value.(ethchain.Peer) + if atomic.LoadInt32(p.Connected()) != 0 { + peers = append(peers, *NewPPeer(p)) + } + } + + return peers +} + func (lib *PEthereum) GetIsMining() bool { return lib.manager.IsMining() } diff --git a/ethpub/types.go b/ethpub/types.go index 4e7c44ed4..1079f09b4 100644 --- a/ethpub/types.go +++ b/ethpub/types.go @@ -3,12 +3,40 @@ package ethpub import ( "encoding/hex" "encoding/json" + "fmt" "github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethutil" - _ "log" "strings" ) +// Peer interface exposed to QML + +type PPeer struct { + ref *ethchain.Peer + Inbound bool `json:"isInbound"` + LastSend int64 `json:"lastSend"` + LastPong int64 `json:"lastPong"` + Ip string `json:"ip"` + Port int `json:"port"` + Version string `json:"version"` + LastResponse string `json:"lastResponse"` +} + +func NewPPeer(peer ethchain.Peer) *PPeer { + if peer == nil { + return nil + } + + // TODO: There must be something build in to do this? + var ip []string + for _, i := range peer.Host() { + ip = append(ip, fmt.Sprintf("%d", i)) + } + ipAddress := strings.Join(ip, ".") + + return &PPeer{ref: &peer, Inbound: peer.Inbound(), LastSend: peer.LastSend().Unix(), LastPong: peer.LastPong(), Version: peer.Version(), Ip: ipAddress, Port: int(peer.Port())} +} + // Block interface exposed to QML type PBlock struct { ref *ethchain.Block |