package main import ( "cidebug/pkg/iowrappers" "fmt" "github.com/gorilla/websocket" "io" "log" "net" "net/http" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func main() { // Connect to TCP server // Set up WebSocket handler http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { tcpConn, err := net.Dial("tcp", "localhost:2222") // Replace with your TCP server address if err != nil { log.Fatal("Error connecting to TCP server:", err) } defer tcpConn.Close() handleWebSocket(w, r, tcpConn) }) // Start HTTP server fmt.Println("WebSocket server listening on :8000") log.Fatal(http.ListenAndServe(":8000", nil)) } func handleWebSocket(w http.ResponseWriter, r *http.Request, tcpConn net.Conn) { conn, err := upgrader.Upgrade(w, r, nil) wsConn := iowrappers.NewWebSocketConn(conn) if err != nil { log.Println("Error upgrading to WebSocket:", err) return } defer wsConn.Close() waitChannel := make(chan bool) // Read message from WebSocket go func() { defer func() { waitChannel <- true }() _, err := io.Copy(tcpConn, wsConn) if err != nil { log.Printf("Error occurred %v", err) } }() go func() { defer func() { waitChannel <- true }() _, err := io.Copy(wsConn, tcpConn) if err != nil { log.Printf("Error occurred %v", err) } }() <-waitChannel log.Println("Connection closed") }