package linker import ( "io" "log" "github.com/wpajqz/linker/codec" ) type ( Handler interface { Handle(Context) } HandlerFunc func(Context) ErrorHandler func(error) Server struct { config Config router *Router errorHandler ErrorHandler constructHandler Handler destructHandler Handler pingHandler Handler } ) func NewServer(config Config) *Server { if config.ContentType == "" { config.ContentType = codec.JSON } if config.MaxPayload == 0 { config.MaxPayload = MaxPayload } return &Server{ config: config, errorHandler: func(err error) { if err != io.EOF { log.Println(err.Error()) } }, } } // 设置默认错误处理方法 func (s *Server) OnError(errorHandler ErrorHandler) { s.errorHandler = errorHandler } // 客户端链接断开以后执行回收操作 func (s *Server) OnClose(handler Handler) { s.destructHandler = handler } // 客户端建立连接以后初始化操作 func (s *Server) OnOpen(handler Handler) { s.constructHandler = handler } // 设置心跳包的handler,需要客户端发送心跳包才能够触发 // 客户端发送心跳包,服务端未调用此方法时只起到建立长连接的作用 func (s *Server) OnPing(handler Handler) { s.pingHandler = handler } // 绑定路由 func (s *Server) BindRouter(r *Router) { s.router = r } func (f HandlerFunc) Handle(ctx Context) { f(ctx) }