package goxy import ( "crypto/tls" "encoding/gob" "log" "net/http" "os" ) type Server struct { Route http.Server Data string } func NewServer(fname string) (*Server, error) { r := make(Route) s := http.Server{ Handler: http.NewServeMux(), TLSConfig: &tls.Config{GetCertificate: r.GetCertificate}, } server := &Server{Route: r, Server: s, Data: fname} if err := server.Load(); err != nil { log.Println(err) } if err := server.Restore(); err != nil { return nil, err } Register(server) return server, nil } // Save routes to persistent file func (s Server) Save() error { fd, err := os.Create(s.Data) if err != nil { return err } defer fd.Close() return gob.NewEncoder(fd).Encode(s.Route) } // Load routes from persistent file func (s *Server) Load() error { fd, err := os.Open(s.Data) if err != nil { return err } defer fd.Close() return gob.NewDecoder(fd).Decode(&s.Route) }