-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.go
More file actions
124 lines (86 loc) · 2.05 KB
/
example.go
File metadata and controls
124 lines (86 loc) · 2.05 KB
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// +build ignore
package main
import (
"fmt"
"github.com/ops-console/http200ok"
"github.com/ops-console/http200ok/render"
"log"
"net/http"
"time"
)
type Message struct {
Message string
}
type User struct {
UserID int
}
func (u *User) IsAuth() bool {
return u.UserID != 0
}
var tpl = `
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
<script>
ws = new WebSocket('ws://127.0.0.1:9009/ws/');
ws.onopen = function () {
ws.onmessage = function (evt) {
var data = JSON.parse(evt.data);
$("#Message").html(data.Message);
}
};
</script>
<div id="Message"></div>
</body>
</html>
`
func main() {
render.FromString("index.html", tpl)
app := http200ok.New()
app.Use(func(c *http200ok.Context) {
c.Set("CurrentUser", &User{UserID: 1})
fmt.Println("I'm a global middleware", c.Request.RequestURI)
})
app.Get("/", func(c *http200ok.Context) {
render.HTML(c.Response, "index.html", nil)
})
app.WebSocket("/ws/", func(c *http200ok.Context) {
/*
user, ok := c.Get("CurrentUser").(*User)
if !ok || !user.IsAuth() {
http.NotFound(c.Response, c.Request)
c.Stop()
return
}
*/
fmt.Println("I'm a local middleware")
}, func(c *http200ok.Context) {
user, ok := c.Get("CurrentUser").(*User)
if ok && user.IsAuth() {
fmt.Println("OK: i'm a disco dancer")
}
var i = 0
for {
if err := c.WebSocket.SendJSON(Message{Message: fmt.Sprintf("Hello %d", i)}); err != nil {
fmt.Println(err)
return
}
i++
<-time.After(time.Second)
}
})
app.Get("/panic/", func(c *http200ok.Context) {
panic("AAA")
})
app.SetErrorHandler(func(rw http.ResponseWriter, req *http.Request, err error) {
http.Error(rw, fmt.Sprintf("Panic: %s", err.Error()), http.StatusInternalServerError)
})
app.SetNotFoundHandler(func(rw http.ResponseWriter, req *http.Request) {
http.Error(rw, fmt.Sprintf("%s not found", req.RequestURI), http.StatusNotFound)
})
log.Fatal(http.ListenAndServe(":9009", app))
}