Skip to content

Commit ec06bad

Browse files
committed
refactor protocol message encoding functions
1 parent 5ee77c3 commit ec06bad

11 files changed

+241
-241
lines changed

ipc/node.go

+45-11
Original file line numberDiff line numberDiff line change
@@ -114,18 +114,28 @@ func (n *Node) clientLoop() {
114114
defer c.Close()
115115

116116
n.cfg.setWriteDeadline(c)
117-
if err := protocol.WriteHandshake(c, n.id); err != nil {
117+
if err := protocol.WriteMsg(
118+
c,
119+
protocol.NewHandshake(n.id),
120+
); err != nil {
118121
n.sendErr(err)
119122
return
120123
}
121124

122125
n.cfg.setReadDeadline(c)
123-
if ack, err := protocol.ReadAck(c); err != nil {
126+
if msg, err := protocol.ReadMsg(c); err != nil {
124127
n.sendErr(err)
125128
return
126-
} else if !ack.Ok() {
127-
n.sendErr(ErrHandshake)
128-
return
129+
} else {
130+
ack, err := msg.Ack()
131+
if err != nil {
132+
n.sendErr(err)
133+
return
134+
}
135+
if !ack.Ok() {
136+
n.sendErr(ErrHandshake)
137+
return
138+
}
129139
}
130140

131141
n.cfg.log("[Client] handshake succeeded")
@@ -153,15 +163,24 @@ func transceive(
153163
cfg.log("[Client] outgoing message received from queue")
154164

155165
cfg.setWriteDeadline(conn)
156-
if err := protocol.WriteRequest(conn, req.Data()); err != nil {
166+
if err := protocol.WriteMsg(
167+
conn,
168+
protocol.NewRequest(req.Data()),
169+
); err != nil {
157170
req.setResponse(nil, err)
158171
return
159172
}
160173

161174
cfg.log("[Client] outgoing message sent")
162175

163176
cfg.setReadDeadline(conn)
164-
resp, err := protocol.ReadResponse(conn)
177+
msg, err := protocol.ReadMsg(conn)
178+
if err != nil {
179+
req.setResponse(nil, err)
180+
return
181+
}
182+
183+
resp, err := msg.Response()
165184
if err != nil {
166185
req.setResponse(nil, err)
167186
return
@@ -237,14 +256,22 @@ func (n *Node) serverLoop() {
237256
defer c.Close()
238257

239258
n.cfg.setReadDeadline(c)
240-
h, err := protocol.ReadHandshake(c)
259+
msg, err := protocol.ReadMsg(c)
260+
if err != nil {
261+
n.sendErr(err)
262+
return
263+
}
264+
h, err := msg.Handshake()
241265
if err != nil {
242266
n.sendErr(err)
243267
return
244268
}
245269

246270
n.cfg.setWriteDeadline(c)
247-
if err := protocol.WriteAck(c, true, "ok"); err != nil {
271+
if err := protocol.WriteMsg(
272+
c,
273+
protocol.NewAck(true, "ok"),
274+
); err != nil {
248275
n.sendErr(err)
249276
return
250277
}
@@ -285,7 +312,11 @@ func serve(
285312
}
286313

287314
cfg.setReadDeadline(conn)
288-
req, err := protocol.ReadRequest(conn)
315+
msg, err := protocol.ReadMsg(conn)
316+
if err != nil {
317+
return err
318+
}
319+
req, err := msg.Request()
289320
if err != nil {
290321
return err
291322
}
@@ -298,7 +329,10 @@ func serve(
298329

299330
d, err := r.response()
300331
cfg.setWriteDeadline(conn)
301-
if err := protocol.WriteResponse(conn, d, err); err != nil {
332+
if err := protocol.WriteMsg(
333+
conn,
334+
protocol.NewResponse(d, err),
335+
); err != nil {
302336
return err
303337
}
304338

protocol/ack.go

+8-42
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,25 @@
11
package protocol
22

3-
import (
4-
"io"
5-
6-
"github.com/iamjinlei/go-ipc/transport"
7-
)
8-
93
type Ack struct {
104
O bool
115
M string
126
}
137

14-
func (a *Ack) Ok() bool {
15-
return a.O
16-
}
17-
18-
func (a *Ack) Msg() string {
19-
return a.M
20-
}
21-
22-
func (a *Ack) Encode() ([]byte, error) {
23-
return encode(a)
24-
}
25-
26-
func EncodeAck(ok bool, msg string) ([]byte, error) {
27-
a := &Ack{
8+
func NewAck(ok bool, msg string) *Ack {
9+
return &Ack{
2810
O: ok,
2911
M: msg,
3012
}
31-
return a.Encode()
3213
}
3314

34-
func DecodeAck(d []byte) (*Ack, error) {
35-
var a Ack
36-
if err := decode(d, &a); err != nil {
37-
return nil, err
38-
}
39-
40-
return &a, nil
15+
func (a *Ack) Ok() bool {
16+
return a.O
4117
}
4218

43-
func WriteAck(w io.Writer, ok bool, msg string) error {
44-
pkt, err := EncodeAck(ok, msg)
45-
if err != nil {
46-
return err
47-
}
48-
49-
return transport.WritePacket(w, pkt)
19+
func (a *Ack) Msg() string {
20+
return a.M
5021
}
5122

52-
func ReadAck(r io.Reader) (*Ack, error) {
53-
pkt, err := transport.ReadPacket(r)
54-
if err != nil {
55-
return nil, err
56-
}
57-
58-
return DecodeAck(pkt)
23+
func (a *Ack) Type() MsgType {
24+
return TypeAck
5925
}

protocol/ack_test.go

+7-13
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,17 @@ import (
1111
)
1212

1313
func TestAck(t *testing.T) {
14-
msg := "ack message"
14+
data := "ack message"
1515
for _, ok := range []bool{true, false} {
16-
// Encode-decode
17-
enc, err := protocol.EncodeAck(ok, msg)
18-
assert.NoError(t, err)
19-
a, err := protocol.DecodeAck(enc)
20-
assert.NoError(t, err)
21-
assert.Equal(t, ok, a.Ok())
22-
assert.Equal(t, msg, a.Msg())
23-
24-
// Write-read
2516
buf := bytes.NewBuffer(nil)
26-
require.NoError(t, protocol.WriteAck(buf, ok, msg))
17+
a := protocol.NewAck(ok, data)
18+
require.NoError(t, protocol.WriteMsg(buf, a))
2719

28-
a, err = protocol.ReadAck(bytes.NewReader(buf.Bytes()))
20+
msg, err := protocol.ReadMsg(bytes.NewReader(buf.Bytes()))
21+
assert.NoError(t, err)
22+
a, err = msg.Ack()
2923
assert.NoError(t, err)
3024
assert.Equal(t, ok, a.Ok())
31-
assert.Equal(t, msg, a.Msg())
25+
assert.Equal(t, data, a.Msg())
3226
}
3327
}

protocol/encoding.go

-22
This file was deleted.

protocol/handshake.go

+6-40
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,19 @@
11
package protocol
22

3-
import (
4-
"io"
5-
6-
"github.com/iamjinlei/go-ipc/transport"
7-
)
8-
93
type Handshake struct {
104
Id string
115
}
126

13-
func (h *Handshake) ID() string {
14-
return h.Id
15-
}
16-
17-
func (h *Handshake) Encode() ([]byte, error) {
18-
return encode(h)
19-
}
20-
21-
func EncodeHandshake(id string) ([]byte, error) {
22-
h := &Handshake{
7+
func NewHandshake(id string) *Handshake {
8+
return &Handshake{
239
Id: id,
2410
}
25-
return h.Encode()
26-
}
27-
28-
func DecodeHandshake(d []byte) (*Handshake, error) {
29-
var h Handshake
30-
if err := decode(d, &h); err != nil {
31-
return nil, err
32-
}
33-
34-
return &h, nil
3511
}
3612

37-
func WriteHandshake(w io.Writer, id string) error {
38-
pkt, err := EncodeHandshake(id)
39-
if err != nil {
40-
return err
41-
}
42-
43-
return transport.WritePacket(w, pkt)
13+
func (h *Handshake) ID() string {
14+
return h.Id
4415
}
4516

46-
func ReadHandshake(r io.Reader) (*Handshake, error) {
47-
pkt, err := transport.ReadPacket(r)
48-
if err != nil {
49-
return nil, err
50-
}
51-
52-
return DecodeHandshake(pkt)
17+
func (h *Handshake) Type() MsgType {
18+
return TypeHandshake
5319
}

protocol/handshake_test.go

+5-10
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,13 @@ import (
1313
func TestHandshake(t *testing.T) {
1414
id := "test_id"
1515

16-
// Encode-decode
17-
enc, err := protocol.EncodeHandshake(id)
18-
assert.NoError(t, err)
19-
h, err := protocol.DecodeHandshake(enc)
20-
assert.NoError(t, err)
21-
assert.Equal(t, id, h.ID())
22-
23-
// Write-read
16+
h := protocol.NewHandshake(id)
2417
buf := bytes.NewBuffer(nil)
25-
require.NoError(t, protocol.WriteHandshake(buf, id))
18+
require.NoError(t, protocol.WriteMsg(buf, h))
2619

27-
h, err = protocol.ReadHandshake(bytes.NewReader(buf.Bytes()))
20+
msg, err := protocol.ReadMsg(bytes.NewReader(buf.Bytes()))
21+
assert.NoError(t, err)
22+
h, err = msg.Handshake()
2823
assert.NoError(t, err)
2924
assert.Equal(t, id, h.ID())
3025
}

0 commit comments

Comments
 (0)