Skip to content

Commit 0f57f56

Browse files
committed
Merge pull request #13 from arduino/socket.io
Socket.io Former-commit-id: 2536ac631e066fbb31cdb017fe7486c2773d4213 [formerly 2e5e7c7163bbabee908a35cd776411d7585b9bec] Former-commit-id: 66a64a906ac97795f7d6e274b34647024b4116f1
2 parents 40df799 + acfdb54 commit 0f57f56

File tree

5 files changed

+53
-46
lines changed

5 files changed

+53
-46
lines changed

conn.go

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,84 +3,91 @@
33
package main
44

55
import (
6-
"github.com/gorilla/websocket"
6+
"github.com/gin-gonic/gin"
7+
"github.com/googollee/go-socket.io"
78
"log"
89
"net/http"
910
)
1011

1112
type connection struct {
1213
// The websocket connection.
13-
ws *websocket.Conn
14+
ws socketio.Socket
1415

1516
// 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()
17+
send chan []byte
18+
incoming chan []byte
2919
}
3020

3121
func (c *connection) writer() {
3222
for message := range c.send {
33-
err := c.ws.WriteMessage(websocket.TextMessage, message)
23+
err := c.ws.Emit("message", string(message))
3424
if err != nil {
3525
break
3626
}
3727
}
38-
c.ws.Close()
3928
}
4029

41-
func uploadHandler(w http.ResponseWriter, r *http.Request) {
30+
// WsServer overrides socket.io server to set the CORS
31+
type WsServer struct {
32+
Server *socketio.Server
33+
}
34+
35+
func (s *WsServer) ServeHTTP(c *gin.Context) {
36+
s.Server.ServeHTTP(c.Writer, c.Request)
37+
}
38+
39+
func uploadHandler(c *gin.Context) {
4240
log.Print("Received a upload")
43-
w.Header().Set("Access-Control-Allow-Origin", "*")
44-
port := r.FormValue("port")
41+
port := c.PostForm("port")
4542
if port == "" {
46-
http.Error(w, "port is required", http.StatusBadRequest)
43+
c.String(http.StatusBadRequest, "port is required")
4744
return
4845
}
49-
board := r.FormValue("board")
46+
board := c.PostForm("board")
5047
if board == "" {
51-
http.Error(w, "board is required", http.StatusBadRequest)
48+
c.String(http.StatusBadRequest, "board is required")
5249
return
5350
}
54-
board_rewrite := r.FormValue("board_rewrite")
55-
sketch, header, err := r.FormFile("sketch_hex")
51+
board_rewrite := c.PostForm("board_rewrite")
52+
sketch, header, err := c.Request.FormFile("sketch_hex")
5653
if err != nil {
57-
http.Error(w, err.Error(), http.StatusBadRequest)
54+
c.String(http.StatusBadRequest, err.Error())
5855
}
5956

6057
if header != nil {
6158
path, err := saveFileonTempDir(header.Filename, sketch)
6259
if err != nil {
63-
http.Error(w, err.Error(), http.StatusBadGateway)
60+
c.String(http.StatusBadRequest, err.Error())
6461
}
6562

6663
go spProgramRW(port, board, board_rewrite, path)
6764
}
6865
}
6966

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
67+
func wsHandler() *WsServer {
68+
server, err := socketio.NewServer(nil)
69+
if err != nil {
70+
log.Fatal(err)
7971
}
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()
72+
73+
server.On("connection", func(so socketio.Socket) {
74+
c := &connection{send: make(chan []byte, 256*10), ws: so}
75+
h.register <- c
76+
so.On("command", func(message string) {
77+
h.broadcast <- []byte(message)
78+
})
79+
so.On("disconnection", func() {
80+
h.unregister <- c
81+
})
82+
go c.writer()
83+
})
84+
server.On("error", func(so socketio.Socket, err error) {
85+
log.Println("error:", err)
86+
})
87+
88+
wrapper := WsServer{
89+
Server: server,
90+
}
91+
92+
return &wrapper
8693
}

hub.go.REMOVED.git-id

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ed939bdfc956a27cad29238fb0ec6bf119a75a75
1+
43c9aa77ac926c1bc477bd345a518a17089a5d13

main.go.REMOVED.git-id

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
82b23c9171608bb926d86f890d6c78ca2163c9bc
1+
47161270e96459d5cb8beda92c2ecadbcfc837d6

seriallist_linux.go.REMOVED.git-id

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
b5767e70c18b6301e29b405d330d3188ccfd4a98
1+
26cc3d3b480a500ab025af95d4f1922641dd2574

utilities.go.REMOVED.git-id

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ad3ab21507c53f6d36f05b29b684c63c395d3738
1+
4fa09682580c4934471adb37311d6022dec3f653

0 commit comments

Comments
 (0)