echo_server.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package main
  2. import (
  3. "fmt"
  4. "net"
  5. "one.com/nnet"
  6. "one.com/nnet/cpn"
  7. "os"
  8. "os/signal"
  9. "syscall"
  10. "time"
  11. )
  12. const (
  13. SERVER_ADDR = "127.0.0.1:3200"
  14. WS_PATH = "/echo"
  15. )
  16. type ServerSessionCb struct {
  17. }
  18. func (self *ServerSessionCb) OnClosed(ses nnet.ISession, reason int32) {
  19. fmt.Println("client quit:", ses.GetRawConn().RemoteAddr())
  20. }
  21. func (self *ServerSessionCb) OnConnected(ses nnet.ISession) (bool, int32) {
  22. fmt.Fprintf(os.Stdout, "connected:%v\n", ses.GetRawConn().RemoteAddr())
  23. return true, 0
  24. }
  25. func (self *ServerSessionCb) OnMessage(ses nnet.ISession, pkt nnet.IPacket) bool {
  26. p, ok := pkt.(*EchoPacket)
  27. if !ok {
  28. return false
  29. }
  30. _, _ = fmt.Fprintf(os.Stdout, "received[%v] id<%v>, msg<%v>\n", time.Now().Format("15:04:05"), p.Id, p.Msg)
  31. _ = ses.AWrite(p, time.Second)
  32. return true
  33. }
  34. func (self *ServerSessionCb) OnHeartbeat(ses nnet.ISession) bool {
  35. return true
  36. }
  37. func start_tcp_server() {
  38. listener, err := nnet.Listen(SERVER_ADDR)
  39. if err != nil {
  40. panic(err)
  41. }
  42. tcpListener, ok := listener.(*net.TCPListener)
  43. if !ok {
  44. panic("interface")
  45. }
  46. server := cpn.NewTcpServer(&nnet.DefHubConfig, &ServerSessionCb{}, &TcpProtocol{}, tcpListener)
  47. go func() {
  48. err = server.Start()
  49. if err != nil {
  50. panic(err)
  51. }
  52. }()
  53. fmt.Println("tcp server started.")
  54. ch := make(chan os.Signal)
  55. signal.Notify(ch, syscall.SIGINT)
  56. fmt.Println("received signal:", <-ch)
  57. server.Stop()
  58. }
  59. func start_ws_server() {
  60. server := cpn.NewWsServer(&nnet.DefHubConfig, &ServerSessionCb{}, &WsProtocol{}, SERVER_ADDR, WS_PATH, nil)
  61. go func() {
  62. err := server.Start()
  63. if err != nil {
  64. panic(err)
  65. }
  66. }()
  67. fmt.Println("ws server started.")
  68. ch := make(chan os.Signal)
  69. signal.Notify(ch, syscall.SIGINT)
  70. fmt.Println("received signal:", <-ch)
  71. server.Stop()
  72. }
  73. func main() {
  74. param := "tcpserver"
  75. if len(os.Args) > 1 {
  76. param = os.Args[1]
  77. }
  78. switch param {
  79. case "tcpserver":
  80. start_tcp_server()
  81. case "tcpclient":
  82. start_tcp_client()
  83. case "wsserver":
  84. start_ws_server()
  85. case "wsclient":
  86. start_ws_client()
  87. default:
  88. fmt.Fprintf(os.Stderr, "usage:%v [tcpserver|tcpclient|wsserver|wsclient]\n", os.Args[0])
  89. }
  90. }