另客网go项目公用的代码库

server.go 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package linker
  2. import (
  3. "io"
  4. "log"
  5. "github.com/wpajqz/linker/codec"
  6. )
  7. type (
  8. Handler interface {
  9. Handle(Context)
  10. }
  11. HandlerFunc func(Context)
  12. ErrorHandler func(error)
  13. Server struct {
  14. config Config
  15. router *Router
  16. errorHandler ErrorHandler
  17. constructHandler Handler
  18. destructHandler Handler
  19. pingHandler Handler
  20. }
  21. )
  22. func NewServer(config Config) *Server {
  23. if config.ContentType == "" {
  24. config.ContentType = codec.JSON
  25. }
  26. if config.MaxPayload == 0 {
  27. config.MaxPayload = MaxPayload
  28. }
  29. return &Server{
  30. config: config,
  31. errorHandler: func(err error) {
  32. if err != io.EOF {
  33. log.Println(err.Error())
  34. }
  35. },
  36. }
  37. }
  38. // 设置默认错误处理方法
  39. func (s *Server) OnError(errorHandler ErrorHandler) {
  40. s.errorHandler = errorHandler
  41. }
  42. // 客户端链接断开以后执行回收操作
  43. func (s *Server) OnClose(handler Handler) {
  44. s.destructHandler = handler
  45. }
  46. // 客户端建立连接以后初始化操作
  47. func (s *Server) OnOpen(handler Handler) {
  48. s.constructHandler = handler
  49. }
  50. // 设置心跳包的handler,需要客户端发送心跳包才能够触发
  51. // 客户端发送心跳包,服务端未调用此方法时只起到建立长连接的作用
  52. func (s *Server) OnPing(handler Handler) {
  53. s.pingHandler = handler
  54. }
  55. // 绑定路由
  56. func (s *Server) BindRouter(r *Router) {
  57. s.router = r
  58. }
  59. func (f HandlerFunc) Handle(ctx Context) {
  60. f(ctx)
  61. }