/
message.go
132 lines (118 loc) · 2.58 KB
/
message.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package message
import (
"fmt"
"github.com/pactus-project/pactus/network"
)
type ResponseCode int
const (
ResponseCodeNone = ResponseCode(-1)
ResponseCodeOK = ResponseCode(0)
ResponseCodeRejected = ResponseCode(1)
ResponseCodeBusy = ResponseCode(2)
ResponseCodeMoreBlocks = ResponseCode(3)
ResponseCodeNoMoreBlocks = ResponseCode(4)
ResponseCodeSynced = ResponseCode(5)
)
func (c ResponseCode) String() string {
switch c {
case ResponseCodeOK:
return "ok"
case ResponseCodeRejected:
return "rejected"
case ResponseCodeBusy:
return "busy"
case ResponseCodeMoreBlocks:
return "more-blocks"
case ResponseCodeNoMoreBlocks:
return "no-more-blocks"
case ResponseCodeSynced:
return "synced"
}
return fmt.Sprintf("%d", c)
}
type Type int32
const (
TypeUnspecified = Type(0)
TypeHello = Type(1)
TypeHeartBeat = Type(2)
TypeTransactions = Type(3)
TypeQueryProposal = Type(4)
TypeProposal = Type(5)
TypeQueryVotes = Type(6)
TypeVote = Type(7)
TypeBlockAnnounce = Type(8)
TypeBlocksRequest = Type(9)
TypeBlocksResponse = Type(10)
)
func (t Type) TopicID() network.TopicID {
switch t {
case TypeHello,
TypeHeartBeat,
TypeTransactions,
TypeBlockAnnounce:
return network.TopicIDGeneral
case TypeQueryProposal,
TypeProposal,
TypeQueryVotes,
TypeVote:
return network.TopicIDConsensus
default:
panic("Invalid topic ID")
}
}
func (t Type) String() string {
switch t {
case TypeHello:
return "hello"
case TypeHeartBeat:
return "heart-beat"
case TypeTransactions:
return "txs"
case TypeQueryProposal:
return "query-proposal"
case TypeProposal:
return "proposal"
case TypeQueryVotes:
return "query-votes"
case TypeVote:
return "vote"
case TypeBlockAnnounce:
return "block-announce"
case TypeBlocksRequest:
return "blocks-req"
case TypeBlocksResponse:
return "blocks-res"
}
return fmt.Sprintf("%d", t)
}
func MakeMessage(t Type) Message {
switch t {
case TypeHello:
return &HelloMessage{}
case TypeHeartBeat:
return &HeartBeatMessage{}
case TypeTransactions:
return &TransactionsMessage{}
case TypeQueryProposal:
return &QueryProposalMessage{}
case TypeProposal:
return &ProposalMessage{}
case TypeQueryVotes:
return &QueryVotesMessage{}
case TypeVote:
return &VoteMessage{}
case TypeBlockAnnounce:
return &BlockAnnounceMessage{}
case TypeBlocksRequest:
return &BlocksRequestMessage{}
case TypeBlocksResponse:
return &BlocksResponseMessage{}
}
//
return nil
}
type Message interface {
SanityCheck() error
Type() Type
Fingerprint() string
}