server.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package core
  2. import (
  3. "github.com/SongZihuan/huan-proxy/src/config"
  4. "github.com/SongZihuan/huan-proxy/src/config/rulescompile"
  5. "github.com/SongZihuan/huan-proxy/src/flagparser"
  6. "github.com/SongZihuan/huan-proxy/src/server/responsewriter"
  7. "net/http"
  8. )
  9. type Middleware interface {
  10. ServeHTTP(http.ResponseWriter, *http.Request, http.HandlerFunc)
  11. }
  12. type CoreServer struct {
  13. logger Middleware
  14. }
  15. func NewCoreServer(logger Middleware) *CoreServer {
  16. if !flagparser.IsReady() || !config.IsReady() {
  17. panic("not ready")
  18. }
  19. return &CoreServer{
  20. logger: logger,
  21. }
  22. }
  23. func (c *CoreServer) GetConfig() *config.YamlConfig {
  24. // 不用检查Ready,因为在NewServer的时候已经检查过了
  25. return config.GetConfig()
  26. }
  27. func (c *CoreServer) GetRules() *rulescompile.RuleListCompileConfig {
  28. // 不用检查Ready,因为在NewServer的时候已经检查过了
  29. return config.GetRules()
  30. }
  31. func (c *CoreServer) GetRulesList() []*rulescompile.RuleCompileConfig {
  32. // 不用检查Ready,因为在NewServer的时候已经检查过了
  33. return c.GetRules().Rules
  34. }
  35. func (c *CoreServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  36. writer := responsewriter.NewResponseWriter(w)
  37. c.logger.ServeHTTP(writer, r, c.CoreServeHTTP)
  38. writer.MustWriteToResponse()
  39. }