/
client.go
70 lines (59 loc) · 1.11 KB
/
client.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
package main
import (
"encoding/json"
"github.com/xtaci/kcp-go"
"log"
"util"
)
type KcpClientNetwork struct {
s *NetTask
rAddr string
id int
}
func NewKcpClientNetwork(rAddr string, id int) *KcpClientNetwork {
c := &KcpClientNetwork{
s: nil,
rAddr: rAddr,
id: id,
}
return c
}
func (this *KcpClientNetwork) Start() {
defer util.PrintCover()
conn, err := kcp.Dial(this.rAddr)
if err != nil {
log.Fatal(err, this.rAddr)
// todo retry
return
}
kcpConn, ok := conn.(*kcp.UDPSession)
if !ok {
log.Fatal("conn.(*kcp.UDPSession) failed!")
return
}
setMode(kcpConn, GetConfig().Mode)
setBuffer(kcpConn)
this.s = NewNetTask(conn, true)
this.s.deBug = "client"
this.s.Start()
go this.Loop()
}
func (this *KcpClientNetwork) Loop() {
for {
select {
case data, ok := <-this.s.RecvMsg:
if !ok {
log.Println("loop exit...")
break
}
msg := Message{}
err := json.Unmarshal(data, &msg)
if err != nil {
log.Println("(this *KcpClientNetwork) Loop()", err, data)
return
}
log.Printf("c%d recv from %s: %v", this.id, this.rAddr, msg)
default:
}
}
}