aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-27 20:44:30 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-27 20:44:30 +0200
commit0824f4bcd9a31add8e7cfa1662d2cb40900de073 (patch)
tree63a152cd81992a9815fc8e3f23d873f2c562c505 /server.go
parent24ba33d974cf651df195d2912b00238e6eeb2ed8 (diff)
Encapsulate in package
Diffstat (limited to 'server.go')
-rw-r--r--server.go52
1 files changed, 52 insertions, 0 deletions
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)
+}