Skip to content

MRegterschot/GbxRemoteGo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GbxRemoteGo

A package for interacting with the XML-RPC protocol of Trackmania servers.

Installation

Install GbxRemoteGo with Go's package manager

go get github.com/MRegterschot/GbxRemoteGo

Usage/Examples

package main

import (
	"fmt"
	"os"

	"github.com/MRegterschot/GbxRemoteGo/events"
	. "github.com/MRegterschot/GbxRemoteGo/gbxclient"
)

func main() {
	// Create a new GbxClient
	client := NewGbxClient(Options{})

	// Register event handlers
	onConnectionChan := make(chan any)
	client.Events.On("connect", onConnectionChan)
	go handleConnect(onConnectionChan)

	onDisconnectChan := make(chan any)
	client.Events.On("disconnect", onDisconnectChan)
	go handleDisconnect(onDisconnectChan)

	// Connect to the server
	if err := client.Connect("127.0.0.1", 5000); err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	if err := client.SetApiVersion("2023-04-24"); err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	if err := client.EnableCallbacks(true); err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	if err := client.Authenticate("SuperAdmin", "SuperAdmin"); err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	// Register gbx callback handlers
	client.OnPlayerConnect = append(client.OnPlayerConnect, func(client *GbxClient, args events.PlayerConnectEventArgs) {
		fmt.Println("Player connected:", args.Login)
	})

	client.OnPlayerCheckpoint = append(client.OnPlayerCheckpoint, func(client *GbxClient, args events.PlayerCheckpointEventArgs) {
		fmt.Println("Player checkpoint:", args)
	})

	client.OnAnyCallback = append(client.OnAnyCallback, func(client *GbxClient, args CallbackEventArgs) {
		fmt.Println("Any callback:", args)
	})

	select {}
}

func handleConnect(eventChan chan any) {
	for {
		select {
		case event := <-eventChan:
			if connected, ok := event.(bool); ok {
				if connected {
					fmt.Println("Connected")
				} else {
					fmt.Println("Not Connected")
				}
			} else {
				fmt.Println("Invalid event type for connect.")
			}
		}
	}
}

func handleDisconnect(eventChan chan any) {
	for {
		select {
		case event := <-eventChan:
			if msg, ok := event.(string); ok {
				fmt.Println(msg)
			} else {
				fmt.Println("Invalid event type for disconnect.")
			}
		}
	}
}

About

A package for interacting with the XML-RPC protocol of Trackmania servers.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages