-
Notifications
You must be signed in to change notification settings - Fork 0
/
context.go
66 lines (50 loc) · 1.22 KB
/
context.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package rest
import (
"net/http"
"github.com/dvsekhvalnov/k-ray"
"github.com/dvsekhvalnov/k-ray/assets"
. "github.com/dvsekhvalnov/k-ray/log"
"github.com/rs/cors"
"github.com/unrolled/render"
"goji.io/pat"
)
type WebContext struct {
engine *engine.Engine
server *http.Server
*render.Render
}
func NewWebContext(engine *engine.Engine) *WebContext {
ctx := &WebContext{
engine: engine,
Render: render.New(render.Options{}),
server: &http.Server{},
}
topics := &TopicsController{}
events := &EventsSearchController{}
mux := NewMux(ctx)
//CORS
ctx.server.Handler = cors.Default().Handler(mux)
//API
topics.Register(mux)
events.Register(mux)
//static UI app (js, css, e.t.c.)
assets := assets.FS(false)
mux.Mux.Handle(pat.Get("/:file.:ext"), http.FileServer(assets))
mux.Mux.Handle(pat.Get("/*"), NewAssetHandler(assets, "/index.html"))
return ctx
}
func (ctx *WebContext) Start(cfg *engine.Config) {
ctx.server.Addr = cfg.Port
Log.Println("Starting HTTP server.")
go func() {
err := ctx.server.ListenAndServe()
if err != http.ErrServerClosed {
Log.Println("HTTP server error:", err)
} else {
Log.Println("HTTP server stopped. ")
}
}()
}
func (ctx *WebContext) Stop() {
ctx.server.Close()
}