aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaran <maran.hidskes@gmail.com>2014-06-02 21:16:37 +0800
committerMaran <maran.hidskes@gmail.com>2014-06-02 21:16:37 +0800
commita6f4eef1dadee9d8caa9b0ac20e2ce4a3034a100 (patch)
treeca1602b7945cc32f3a6b0008225f2767db29bb48
parent98811f11e5d7ccf6e053b46b9ca2ed897140ce47 (diff)
downloaddexon-a6f4eef1dadee9d8caa9b0ac20e2ce4a3034a100.tar.gz
dexon-a6f4eef1dadee9d8caa9b0ac20e2ce4a3034a100.tar.zst
dexon-a6f4eef1dadee9d8caa9b0ac20e2ce4a3034a100.zip
Added Peer Window
-rw-r--r--ethereal/assets/qml/wallet.qml50
-rw-r--r--ethereal/ui/gui.go12
-rw-r--r--ethereum/repl.go4
3 files changed, 64 insertions, 2 deletions
diff --git a/ethereal/assets/qml/wallet.qml b/ethereal/assets/qml/wallet.qml
index bbb147d89..8c04c6344 100644
--- a/ethereal/assets/qml/wallet.qml
+++ b/ethereal/assets/qml/wallet.qml
@@ -45,6 +45,13 @@ ApplicationWindow {
addPeerWin.visible = true
}
}
+ MenuItem {
+ text: "Show Peers"
+ shortcut: "Ctrl+e"
+ onTriggered: {
+ peerWindow.visible = true
+ }
+ }
}
Menu {
@@ -359,6 +366,10 @@ ApplicationWindow {
id: peerImage
anchors.right: parent.right
width: 10; height: 10
+ MouseArea {
+ onDoubleClicked: peerWindow.visible = true
+ anchors.fill: parent
+ }
source: ui.assetPath("network.png")
}
}
@@ -623,6 +634,20 @@ ApplicationWindow {
function setPeers(text) {
peerLabel.text = text
}
+
+ function addPeer(peer) {
+ // We could just append the whole peer object but it cries if you try to alter them
+ peerModel.append({ip: peer.ip, port: peer.port, lastResponse:timeAgo(peer.lastSend), version: peer.version})
+ }
+
+ function resetPeers(){
+ peerModel.clear()
+ }
+
+ function timeAgo(unixTs){
+ var lapsed = (Date.now() - new Date(unixTs*1000)) / 1000
+ return (lapsed + " seconds ago")
+ }
function convertToPretty(unixTs){
var a = new Date(unixTs*1000);
var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
@@ -635,6 +660,30 @@ ApplicationWindow {
var time = date+' '+month+' '+year+' '+hour+':'+min+':'+sec ;
return time;
}
+ // ******************************************
+ // Windows
+ // ******************************************
+ Window {
+ id: peerWindow
+ height: 200
+ width: 500
+ Rectangle {
+ anchors.fill: parent
+ property var peerModel: ListModel {
+ id: peerModel
+ }
+ TableView {
+ anchors.fill: parent
+ id: peerTable
+ model: peerModel
+ TableViewColumn{width: 120; role: "ip" ; title: "IP" }
+ TableViewColumn{width: 60; role: "port" ; title: "Port" }
+ TableViewColumn{width: 120; role: "lastResponse"; title: "Last event" }
+ TableViewColumn{width: 180; role: "version" ; title: "Version" }
+ }
+ }
+ }
+
// *******************************************
// Components
// *******************************************
@@ -810,7 +859,6 @@ ApplicationWindow {
}
}
}
-
// New Transaction component
Component {
id: newTransaction
diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go
index 44215efdb..db06add8e 100644
--- a/ethereal/ui/gui.go
+++ b/ethereal/ui/gui.go
@@ -12,6 +12,7 @@ import (
"github.com/go-qml/qml"
"math/big"
"strings"
+ "time"
)
type Gui struct {
@@ -91,7 +92,7 @@ func (gui *Gui) Start(assetPath string) {
ethutil.Config.Log.AddLogSystem(gui)
}
if err != nil {
- ethutil.Config.Log.Infoln("FATAL: asset not found: you can set an alternative asset path on on the command line using option 'asset_path'")
+ ethutil.Config.Log.Infoln("FATAL: asset not found: you can set an alternative asset path on on the command line using option 'asset_path'", err)
panic(err)
}
@@ -235,6 +236,8 @@ func (gui *Gui) update() {
reactor.Subscribe("object:"+string(namereg), objectChan)
reactor.Subscribe("peerList", peerChan)
+ ticker := time.NewTicker(5 * time.Second)
+
state := gui.eth.StateManager().TransState()
unconfirmedFunds := new(big.Int)
@@ -284,12 +287,19 @@ func (gui *Gui) update() {
gui.loadAddressBook()
case <-peerChan:
gui.setPeerInfo()
+ case <-ticker.C:
+ gui.setPeerInfo()
}
}
}
func (gui *Gui) setPeerInfo() {
gui.win.Root().Call("setPeers", fmt.Sprintf("%d / %d", gui.eth.PeerCount(), gui.eth.MaxPeers))
+
+ gui.win.Root().Call("resetPeers")
+ for _, peer := range gui.pub.GetPeers() {
+ gui.win.Root().Call("addPeer", peer)
+ }
}
// Logging functions that log directly to the GUI interface
diff --git a/ethereum/repl.go b/ethereum/repl.go
index 10f51675e..e59814154 100644
--- a/ethereum/repl.go
+++ b/ethereum/repl.go
@@ -66,6 +66,10 @@ func (self *JSEthereum) GetBlock(hash string) otto.Value {
return self.toVal(&JSBlock{self.PEthereum.GetBlock(hash), self})
}
+func (self *JSEthereum) GetPeers() otto.Value {
+ return self.toVal(self.PEthereum.GetPeers())
+}
+
func (self *JSEthereum) GetKey() otto.Value {
return self.toVal(self.PEthereum.GetKey())
}