/
websocket-provider.go
73 lines (57 loc) · 1.99 KB
/
websocket-provider.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
/********************************************************************************
This file is part of go-AIMan.
go-AIMan is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
go-AIMan is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with go-AIMan. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************************/
/**
* @file websocket-provider.go
* @authors:
* Reginaldo Costa <matrix@gmail.com>
* @date 2017
*/
package providers
import (
"math/rand"
"github.com/MatrixAINetwork/go-AIMan/constants"
"github.com/MatrixAINetwork/go-AIMan/providers/util"
"golang.org/x/net/websocket"
)
type WebSocketProvider struct {
address string
ws *websocket.Conn
}
func NewWebSocketProvider(address string) *WebSocketProvider {
provider := new(WebSocketProvider)
provider.address = address
return provider
}
func (provider WebSocketProvider) SendRequest(v interface{}, method string, params interface{}) error {
bodyString := util.JSONRPCObject{Version: "2.0", Method: method, Params: params, ID: rand.Intn(100)}
if provider.ws == nil {
ws, err := websocket.Dial(provider.address, "", provider.address)
if err != nil {
return err
}
provider.ws = ws
}
message := []byte(bodyString.AsJsonString())
_, err := provider.ws.Write(message)
if err != nil {
return err
}
return websocket.JSON.Receive(provider.ws, v)
}
func (provider WebSocketProvider) Close() error {
if provider.ws != nil {
return provider.ws.Close()
}
return customerror.WEBSOCKETNOTDENIFIED
}