| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package main
- import (
- "fmt"
- "net"
- "one.com/nnet"
- "one.com/nnet/cpn"
- "os"
- "os/signal"
- "syscall"
- "time"
- )
- const (
- SERVER_ADDR = "127.0.0.1:3200"
- WS_PATH = "/echo"
- )
- type ServerSessionCb struct {
- }
- func (self *ServerSessionCb) OnClosed(ses nnet.ISession, reason int32) {
- fmt.Println("client quit:", ses.GetRawConn().RemoteAddr())
- }
- func (self *ServerSessionCb) OnConnected(ses nnet.ISession) (bool, int32) {
- fmt.Fprintf(os.Stdout, "connected:%v\n", ses.GetRawConn().RemoteAddr())
- return true, 0
- }
- func (self *ServerSessionCb) OnMessage(ses nnet.ISession, pkt nnet.IPacket) bool {
- p, ok := pkt.(*EchoPacket)
- if !ok {
- return false
- }
- _, _ = fmt.Fprintf(os.Stdout, "received[%v] id<%v>, msg<%v>\n", time.Now().Format("15:04:05"), p.Id, p.Msg)
- _ = ses.AWrite(p, time.Second)
- return true
- }
- func (self *ServerSessionCb) OnHeartbeat(ses nnet.ISession) bool {
- return true
- }
- func start_tcp_server() {
- __start_server(func() nnet.IHub {
- listener, err := nnet.Listen(SERVER_ADDR)
- if err != nil {
- panic(err)
- }
- tcpListener, ok := listener.(*net.TCPListener)
- if !ok {
- panic("interface")
- }
- return cpn.NewTcpServer(&nnet.DefHubConfig, &ServerSessionCb{}, &TcpProtocol{}, tcpListener)
- })
- }
- func start_ws_server() {
- __start_server(func() nnet.IHub {
- return cpn.NewWsServer(&nnet.DefHubConfig, &ServerSessionCb{}, &WsProtocol{}, SERVER_ADDR, WS_PATH, nil)
- })
- }
- func __start_server(fn func() nnet.IHub) {
- server := fn()
- go func() {
- err := server.Start()
- if err != nil {
- panic(err)
- }
- }()
- fmt.Println("server started.")
- ch := make(chan os.Signal)
- signal.Notify(ch, syscall.SIGINT)
- fmt.Println("received signal:", <-ch)
- server.Stop()
- }
- func main() {
- param := "tcpserver"
- if len(os.Args) > 1 {
- param = os.Args[1]
- }
- switch param {
- case "tcpserver":
- start_tcp_server()
- case "tcpclient":
- start_tcp_client()
- case "wsserver":
- start_ws_server()
- case "wsclient":
- start_ws_client()
- default:
- fmt.Fprintf(os.Stderr, "usage:%v [tcpserver|tcpclient|wsserver|wsclient]\n", os.Args[0])
- }
- }
|