123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package main
- import (
- "flag"
- "fmt"
- "log"
- "net"
- "time"
- "go-common/app/service/main/broadcast/libs/bufio"
- "go-common/app/service/main/broadcast/model"
- "go-common/library/xstr"
- )
- var (
- op string
- key string
- room string
- accessKey string
- platform string
- mobiApp string
- addr string
- build int
- )
- const (
- _heartTime = 30 * time.Second
- )
- func init() {
- flag.StringVar(&addr, "addr", "172.22.33.126:7821", "server ip:port")
- flag.StringVar(&key, "device_id", "test_"+fmt.Sprint(time.Now().Unix()), "client key")
- flag.StringVar(&room, "room_id", "", "client room")
- flag.StringVar(&accessKey, "access_key", "", "client access_key")
- flag.StringVar(&platform, "platform", "", "client platform")
- flag.StringVar(&mobiApp, "mobi_app", "", "client moni_app")
- flag.StringVar(&op, "op", "", "op=1000,1002,1003")
- flag.IntVar(&build, "build", 0, "client build")
- }
- func main() {
- flag.Parse()
- if op == "" {
- panic("please input the op=1000/1002/1003")
- }
- if platform == "" {
- panic("please input the platform=android/ios/web")
- }
- log.Printf("addr=%s op=%s key=%s\n", addr, op, key)
- _, err := xstr.SplitInts(op)
- if err != nil {
- panic(err)
- }
- client()
- }
- func client() {
- conn, err := net.DialTimeout("tcp", addr, time.Second)
- if err != nil {
- log.Printf("err.net.Dial(%s) error(%v)\n", addr, err)
- return
- }
- defer func() {
- conn.Close()
- log.Printf("err.conn.Close() key:%s\n", key)
- }()
- wr := bufio.NewWriter(conn)
- rd := bufio.NewReader(conn)
- // timeout
- if err = conn.SetDeadline(time.Now().Add(time.Second * 5)); err != nil {
- log.Printf("err.conn.SetDeadline() error(%v)\n", err)
- return
- }
- body := fmt.Sprintf(`{"device_id":"%s","access_key":"%s","platform":"%s","mobi_app":"%s","build":%d,"accepts":[%s],"room_id":"%s"}`, key, accessKey, platform, mobiApp, build, op, room)
- log.Printf("auth:%s\n", body)
- // auth first
- proto := &model.Proto{
- Operation: model.OpAuth,
- Body: []byte(body),
- }
- if err = proto.WriteTCP(wr); err != nil {
- log.Printf("err.auth write error(%v)\n", err)
- return
- }
- if err = wr.Flush(); err != nil {
- log.Printf("err.auth flush error(%v)\n", err)
- return
- }
- go heartbeat(conn, wr, key)
- for {
- if err = proto.ReadTCP(rd); err != nil {
- log.Printf("err.read a proto key:%v error(%v)\n", key, err)
- return
- }
- switch proto.Operation {
- case model.OpHeartbeatReply:
- if err = conn.SetDeadline(time.Now().Add(_heartTime * 5)); err != nil {
- log.Printf("err.conn.SetDeadline() key:%v error(%v)\n", key, err)
- return
- }
- log.Printf("info.read key:%v heartbeat proto.body(%s) seq: %d\n", key, string(proto.Body), proto.SeqId)
- default:
- log.Printf("info.read a key:%v proto(%+v) op:%d\n", key, proto, proto.Operation)
- }
- }
- }
- func heartbeat(conn net.Conn, wr *bufio.Writer, key string) {
- var (
- seq int32
- err error
- )
- defer conn.Close()
- for {
- seq++
- proto := &model.Proto{
- Operation: model.OpHeartbeat,
- SeqId: seq,
- }
- if err = proto.WriteTCP(wr); err != nil {
- log.Printf("err.heartbeat write error(%v)\n", err)
- return
- }
- if err = wr.Flush(); err != nil {
- log.Printf("err.heartbeat key:%s flush error(%v)\n", key, err)
- return
- }
- log.Printf("info.write key:%s heartbeat proto(%+v)\n", key, proto)
- time.Sleep(_heartTime)
- }
- }
|