Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
19addcb5
Commit
19addcb5
authored
Jan 10, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Comments
parent
ce40e51a
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
0 deletions
+16
-0
peer.go
peer.go
+16
-0
No files found.
peer.go
View file @
19addcb5
...
...
@@ -31,6 +31,7 @@ func ReadMessage(conn net.Conn) (*InMsg, error) {
// XXX The data specification is made up. This will change once more details have been released on the specification of the format
decoder
:=
NewRlpDecoder
(
buff
[
:
n
])
t
:=
decoder
.
Get
(
0
)
.
AsString
()
// If the msgdata contains no data we throw an error and disconnect the peer
if
t
==
""
{
return
nil
,
errors
.
New
(
"Data contained no data type"
)
}
...
...
@@ -39,9 +40,13 @@ func ReadMessage(conn net.Conn) (*InMsg, error) {
}
type
Peer
struct
{
// Server interface
server
*
Server
// Net connection
conn
net
.
Conn
// Output queue which is used to communicate and handle messages
outputQueue
chan
OutMsg
// Quit channel
quit
chan
bool
}
...
...
@@ -60,21 +65,28 @@ func (p *Peer) QueueMessage(msgType string, data []byte) {
p
.
outputQueue
<-
OutMsg
{
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
p
.
WriteMessage
(
msg
)
// Break out of the for loop if a quit message is posted
case
<-
p
.
quit
:
break
out
}
}
}
// Write a message to the peer.
func
(
p
*
Peer
)
WriteMessage
(
msg
OutMsg
)
{
// Encode the type and the (RLP encoded) data for sending over the wire
encoded
:=
Encode
([]
interface
{}{
msg
.
msgType
,
msg
.
data
})
// Write to the connection
_
,
err
:=
p
.
conn
.
Write
(
encoded
)
if
err
!=
nil
{
log
.
Println
(
err
)
...
...
@@ -82,11 +94,13 @@ func (p *Peer) WriteMessage(msg OutMsg) {
}
}
// Inbound handler. Inbound messages are received here and passed to the appropriate methods
func
(
p
*
Peer
)
HandleInbound
()
{
defer
p
.
Stop
()
out
:
for
{
// Wait for a message from the peer
msg
,
err
:=
ReadMessage
(
p
.
conn
)
if
err
!=
nil
{
log
.
Println
(
err
)
...
...
@@ -104,7 +118,9 @@ out:
}
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
()
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment