package server import ( "fmt" "net" "git.loafle.net/commons_go/logging" cwf "git.loafle.net/commons_go/websocket_fasthttp" "git.loafle.net/overflow/overflow_gateway_websocket/config" "git.loafle.net/overflow/overflow_gateway_websocket/external" "git.loafle.net/overflow/overflow_gateway_websocket/external/redis" "git.loafle.net/overflow/overflow_gateway_websocket/servlet" oos "git.loafle.net/overflow/overflow_subscriber" oosr "git.loafle.net/overflow/overflow_subscriber/redis" "github.com/valyala/fasthttp" ) type ServerHandlers struct { cwf.ServerHandlers redisSubscriber oos.Subscriber subscribers []oos.SubscriberHandler } // Init invoked before the server is started // If you override ths method, must call func (sh *ServerHandlers) Init() error { if err := sh.ServerHandlers.Init(); nil != err { return err } external.ExternalInit() return nil } func (sh *ServerHandlers) Listen() (net.Listener, error) { return net.Listen(config.Config.Server.Network, config.Config.Server.Addr) } func (sh *ServerHandlers) OnStart() { sh.ServerHandlers.OnStart() sh.redisSubscriber = oosr.New(redis.RedisPool.Get()) if err := sh.redisSubscriber.Start(); nil != err { logging.Logger().Error(fmt.Sprintf("App: Redist Subscriber did not start %v", err)) return } for _, subscriber := range sh.subscribers { sh.redisSubscriber.Subscribe(subscriber) } } func (sh *ServerHandlers) OnError(ctx *fasthttp.RequestCtx, status int, reason error) { sh.OnError(ctx, status, reason) } func (sh *ServerHandlers) OnStop() { sh.redisSubscriber.Stop() external.ExternalDestroy() sh.ServerHandlers.OnStop() } func (sh *ServerHandlers) RegisterServletHandler(servletHandler servlet.ServletHandler) { sh.RegisterSocketHandler(servletHandler) } func (sh *ServerHandlers) RegisterSubscriberHandler(subscriberHandler oos.SubscriberHandler) { if nil == sh.subscribers { sh.subscribers = make([]oos.SubscriberHandler, 0) } sh.subscribers = append(sh.subscribers, subscriberHandler) } func (sh *ServerHandlers) Validate() { sh.ServerHandlers.Validate() }