/
reader.go
53 lines (47 loc) · 964 Bytes
/
reader.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
package handler
import (
"errors"
"fmt"
"net/http"
"github.com/gorilla/websocket"
)
type Reader interface {
Read(channel chan []interface{})
}
type ReaderPlugin struct {
Base
Reader
}
// GetConn get websocket connect to Push data to writer
func (r *ReaderPlugin) GetConn() (*websocket.Conn, error) {
cli := websocket.Dialer{}
websocketConn, _, err := cli.Dial(
fmt.Sprintf("ws://127.0.0.1:%d/", r.Port),
http.Header{},
)
return websocketConn, err
}
// Push data to writer and get result
func (r *ReaderPlugin) Put(websocketConn *websocket.Conn, channel chan []interface{}) error {
go r.Read(channel)
for {
select {
case obj := <- channel:
if len(obj) == 0 {
return nil
}
err := websocketConn.WriteJSON(Payload{Value: obj})
if err != nil {
return err
}
var res BaseResponse
websocketConn.ReadJSON(&res)
if res.Code == 200 {
return nil
}
return errors.New(res.Msg)
default:
continue
}
}
}