-
Notifications
You must be signed in to change notification settings - Fork 8
/
main.go
64 lines (52 loc) · 1.07 KB
/
main.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
package main
import (
"log"
"github.com/funny/link"
"github.com/funny/link/codec"
)
type AddReq struct {
A, B int
}
type AddRsp struct {
C int
}
func main() {
//在codec中注册消息类型
json := codec.Json()
json.Register(AddReq{})
json.Register(AddRsp{})
server, err := link.Listen("tcp", "0.0.0.0:0", json, 0 /* sync send */, link.HandlerFunc(serverSessionLoop))
checkErr(err)
addr := server.Listener().Addr().String()
go server.Serve()
client, err := link.Dial("tcp", addr, json, 0)
checkErr(err)
clientSessionLoop(client)
}
func serverSessionLoop(session *link.Session) {
for {
req, err := session.Receive()
checkErr(err)
err = session.Send(&AddRsp{
req.(*AddReq).A + req.(*AddReq).B,
})
checkErr(err)
}
}
func clientSessionLoop(session *link.Session) {
for i := 0; i < 10; i++ {
err := session.Send(&AddReq{
i, i,
})
checkErr(err)
log.Printf("Send: %d + %d", i, i)
rsp, err := session.Receive()
checkErr(err)
log.Printf("Receive: %d", rsp.(*AddRsp).C)
}
}
func checkErr(err error) {
if err != nil {
log.Fatal(err)
}
}