Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4f956b8fe9 | |||
| 967b8a98b3 |
@@ -259,6 +259,11 @@ func (wsClient *SafeWebsocketClient) connect() error {
|
|||||||
wsClient.cancelFuncs = append(wsClient.cancelFuncs, cancel)
|
wsClient.cancelFuncs = append(wsClient.cancelFuncs, cancel)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
writer, err := conn.NextWriter(websocket.TextMessage)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
@@ -269,21 +274,9 @@ func (wsClient *SafeWebsocketClient) connect() error {
|
|||||||
wsClient.triggerReconnect()
|
wsClient.triggerReconnect()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
messageType := websocket.TextMessage
|
|
||||||
switch data.MessageType {
|
|
||||||
case MessageTypePing:
|
|
||||||
messageType = websocket.PingMessage
|
|
||||||
case MessageTypePong:
|
|
||||||
messageType = websocket.PongMessage
|
|
||||||
case MessageTypeClose:
|
|
||||||
messageType = websocket.CloseMessage
|
|
||||||
}
|
|
||||||
writer, err := conn.NextWriter(messageType)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := writer.Write(data.Data); err != nil {
|
if _, err := writer.Write(data.Data); err != nil {
|
||||||
|
wsClient.triggerReconnect()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -296,6 +289,7 @@ func (wsClient *SafeWebsocketClient) connect() error {
|
|||||||
wsClient.cancelFuncs = append(wsClient.cancelFuncs, cancel)
|
wsClient.cancelFuncs = append(wsClient.cancelFuncs, cancel)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
@@ -309,13 +303,17 @@ func (wsClient *SafeWebsocketClient) connect() error {
|
|||||||
fmt.Printf("error on read deadline: %v\n", err)
|
fmt.Printf("error on read deadline: %v\n", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_, reader, err := conn.NextReader()
|
|
||||||
|
mt, reader, err := conn.NextReader()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Next Reader Closed: %v\n", err)
|
|
||||||
wsClient.triggerReconnect()
|
wsClient.triggerReconnect()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if mt != websocket.TextMessage {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
readerBytes, err := io.ReadAll(reader)
|
readerBytes, err := io.ReadAll(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("io reader failed: %v\n", err)
|
fmt.Printf("io reader failed: %v\n", err)
|
||||||
@@ -356,40 +354,6 @@ func (wsClient *SafeWebsocketClient) startPingTicker(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// func (wsClient *SafeWebsocketClient) startReceiveHandler(ctx context.Context) {
|
|
||||||
// for {
|
|
||||||
// select {
|
|
||||||
// case <-ctx.Done():
|
|
||||||
// log.Println("receive handler stopped")
|
|
||||||
// return
|
|
||||||
// default:
|
|
||||||
// if err := wsClient.mu.ReadHandler(func() error {
|
|
||||||
// conn := wsClient.conn
|
|
||||||
|
|
||||||
// if conn == nil {
|
|
||||||
// wsClient.triggerReconnect()
|
|
||||||
// return fmt.Errorf("connection closed")
|
|
||||||
// }
|
|
||||||
// _, message, err := conn.ReadMessage()
|
|
||||||
// if err != nil {
|
|
||||||
// wsClient.triggerReconnect()
|
|
||||||
// return fmt.Errorf("failed to read message: %v", err)
|
|
||||||
// }
|
|
||||||
// select {
|
|
||||||
// case wsClient.dataChannel <- message:
|
|
||||||
// case <-ctx.Done():
|
|
||||||
// log.Println("Reconnect handler stopped")
|
|
||||||
// default:
|
|
||||||
// log.Println("")
|
|
||||||
// }
|
|
||||||
// return nil
|
|
||||||
// }); err != nil {
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
func (wsClient *SafeWebsocketClient) triggerReconnect() {
|
func (wsClient *SafeWebsocketClient) triggerReconnect() {
|
||||||
select {
|
select {
|
||||||
case wsClient.reconnectCh <- struct{}{}:
|
case wsClient.reconnectCh <- struct{}{}:
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ func main() {
|
|||||||
BasePort(8080).
|
BasePort(8080).
|
||||||
Path("/ws/test/data_1").
|
Path("/ws/test/data_1").
|
||||||
UseTLS(false).
|
UseTLS(false).
|
||||||
|
ChannelSize(30).
|
||||||
Build(ctx)
|
Build(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|||||||
Reference in New Issue
Block a user