balcony_weather_station/event_proxy/main.go

68 lines
1.4 KiB
Go

package main
import (
"log/slog"
"net"
"os"
)
func main() {
// Initialize JSON logger
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
slog.SetDefault(logger)
addr := "192.168.1.153:8080"
slog.Info("Starting TCP server", "address", addr)
//Resolve address
addr_, err := net.ResolveTCPAddr("tcp", addr)
if err != nil {
slog.Error("Error resolving address", "error", err)
return
}
//Listen for incoming connections
listener, err := net.ListenTCP("tcp", addr_)
if err != nil {
slog.Error("Error starting server", "error", err)
return
}
defer listener.Close()
for {
//Accept incoming connection
conn, err := listener.AcceptTCP()
if err != nil {
slog.Error("Error accepting connection", "error", err)
continue
}
go handleConnection(conn)
}
}
func handleConnection(conn *net.TCPConn) {
defer conn.Close()
slog.Info("New connection", "remote_addr", conn.RemoteAddr().String())
buffer := make([]byte, 1024)
for {
//Read up to 1024 bytes
n, err := conn.Read(buffer)
if err != nil {
slog.Error("Error reading from connection", "error", err)
return
}
if n == 0 {
return
}
slog.Info("Received message", "message", string(buffer[:n]), "bytes", n)
//Echo message back
// _, err = conn.Write(buffer[:n])
_, err = conn.Write([]byte("1"))
if err != nil {
slog.Error("Error writing to connection", "error", err)
return
}
}
}