From 0824f4bcd9a31add8e7cfa1662d2cb40900de073 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 27 Mar 2016 20:44:30 +0200 Subject: Encapsulate in package --- server.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 server.go (limited to 'server.go') diff --git a/server.go b/server.go new file mode 100644 index 0000000..3d6651f --- /dev/null +++ b/server.go @@ -0,0 +1,52 @@ +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) +} -- cgit v1.2.3