aboutsummaryrefslogtreecommitdiffstats
path: root/peer.go
diff options
context:
space:
mode:
Diffstat (limited to 'peer.go')
-rw-r--r--peer.go118
1 files changed, 59 insertions, 59 deletions
diff --git a/peer.go b/peer.go
index d47af73de..a9f88b1e1 100644
--- a/peer.go
+++ b/peer.go
@@ -1,92 +1,92 @@
package main
import (
- "net"
- "log"
- "github.com/ethereum/ethwire-go"
+ "github.com/ethereum/ethwire-go"
+ "log"
+ "net"
)
type Peer struct {
- // Server interface
- server *Server
- // Net connection
- conn net.Conn
- // Output queue which is used to communicate and handle messages
- outputQueue chan ethwire.InOutMsg
- // Quit channel
- quit chan bool
+ // Server interface
+ server *Server
+ // Net connection
+ conn net.Conn
+ // Output queue which is used to communicate and handle messages
+ outputQueue chan ethwire.InOutMsg
+ // Quit channel
+ quit chan bool
}
func NewPeer(conn net.Conn, server *Server) *Peer {
- return &Peer{
- outputQueue: make(chan ethwire.InOutMsg, 1), // Buffered chan of 1 is enough
- quit: make(chan bool),
+ return &Peer{
+ outputQueue: make(chan ethwire.InOutMsg, 1), // Buffered chan of 1 is enough
+ quit: make(chan bool),
- server: server,
- conn: conn,
- }
+ server: server,
+ conn: conn,
+ }
}
// Outputs any RLP encoded data to the peer
func (p *Peer) QueueMessage(msgType string, data []byte) {
- p.outputQueue <- ethwire.InOutMsg{MsgType: msgType, Data: data}
+ p.outputQueue <- ethwire.InOutMsg{MsgType: msgType, Data: data}
}
// Outbound message handler. Outbound messages are handled here
func (p *Peer) HandleOutbound() {
out:
- for {
- select {
- // Main message queue. All outbound messages are processed through here
- case msg := <-p.outputQueue:
- // TODO Message checking and handle accordingly
- err := ethwire.WriteMessage(p.conn, msg)
- if err != nil {
- log.Println(err)
-
- // Stop the client if there was an error writing to it
- p.Stop()
- }
-
- // Break out of the for loop if a quit message is posted
- case <- p.quit:
- break out
- }
- }
+ for {
+ select {
+ // Main message queue. All outbound messages are processed through here
+ case msg := <-p.outputQueue:
+ // TODO Message checking and handle accordingly
+ err := ethwire.WriteMessage(p.conn, msg)
+ if err != nil {
+ log.Println(err)
+
+ // Stop the client if there was an error writing to it
+ p.Stop()
+ }
+
+ // Break out of the for loop if a quit message is posted
+ case <-p.quit:
+ break out
+ }
+ }
}
// Inbound handler. Inbound messages are received here and passed to the appropriate methods
func (p *Peer) HandleInbound() {
- defer p.Stop()
+ defer p.Stop()
out:
- for {
- // Wait for a message from the peer
- msg, err := ethwire.ReadMessage(p.conn)
- if err != nil {
- log.Println(err)
-
- break out
- }
-
- // TODO
- data, _ := Decode(msg.Data, 0)
- log.Printf("%s, %s\n", msg.MsgType, data)
- }
-
- // Notify the out handler we're quiting
- p.quit <- true
+ for {
+ // Wait for a message from the peer
+ msg, err := ethwire.ReadMessage(p.conn)
+ if err != nil {
+ log.Println(err)
+
+ break out
+ }
+
+ // TODO
+ data, _ := Decode(msg.Data, 0)
+ log.Printf("%s, %s\n", msg.MsgType, data)
+ }
+
+ // Notify the out handler we're quiting
+ p.quit <- true
}
func (p *Peer) Start() {
- // Run the outbound handler in a new goroutine
- go p.HandleOutbound()
- // Run the inbound handler in a new goroutine
- go p.HandleInbound()
+ // Run the outbound handler in a new goroutine
+ go p.HandleOutbound()
+ // Run the inbound handler in a new goroutine
+ go p.HandleInbound()
}
func (p *Peer) Stop() {
- p.conn.Close()
+ p.conn.Close()
- p.quit <- true
+ p.quit <- true
}