add: rcon implementation
This commit is contained in:
92
cmd/mcgod/main.go
Normal file
92
cmd/mcgod/main.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"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!")
|
||||
|
||||
// Example usage of various RCON functions
|
||||
log.Println("Executing sample commands...")
|
||||
|
||||
// Get server info
|
||||
info, err := client.GetServerInfo()
|
||||
if err != nil {
|
||||
log.Printf("Failed to get server info: %v", err)
|
||||
} else {
|
||||
log.Printf("Server info: %s", info)
|
||||
}
|
||||
|
||||
// Set weather to clear
|
||||
if err := client.SetWeather("clear"); err != nil {
|
||||
log.Printf("Failed to set weather: %v", err)
|
||||
} else {
|
||||
log.Println("Weather set to clear")
|
||||
}
|
||||
|
||||
// Set time to day
|
||||
if err := client.SetTime("day"); err != nil {
|
||||
log.Printf("Failed to set time: %v", err)
|
||||
} else {
|
||||
log.Println("Time set to day")
|
||||
}
|
||||
|
||||
// Set difficulty to normal
|
||||
if err := client.SetDifficulty("normal"); err != nil {
|
||||
log.Printf("Failed to set difficulty: %v", err)
|
||||
} else {
|
||||
log.Println("Difficulty set to normal")
|
||||
}
|
||||
|
||||
// Example of executing a custom command
|
||||
response, err := client.ExecuteWithTimeout("list", 5*time.Second)
|
||||
if err != nil {
|
||||
log.Printf("Failed to execute 'list' command: %v", err)
|
||||
} else {
|
||||
log.Printf("Players list response: %s", response)
|
||||
}
|
||||
|
||||
// Keep the application running until interrupted
|
||||
log.Println("MC God is now running. Press Ctrl+C to stop.")
|
||||
<-ctx.Done()
|
||||
|
||||
log.Println("MC God stopped gracefully.")
|
||||
}
|
||||
Reference in New Issue
Block a user