|
3 | 3 | package main
|
4 | 4 |
|
5 | 5 | import (
|
6 |
| - "github.com/gorilla/websocket" |
| 6 | + "github.com/googollee/go-socket.io" |
7 | 7 | "log"
|
8 | 8 | "net/http"
|
9 | 9 | )
|
10 | 10 |
|
11 | 11 | type connection struct {
|
12 | 12 | // The websocket connection.
|
13 |
| - ws *websocket.Conn |
| 13 | + ws socketio.Socket |
14 | 14 |
|
15 | 15 | // Buffered channel of outbound messages.
|
16 |
| - send chan []byte |
17 |
| -} |
18 |
| - |
19 |
| -func (c *connection) reader() { |
20 |
| - for { |
21 |
| - _, message, err := c.ws.ReadMessage() |
22 |
| - if err != nil { |
23 |
| - break |
24 |
| - } |
25 |
| - |
26 |
| - h.broadcast <- message |
27 |
| - } |
28 |
| - c.ws.Close() |
| 16 | + send chan []byte |
| 17 | + incoming chan []byte |
29 | 18 | }
|
30 | 19 |
|
31 | 20 | func (c *connection) writer() {
|
32 | 21 | for message := range c.send {
|
33 |
| - err := c.ws.WriteMessage(websocket.TextMessage, message) |
| 22 | + err := c.ws.Emit("message", string(message)) |
34 | 23 | if err != nil {
|
35 | 24 | break
|
36 | 25 | }
|
37 | 26 | }
|
38 |
| - c.ws.Close() |
39 | 27 | }
|
40 | 28 |
|
41 | 29 | func uploadHandler(w http.ResponseWriter, r *http.Request) {
|
@@ -67,20 +55,26 @@ func uploadHandler(w http.ResponseWriter, r *http.Request) {
|
67 | 55 | }
|
68 | 56 | }
|
69 | 57 |
|
70 |
| -func wsHandler(w http.ResponseWriter, r *http.Request) { |
71 |
| - w.Header().Set("Access-Control-Allow-Origin", "*") |
72 |
| - log.Print("Started a new websocket handler") |
73 |
| - ws, err := websocket.Upgrade(w, r, nil, 1024, 1024) |
74 |
| - if _, ok := err.(websocket.HandshakeError); ok { |
75 |
| - http.Error(w, "Not a websocket handshake", 400) |
76 |
| - return |
77 |
| - } else if err != nil { |
78 |
| - return |
| 58 | +func wsHandler() *socketio.Server { |
| 59 | + server, err := socketio.NewServer(nil) |
| 60 | + if err != nil { |
| 61 | + log.Fatal(err) |
79 | 62 | }
|
80 |
| - //c := &connection{send: make(chan []byte, 256), ws: ws} |
81 |
| - c := &connection{send: make(chan []byte, 256*10), ws: ws} |
82 |
| - h.register <- c |
83 |
| - defer func() { h.unregister <- c }() |
84 |
| - go c.writer() |
85 |
| - c.reader() |
| 63 | + |
| 64 | + server.On("connection", func(so socketio.Socket) { |
| 65 | + c := &connection{send: make(chan []byte, 256*10), ws: so} |
| 66 | + h.register <- c |
| 67 | + so.On("command", func(message string) { |
| 68 | + h.broadcast <- []byte(message) |
| 69 | + }) |
| 70 | + so.On("disconnection", func() { |
| 71 | + h.unregister <- c |
| 72 | + }) |
| 73 | + go c.writer() |
| 74 | + }) |
| 75 | + server.On("error", func(so socketio.Socket, err error) { |
| 76 | + log.Println("error:", err) |
| 77 | + }) |
| 78 | + |
| 79 | + return server |
86 | 80 | }
|
0 commit comments