46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"tipsy.codes/charles/mc-god/v2/internal/pkg/rcon"
|
|
)
|
|
|
|
func main() {
|
|
// Create a context that will be cancelled on interrupt signals
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
// Set up signal handling for graceful shutdown
|
|
sigChan := make(chan os.Signal, 1)
|
|
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
|
go func() {
|
|
<-sigChan
|
|
log.Println("Received interrupt signal, shutting down...")
|
|
cancel()
|
|
}()
|
|
|
|
// Create RCON client from environment variables
|
|
log.Println("Connecting to Minecraft server via RCON...")
|
|
client, err := rcon.NewFromEnv()
|
|
if err != nil {
|
|
log.Fatalf("Failed to create RCON client: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := client.Close(); err != nil {
|
|
log.Printf("Error closing RCON connection: %v", err)
|
|
}
|
|
}()
|
|
|
|
// Perform a health check
|
|
log.Println("Performing health check...")
|
|
if err := client.HealthCheck(); err != nil {
|
|
log.Fatalf("Health check failed: %v", err)
|
|
}
|
|
log.Println("Connected successfully!")
|
|
}
|