This repository has been archived by the owner on Aug 28, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
initialize.go
96 lines (85 loc) · 1.97 KB
/
initialize.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package fasthttp
import (
"fmt"
"log"
"net"
"net/url"
"os"
"time"
"github.com/fasthttp/websocket"
wwr "github.com/qbeon/webwire-go"
"github.com/valyala/fasthttp"
)
// Initialize implements the Transport interface
func (srv *Transport) Initialize(
options wwr.ServerOptions,
isShuttingdown wwr.IsShuttingDown,
onNewConnection wwr.OnNewConnection,
) error {
srv.isShuttingdown = isShuttingdown
srv.onNewConnection = onNewConnection
srv.readTimeout = options.ReadTimeout
// Determine final address
scheme := "http"
if srv.TLS != nil {
scheme = "https"
}
host := srv.Host
if host == "" {
if srv.TLS != nil {
host = ":https"
} else {
host = ":http"
}
}
// Set default keep-alive period
if srv.KeepAlive == 0 {
srv.KeepAlive = 30 * time.Second
}
// Initialize TCP/IP listener
listener, err := net.Listen("tcp", host)
if err != nil {
return fmt.Errorf("TCP/IP listener setup failure: %s", err)
}
srv.addr = url.URL{
Scheme: scheme,
Host: listener.Addr().String(),
Path: "/",
}
srv.listener = &tcpKeepAliveListener{
listener.(*net.TCPListener),
srv.KeepAlive,
}
// Set default HTTP server if none is specified
if srv.HTTPServer == nil {
srv.HTTPServer = &fasthttp.Server{
Name: "webwire 2.0",
}
}
srv.HTTPServer.ReadTimeout = options.ReadTimeout
srv.HTTPServer.Handler = srv.handleAccept
// Set default connection upgrader if none is specified
if srv.Upgrader == nil {
srv.Upgrader = &websocket.FastHTTPUpgrader{
// Inherit buffer sizes from the HTTP server
ReadBufferSize: srv.HTTPServer.ReadBufferSize,
WriteBufferSize: srv.HTTPServer.WriteBufferSize,
}
}
// Create default loggers to std-out/err when no loggers are specified
if srv.WarnLog == nil {
srv.WarnLog = log.New(
os.Stdout,
"WWR_FASTHTTPWS_WARN: ",
log.Ldate|log.Ltime|log.Lshortfile,
)
}
if srv.ErrorLog == nil {
srv.ErrorLog = log.New(
os.Stderr,
"WWR_FASTHTTPWS_ERR: ",
log.Ldate|log.Ltime|log.Lshortfile,
)
}
return nil
}