Files
services/minecraft/handler/minecraft.go
Asim Aslam 420f0706b0 add a ping service (#372)
* add a ping service

* add examples and public api file

* add minecraft server ping
2022-02-14 15:05:28 +00:00

43 lines
948 B
Go

package handler
import (
"context"
"github.com/iverly/go-mcping/mcping"
"github.com/micro/micro/v3/service/errors"
pb "github.com/micro/services/minecraft/proto"
)
type Minecraft struct{}
func (m *Minecraft) Ping(ctx context.Context, req *pb.PingRequest, rsp *pb.PingResponse) error {
if len(req.Address) == 0 {
return errors.BadRequest("minecraft.ping", "missing address")
}
pinger := mcping.NewPinger()
resp, err := pinger.Ping(req.Address, 25565)
if err != nil {
return err
}
var samples []*pb.PlayerSample
for _, sample := range resp.Sample {
samples = append(samples, &pb.PlayerSample{
Uuid: sample.UUID,
Name: sample.Name,
})
}
rsp.Latency = uint32(resp.Latency)
rsp.Players = int32(resp.PlayerCount.Online)
rsp.MaxPlayers = int32(resp.PlayerCount.Max)
rsp.Protocol = int32(resp.Protocol)
rsp.Favicon = resp.Favicon
rsp.Motd = resp.Motd
rsp.Version = resp.Version
rsp.Sample = samples
return nil
}