Compare commits
2 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
3b9bd07185 | |
|
|
1d815355cd |
18
example.go
18
example.go
|
|
@ -16,21 +16,13 @@ const (
|
||||||
func main() {
|
func main() {
|
||||||
ws := websocket.NewWebSocketClient(
|
ws := websocket.NewWebSocketClient(
|
||||||
// onOpen
|
// onOpen
|
||||||
func(ws *websocket.WebSocketClient, isReconnecting bool) {
|
func(ws *websocket.WebSocketClient) {
|
||||||
if isReconnecting {
|
|
||||||
log.Println("Reconnected")
|
|
||||||
} else {
|
|
||||||
log.Println("Connected")
|
log.Println("Connected")
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// onClose
|
// onClose
|
||||||
func(ws *websocket.WebSocketClient, isReconnecting bool) {
|
func(ws *websocket.WebSocketClient) {
|
||||||
if isReconnecting {
|
|
||||||
log.Println("Reconnecting...")
|
|
||||||
} else {
|
|
||||||
log.Println("Disconnected")
|
log.Println("Disconnected")
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// onMessage
|
// onMessage
|
||||||
|
|
@ -40,7 +32,7 @@ func main() {
|
||||||
)
|
)
|
||||||
|
|
||||||
// Connect to server
|
// Connect to server
|
||||||
if err := ws.Connect(WEBSOCKET_URL, ATTEMPTS, INTERVAL, false); err != nil {
|
if err := ws.Connect(WEBSOCKET_URL, ATTEMPTS, INTERVAL); err != nil {
|
||||||
log.Println("Failed to connect:", err)
|
log.Println("Failed to connect:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,11 +48,11 @@ func main() {
|
||||||
time.Sleep(2 * time.Second)
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
// Reconnecting
|
// Reconnecting
|
||||||
ws.Reconnect(WEBSOCKET_URL, ATTEMPTS, INTERVAL)
|
ws.Connect(WEBSOCKET_URL, ATTEMPTS, INTERVAL)
|
||||||
sendMessage()
|
sendMessage()
|
||||||
time.Sleep(2 * time.Second)
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
ws.Disconnect(false)
|
ws.Disconnect()
|
||||||
|
|
||||||
log.Println("Done")
|
log.Println("Done")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,14 @@ type WebSocketClient struct {
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
onOpen func(ws *WebSocketClient, isReconnecting bool)
|
onOpen func(ws *WebSocketClient)
|
||||||
onClose func(ws *WebSocketClient, isReconnecting bool)
|
onClose func(ws *WebSocketClient)
|
||||||
onMessage func(ws *WebSocketClient, payload []byte)
|
onMessage func(ws *WebSocketClient, payload []byte)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWebSocketClient(
|
func NewWebSocketClient(
|
||||||
onOpen func(ws *WebSocketClient, isReconnecting bool),
|
onOpen func(ws *WebSocketClient),
|
||||||
onClose func(ws *WebSocketClient, isReconnecting bool),
|
onClose func(ws *WebSocketClient),
|
||||||
onMessage func(ws *WebSocketClient, payload []byte),
|
onMessage func(ws *WebSocketClient, payload []byte),
|
||||||
) *WebSocketClient {
|
) *WebSocketClient {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
|
@ -41,8 +41,10 @@ func (ws *WebSocketClient) Connect(
|
||||||
webSocketUrl string,
|
webSocketUrl string,
|
||||||
attempts int,
|
attempts int,
|
||||||
interval time.Duration,
|
interval time.Duration,
|
||||||
isReconnecting bool,
|
|
||||||
) (err error) {
|
) (err error) {
|
||||||
|
ws.Disconnect()
|
||||||
|
ws.ctx, ws.cancel = context.WithCancel(context.Background())
|
||||||
|
|
||||||
ws.URL, err = url.Parse(webSocketUrl)
|
ws.URL, err = url.Parse(webSocketUrl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -55,14 +57,14 @@ func (ws *WebSocketClient) Connect(
|
||||||
if err == nil {
|
if err == nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
time.Sleep(interval * time.Second)
|
time.Sleep(interval)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("websocket dial falied: %v", err)
|
return fmt.Errorf("websocket dial falied: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ws.onOpen != nil {
|
if ws.onOpen != nil {
|
||||||
ws.onOpen(ws, isReconnecting)
|
ws.onOpen(ws)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Message Handler
|
// Message Handler
|
||||||
|
|
@ -72,14 +74,12 @@ func (ws *WebSocketClient) Connect(
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ws.ctx.Done():
|
case <-ws.ctx.Done():
|
||||||
// log.Println("websocket receive cancel")
|
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
var payload []byte
|
var payload []byte
|
||||||
if err := websocket.Message.Receive(ws.conn, &payload); err != nil {
|
if err := websocket.Message.Receive(ws.conn, &payload); err != nil {
|
||||||
// log.Println("receive error", err)
|
|
||||||
if ws.onClose != nil {
|
if ws.onClose != nil {
|
||||||
ws.onClose(ws, isReconnecting)
|
ws.onClose(ws)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -91,7 +91,7 @@ func (ws *WebSocketClient) Connect(
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *WebSocketClient) Disconnect(isReconnecting bool) {
|
func (ws *WebSocketClient) Disconnect() {
|
||||||
if ws.conn != nil {
|
if ws.conn != nil {
|
||||||
ws.conn.Close()
|
ws.conn.Close()
|
||||||
}
|
}
|
||||||
|
|
@ -100,16 +100,10 @@ func (ws *WebSocketClient) Disconnect(isReconnecting bool) {
|
||||||
ws.wg.Wait()
|
ws.wg.Wait()
|
||||||
|
|
||||||
if ws.onClose != nil {
|
if ws.onClose != nil {
|
||||||
ws.onClose(ws, isReconnecting)
|
ws.onClose(ws)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *WebSocketClient) Reconnect(url string, attempts int, interval time.Duration) error {
|
|
||||||
ws.Disconnect(true)
|
|
||||||
ws.ctx, ws.cancel = context.WithCancel(context.Background())
|
|
||||||
return ws.Connect(url, attempts, interval, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ws *WebSocketClient) SendJSON(v any) error {
|
func (ws *WebSocketClient) SendJSON(v any) error {
|
||||||
bytes, err := json.Marshal(v)
|
bytes, err := json.Marshal(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue