cli_conn.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package model
  2. import (
  3. "log"
  4. "rocommon"
  5. "rocommon/socket"
  6. "roserver/serverproto"
  7. "sync"
  8. "time"
  9. )
  10. func init() {
  11. socket.RegisterProcessRPC("tcp.demo",
  12. func(b rocommon.ProcessorRPCBundle, userCb rocommon.EventCallBack, arg ...interface{}) {
  13. b.SetTransmitter(new(socket.TCPMessageProcessor))
  14. b.SetHooker(socket.NewMultiTCPEventHook(
  15. new(socket.TCPEventHook))) //基础消息处理
  16. b.SetCallback(socket.QueueEventCall(userCb))
  17. })
  18. socket.RegisterProcessRPC("ws.demo",
  19. func(b rocommon.ProcessorRPCBundle, userCb rocommon.EventCallBack, arg ...interface{}) {
  20. b.SetTransmitter(new(socket.WSMessageProcessor))
  21. b.SetHooker(socket.NewMultiTCPEventHook(
  22. new(socket.TCPEventHook))) //基础消息处理
  23. b.SetCallback(socket.QueueEventCall(userCb))
  24. })
  25. }
  26. type ClientConnector interface {
  27. Session() rocommon.Session
  28. }
  29. func CreateClientConn(f func(rocommon.Session)) {
  30. var wg sync.WaitGroup
  31. var servicID string = ""
  32. var addrStr string = "127.0.0.1:21001"
  33. cli := socket.NewServerNode("tcpConnector", servicID, addrStr, nil)
  34. socket.SetProcessorRPC(cli, "tcp.demo", func(ev rocommon.ProcEvent) {
  35. //todo...
  36. switch m := ev.Msg().(type) {
  37. case *rocommon.SessionConnectError:
  38. break
  39. case *rocommon.SessionClosed:
  40. log.Println("session onclose")
  41. break
  42. case *rocommon.SessionConnected:
  43. //f(cli.(ClientConnector).Session())
  44. //模拟发送loginreq消息
  45. /*
  46. msg := &serverproto.LoginReq{
  47. Version: "1.0.0",
  48. Platform: "pc",
  49. OpenId: "1234567890",
  50. }
  51. ev.Session().Send(msg)
  52. */
  53. break
  54. case *serverproto.SCPingAck:
  55. log.Println("receive ping ack")
  56. time.Sleep(3 * time.Second)
  57. msg := serverproto.CSPingReq{}
  58. msg.OpenId = "chy1111"
  59. ev.Session().Send(&msg)
  60. break
  61. case *serverproto.SCLoginAck:
  62. log.Println("receive login ack", m)
  63. }
  64. })
  65. wg.Add(1)
  66. //设置重连时间
  67. //cli.(dgnet.TCPConnector).SetReconnectTime(5 * time.Second)
  68. cli.Start()
  69. //f(cli.(ClientConnector).Session())
  70. wg.Wait()
  71. }