converge/cmd/wstotcp/wstotcp.go

87 lines
1.6 KiB
Go

package main
import (
"fmt"
"log"
"net"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
var tcpConn net.Conn
func main() {
// Connect to TCP server
var err error
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()
// Set up WebSocket handler
http.HandleFunc("/ws", handleWebSocket)
// Start HTTP server
fmt.Println("WebSocket server listening on :8000")
log.Fatal(http.ListenAndServe(":8000", nil))
}
func handleWebSocket(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println("Error upgrading to WebSocket:", err)
return
}
defer conn.Close()
waitChannel := make(chan bool)
// Read message from WebSocket
go func() {
defer func() {
waitChannel <- true
}()
for {
_, message, err := conn.ReadMessage()
if err != nil {
log.Println("Error reading WebSocket message:", err)
return
}
_, err = tcpConn.Write(message)
if err != nil {
log.Println("Error sending message to TCP server:", err)
return
}
}
}()
go func() {
defer func() {
waitChannel <- true
}()
for {
buffer := make([]byte, 1024)
n, err := tcpConn.Read(buffer)
if err != nil {
log.Println("Error reading from TCP server:", err)
return
}
err = conn.WriteMessage(websocket.TextMessage, buffer[:n])
if err != nil {
log.Println("Error writing WebSocket message:", err)
return
}
}
}()
<-waitChannel
log.Println("Connection closed")
}