dfquery

package module
v0.0.0-...-94e6ef3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 26, 2025 License: MIT Imports: 9 Imported by: 0

README

dfquery

dfquery adds query support for Dragonfly servers. To use, replace srv := conf.New() with srv, _ := dfquery.NewServerWithQuery(conf). You can also handle queries directly and modify the returned data by setting OnQueryRequest.

Example

package main

import (
	"fmt"
	"log/slog"
	"os"

	"github.com/df-mc/dragonfly/server"
	"github.com/df-mc/dragonfly/server/player/chat"
	"github.com/gameparrot/dfquery"
	"github.com/pelletier/go-toml"
)

func main() {
	slog.SetLogLoggerLevel(slog.LevelDebug)
	chat.Global.Subscribe(chat.StdoutSubscriber{})
	conf, err := readConfig(slog.Default())
	if err != nil {
		panic(err)
	}

	srv, _ := dfquery.NewServerWithQuery(conf)
	srv.CloseOnProgramEnd()

	srv.Listen()
	for p := range srv.Accept() {
		_ = p
	}
}

// readConfig reads the configuration from the config.toml file, or creates the
// file if it does not yet exist.
func readConfig(log *slog.Logger) (server.Config, error) {
	c := server.DefaultConfig()
	var zero server.Config
	if _, err := os.Stat("config.toml"); os.IsNotExist(err) {
		data, err := toml.Marshal(c)
		if err != nil {
			return zero, fmt.Errorf("encode default config: %v", err)
		}
		if err := os.WriteFile("config.toml", data, 0644); err != nil {
			return zero, fmt.Errorf("create default config: %v", err)
		}
		return c.Config(log)
	}
	data, err := os.ReadFile("config.toml")
	if err != nil {
		return zero, fmt.Errorf("read config: %v", err)
	}
	if err := toml.Unmarshal(data, &c); err != nil {
		return zero, fmt.Errorf("decode config: %v", err)
	}
	return c.Config(log)
}

Documentation

Index

Constants

View Source
const (
	QueryKeyHostName     = "hostname"
	QueryKeyGameType     = "gametype"
	QueryKeyGameID       = "game_id"
	QueryKeyVersion      = "version"
	QueryKeyServerEngine = "server_engine"
	QueryKeyPlugins      = "plugins"
	QueryKeyMap          = "map"
	QueryKeyNumPlayers   = "numplayers"
	QueryKeyMaxPlayers   = "maxplayers"
	QueryKeyWhitelist    = "whitelist"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type DfQuery

type DfQuery struct {
	OnQueryRequest func(addr net.Addr, info map[string]string, players *[]string)
	// contains filtered or unexported fields
}

func NewServerWithQuery

func NewServerWithQuery(c server.Config) (*server.Server, *DfQuery)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL