74 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"log"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/gorilla/websocket"
 | 
						|
)
 | 
						|
 | 
						|
type WSConnection struct {
 | 
						|
	url     string
 | 
						|
	conn    *websocket.Conn
 | 
						|
	errChan chan error
 | 
						|
}
 | 
						|
 | 
						|
func (ws *WSConnection) readMessage() {
 | 
						|
	log.Printf("Reading messages")
 | 
						|
	for {
 | 
						|
		_, message, err := ws.conn.ReadMessage()
 | 
						|
		if err != nil {
 | 
						|
			ws.errChan <- err
 | 
						|
			return
 | 
						|
		}
 | 
						|
		log.Printf("Received: %s", message)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (ws *WSConnection) writeMessage(message string) {
 | 
						|
	err := ws.conn.WriteMessage(websocket.TextMessage, []byte(message))
 | 
						|
	if err != nil {
 | 
						|
		log.Printf("Error during message writing: %v", err)
 | 
						|
		ws.errChan <- err
 | 
						|
		return
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (ws *WSConnection) handleError() {
 | 
						|
	for {
 | 
						|
		err := <-ws.errChan
 | 
						|
		log.Println("Error during message reading:", err)
 | 
						|
 | 
						|
		time.Sleep(5 * time.Second)
 | 
						|
		ws.open()
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (ws *WSConnection) open() {
 | 
						|
	log.Printf("Connecting to %s", ws.url)
 | 
						|
	conn, _, err := websocket.DefaultDialer.Dial(ws.url, nil)
 | 
						|
	if err != nil {
 | 
						|
		log.Println("Error during connection:", err)
 | 
						|
		ws.errChan <- err
 | 
						|
		return
 | 
						|
	}
 | 
						|
	log.Printf("Connected")
 | 
						|
	ws.conn = conn
 | 
						|
	ws.errChan = make(chan error)
 | 
						|
	go ws.readMessage()
 | 
						|
	go ws.handleError()
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	log.SetFlags(log.Lmicroseconds)
 | 
						|
 | 
						|
	wsConn := WSConnection{
 | 
						|
		url: "ws://localhost:8080/ws",
 | 
						|
	}
 | 
						|
	wsConn.open()
 | 
						|
	for {
 | 
						|
		log.Printf("zzz...")
 | 
						|
		time.Sleep(30 * time.Second)
 | 
						|
	}
 | 
						|
}
 |