aboutsummaryrefslogtreecommitdiffstats
path: root/ethpub
diff options
context:
space:
mode:
authorMaran <maran.hidskes@gmail.com>2014-06-02 21:20:27 +0800
committerMaran <maran.hidskes@gmail.com>2014-06-02 21:20:27 +0800
commitfb6ff61730ed92ada68c9c5a5b3a6f9976a78161 (patch)
tree63cd039495d38dd047c231d52a3356bdb5e8b3f2 /ethpub
parentff8a834ccc630e85292968aaed8abc52044797f8 (diff)
downloadgo-tangerine-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar
go-tangerine-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.gz
go-tangerine-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.bz2
go-tangerine-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.lz
go-tangerine-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.xz
go-tangerine-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.tar.zst
go-tangerine-fb6ff61730ed92ada68c9c5a5b3a6f9976a78161.zip
Implemented Public Peer interface
Diffstat (limited to 'ethpub')
-rw-r--r--ethpub/pub.go13
-rw-r--r--ethpub/types.go30
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