-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.go
67 lines (55 loc) · 1.61 KB
/
server.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
67
package web
import (
"github.com/google/uuid"
"github.com/procyon-projects/procyon-configure"
"github.com/procyon-projects/procyon-context"
"github.com/valyala/fasthttp"
"strconv"
)
type Server interface {
Run() error
Stop() error
SetProperties(properties *configure.WebServerProperties)
GetPort() uint
}
const DefaultWebServerPort uint = 8080
type ProcyonWebServer struct {
router Router
properties *configure.WebServerProperties
}
func (server *ProcyonWebServer) SetProperties(properties *configure.WebServerProperties) {
server.properties = properties
}
func (server *ProcyonWebServer) Run() error {
return fasthttp.ListenAndServe(":"+strconv.Itoa(int(server.GetPort())), server.Handle)
}
func (server *ProcyonWebServer) Handle(ctx *fasthttp.RequestCtx) {
server.router.Route(ctx)
}
func (server *ProcyonWebServer) Stop() error {
return nil
}
func (server *ProcyonWebServer) GetPort() uint {
var port uint
if server.properties == nil {
port = DefaultWebServerPort
} else {
port = server.properties.Port
}
return port
}
func newProcyonWebServer(ctx context.ApplicationContext) Server {
server := &ProcyonWebServer{
router: NewProcyonRouter(ctx.(context.ConfigurableApplicationContext)),
}
return server
}
func NewProcyonWebServerForBenchmark(handlerRegistry SimpleHandlerRegistry) *ProcyonWebServer {
appId := uuid.New()
contextId := uuid.New()
ctx := NewProcyonServerApplicationContext(context.ApplicationId(appId.String()), context.ContextId(contextId.String()))
server := &ProcyonWebServer{
router: newProcyonRouterForBenchmark(ctx.BaseApplicationContext, handlerRegistry),
}
return server
}