package main import ( "cidebug/pkg/iowrappers" "github.com/gorilla/websocket" "io" "log" "net" ) func handleConnection(tcpConn net.Conn, wsURL string) { defer tcpConn.Close() conn, _, err := websocket.DefaultDialer.Dial(wsURL, nil) wsConn := iowrappers.NewWebSocketConn(conn) if err != nil { log.Println("WebSocket connection error:", err) return } defer wsConn.Close() waitChannel := make(chan bool) go func() { defer func() { waitChannel <- true }() _, err = io.Copy(tcpConn, wsConn) if err != nil { log.Printf("error %v", err) } }() go func() { defer func() { waitChannel <- true }() _, err = io.Copy(wsConn, tcpConn) log.Printf("Error %v", err) }() <-waitChannel } func main() { tcpPort := "7000" wsURL := "ws://localhost:8000/ws" // Replace with your WebSocket server URL listener, err := net.Listen("tcp", ":"+tcpPort) if err != nil { log.Fatal(err) } defer listener.Close() log.Printf("TCP server listening on port %s", tcpPort) log.Printf("Forwarding connections to WebSocket server at %s", wsURL) for { conn, err := listener.Accept() if err != nil { log.Println(err) continue } go handleConnection(conn, wsURL) } }