1
9
10 package openapi
11
12 import (
13 "context"
14 "fmt"
15 "net/http"
16
17 "go.formulabun.club/functional/array"
18 "go.formulabun.club/functional/strings"
19 "go.formulabun.club/srb2kart/network"
20 )
21
22
23
24
25 type DefaultApiService struct {
26 Target string
27 }
28
29
30 func NewDefaultApiService(target string) DefaultApiServicer {
31 return &DefaultApiService{target}
32 }
33
34
35 func (s *DefaultApiService) FilesGet(ctx context.Context) (ImplResponse, error) {
36 files, err := network.TellAllFilesNeeded(s.Target)
37 if err != nil {
38 return Response(500, err), err
39 }
40
41 for i, f := range files {
42
43 files[i] = f[:len(f)-1]
44 }
45 return Response(http.StatusOK, files), nil
46 }
47
48
49 func (s *DefaultApiService) PlayerinfoGet(ctx context.Context) (ImplResponse, error) {
50 _, playerInfo, err := network.AskInfo(s.Target)
51
52 if err != nil {
53 return Response(500, err), err
54 }
55
56 existingNodes := array.Filter(playerInfo, func(player network.PlayerInfo) bool {
57 return player.Node != 255
58 })
59 players := array.Map(existingNodes, func(player network.PlayerInfo) PlayerInfoEntry {
60 return PlayerInfoEntry{
61 player.Node,
62 strings.SafeNullTerminated(player.Name[:]),
63 strings.Join(array.Map(player.Address[:], func(v uint8) string { return fmt.Sprint(v) }), "."),
64 player.Team,
65 player.Skin,
66 player.Data,
67 player.Score,
68 player.TimeInServer,
69 }
70 })
71
72 return Response(http.StatusOK, PlayerInfo(players)), nil
73 }
74
75
76 func (s *DefaultApiService) ServerinfoGet(ctx context.Context) (ImplResponse, error) {
77 i, _, err := network.AskInfo(s.Target)
78
79 if err != nil {
80 return Response(500, err), err
81 }
82
83 resp := ServerInfo{
84 i.PacketVersion,
85 strings.SafeNullTerminated(i.Application[:]),
86 i.Version,
87 i.Subversion,
88 i.NumberOfPlayer,
89 i.MaxPlayer,
90 i.Gametype,
91 i.ModifiedGame > 0,
92 i.CheatsEnabled > 0,
93 i.KartVars,
94 i.FileNeededNum,
95 i.Time,
96 i.LevelTime,
97 strings.SafeNullTerminated(i.ServerName[:]),
98 strings.SafeNullTerminated(i.MapName[:]),
99 strings.SafeNullTerminated(i.MapTitle[:]),
100 i.MapMd5,
101 i.ActNum,
102 i.IsZone > 0,
103 strings.SafeNullTerminated(i.HttpSource[:]),
104 []FileNeededInner{},
105 }
106
107 return Response(http.StatusOK, resp), nil
108 }
109
View as plain text