package model import ( "log" "rocommon" "rocommon/socket" "roserver/serverproto" "sync" "time" ) func init() { socket.RegisterProcessRPC("tcp.demo", func(b rocommon.ProcessorRPCBundle, userCb rocommon.EventCallBack, arg ...interface{}) { b.SetTransmitter(new(socket.TCPMessageProcessor)) b.SetHooker(socket.NewMultiTCPEventHook( new(socket.TCPEventHook))) //基础消息处理 b.SetCallback(socket.QueueEventCall(userCb)) }) socket.RegisterProcessRPC("ws.demo", func(b rocommon.ProcessorRPCBundle, userCb rocommon.EventCallBack, arg ...interface{}) { b.SetTransmitter(new(socket.WSMessageProcessor)) b.SetHooker(socket.NewMultiTCPEventHook( new(socket.TCPEventHook))) //基础消息处理 b.SetCallback(socket.QueueEventCall(userCb)) }) } type ClientConnector interface { Session() rocommon.Session } func CreateClientConn(f func(rocommon.Session)) { var wg sync.WaitGroup var servicID string = "" var addrStr string = "127.0.0.1:21001" cli := socket.NewServerNode("tcpConnector", servicID, addrStr, nil) socket.SetProcessorRPC(cli, "tcp.demo", func(ev rocommon.ProcEvent) { //todo... switch m := ev.Msg().(type) { case *rocommon.SessionConnectError: break case *rocommon.SessionClosed: log.Println("session onclose") break case *rocommon.SessionConnected: //f(cli.(ClientConnector).Session()) //模拟发送loginreq消息 /* msg := &serverproto.LoginReq{ Version: "1.0.0", Platform: "pc", OpenId: "1234567890", } ev.Session().Send(msg) */ break case *serverproto.SCPingAck: log.Println("receive ping ack") time.Sleep(3 * time.Second) msg := serverproto.CSPingReq{} msg.OpenId = "chy1111" ev.Session().Send(&msg) break case *serverproto.SCLoginAck: log.Println("receive login ack", m) } }) wg.Add(1) //设置重连时间 //cli.(dgnet.TCPConnector).SetReconnectTime(5 * time.Second) cli.Start() //f(cli.(ClientConnector).Session()) wg.Wait() }