Skip to content

Commit 9f03f96

Browse files
authored
Merge pull request #10 from ascenmmo/stage
Stage
2 parents fae8c67 + 72463b7 commit 9f03f96

18 files changed

+168
-115
lines changed

internal/handler/tcp/server_settings.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"github.com/ascenmmo/udp-server/internal/utils"
77
"github.com/ascenmmo/udp-server/pkg/api/types"
88
"github.com/ascenmmo/udp-server/pkg/errors"
9-
"github.com/google/uuid"
109
)
1110

1211
type ServerSettings struct {
@@ -45,12 +44,12 @@ func (r *ServerSettings) CreateRoom(ctx context.Context, token string, createRoo
4544
if limited {
4645
return errors.ErrTooManyRequests
4746
}
48-
err = r.server.CreateRoom(token)
47+
err = r.server.CreateRoom(token, createRoom)
4948
return
5049
}
5150

52-
func (r *ServerSettings) SetNotifyServer(ctx context.Context, token string, id uuid.UUID, url string) (err error) {
53-
return
51+
func (r *ServerSettings) GetDeletedRooms(ctx context.Context, token string, ids []types.GetDeletedRooms) (deletedIds []types.GetDeletedRooms, err error) {
52+
return r.server.GetDeletedRooms(token, ids)
5453
}
5554

5655
func NewServerSettings(rateLimit utils.RateLimit, server service.Service) *ServerSettings {

internal/service/service.go

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ import (
1010
"github.com/ascenmmo/udp-server/pkg/errors"
1111
"github.com/google/uuid"
1212
"github.com/rs/zerolog"
13+
"time"
1314
)
1415

1516
type Service interface {
1617
GetConnectionsNum() (countConn int, exists bool)
17-
CreateRoom(token string) error
18+
CreateRoom(token string, room types.CreateRoomRequest) error
1819
GetUsersAndMessage(ds connection.DataSender, req []byte) (users []types.User, msg []byte, err error)
1920
RemoveUser(ds connection.DataSender, userID uuid.UUID) (err error)
21+
GetDeletedRooms(token string, ids []types.GetDeletedRooms) (deletedIds []types.GetDeletedRooms, err error)
2022
}
2123

2224
type service struct {
@@ -37,7 +39,7 @@ func (s *service) GetConnectionsNum() (countConn int, exists bool) {
3739

3840
return count, true
3941
}
40-
func (s *service) CreateRoom(token string) error {
42+
func (s *service) CreateRoom(token string, room types.CreateRoomRequest) error {
4143
clientInfo, err := s.token.ParseToken(token)
4244
if err != nil {
4345
return err
@@ -53,7 +55,7 @@ func (s *service) CreateRoom(token string) error {
5355
s.setRoom(clientInfo, &types.Room{
5456
GameID: clientInfo.GameID,
5557
RoomID: clientInfo.RoomID,
56-
})
58+
}, room.RoomTTl)
5759

5860
return nil
5961
}
@@ -97,6 +99,33 @@ func (s *service) RemoveUser(ds connection.DataSender, userID uuid.UUID) (err er
9799
return nil
98100
}
99101

102+
func (s *service) GetDeletedRooms(token string, ids []types.GetDeletedRooms) (deletedIds []types.GetDeletedRooms, err error) {
103+
info, err := s.token.ParseToken(token)
104+
if err != nil {
105+
return nil, err
106+
}
107+
108+
roomsWithKey := make(map[string]types.GetDeletedRooms)
109+
for _, id := range ids {
110+
info.GameID = id.GameID
111+
info.RoomID = id.RoomID
112+
roomsWithKey[utils.GenerateRoomKey(info)] = id
113+
}
114+
115+
for k, _ := range roomsWithKey {
116+
_, ok := s.storage.GetData(k)
117+
if !ok {
118+
delete(roomsWithKey, k)
119+
}
120+
}
121+
122+
for _, v := range roomsWithKey {
123+
deletedIds = append(deletedIds, v)
124+
}
125+
126+
return deletedIds, nil
127+
}
128+
100129
func (s *service) setNewUser(ds connection.DataSender, req []byte) (clientInfo *tokentype.Info, err error) {
101130
token := string(req)
102131

@@ -115,7 +144,7 @@ func (s *service) setNewUser(ds connection.DataSender, req []byte) (clientInfo *
115144
GameID: clientInfo.GameID,
116145
RoomID: clientInfo.RoomID,
117146
}
118-
s.setRoom(*clientInfo, room)
147+
s.setRoom(*clientInfo, room, 0)
119148
} else {
120149
room, ok = roomData.(*types.Room)
121150
if !ok {
@@ -175,8 +204,12 @@ func (s *service) getRoomByClientInfo(clientInfo tokentype.Info) (room *types.Ro
175204
return room, nil
176205
}
177206

178-
func (s *service) setRoom(clientInfo tokentype.Info, room *types.Room) {
207+
func (s *service) setRoom(clientInfo tokentype.Info, room *types.Room, ttl time.Duration) {
179208
roomKey := utils.GenerateRoomKey(clientInfo)
209+
if ttl != 0 {
210+
s.storage.SetDataWithTTL(roomKey, room, ttl)
211+
return
212+
}
180213
s.storage.SetData(roomKey, room)
181214
}
182215

internal/storage/memory_db.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
type IMemoryDB interface {
1010
GetData(key string) (any, bool)
1111
SetData(key string, value any)
12+
SetDataWithTTL(key string, value any, ttl time.Duration)
1213
Remove(key string)
1314

1415
AddConnection(id string)
@@ -54,6 +55,11 @@ func (db *MemoryDb) SetData(key string, value any) {
5455
db.userData.count++
5556
}
5657

58+
func (db *MemoryDb) SetDataWithTTL(key string, value any, ttl time.Duration) {
59+
db.userData.storage.Store(key, &rowType{value: value, usedAt: time.Now().Add(ttl)})
60+
db.userData.count++
61+
}
62+
5763
func (db *MemoryDb) AddConnection(id string) {
5864
db.connections.storage.Store(id, &rowType{value: id, usedAt: time.Now()})
5965
db.connections.count++

pkg/api/server_settings.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ package api
1111
import (
1212
"context"
1313
"github.com/ascenmmo/udp-server/pkg/api/types"
14-
"github.com/google/uuid"
1514
)
1615

1716
// ServerSettings
@@ -32,6 +31,6 @@ type ServerSettings interface {
3231
// @tg summary=`CreateRoom`
3332
CreateRoom(ctx context.Context, token string, createRoom types.CreateRoomRequest) (err error)
3433
// @tg http-headers=token|Token
35-
// @tg summary=`SetNotifyServer`
36-
SetNotifyServer(ctx context.Context, token string, id uuid.UUID, url string) (err error)
34+
// @tg summary=`GetDeletedRooms`
35+
GetDeletedRooms(ctx context.Context, token string, ids []types.GetDeletedRooms) (deletedIds []types.GetDeletedRooms, err error)
3736
}

pkg/api/types/network.go

Lines changed: 0 additions & 4 deletions
This file was deleted.

pkg/api/types/server_settings.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package types
2+
3+
import (
4+
"github.com/google/uuid"
5+
"time"
6+
)
7+
8+
type CreateRoomRequest struct {
9+
RoomTTl time.Duration `json:"roomTTl"`
10+
}
11+
12+
type GetDeletedRooms struct {
13+
GameID uuid.UUID `json:"gameID"`
14+
RoomID uuid.UUID `json:"roomID"`
15+
}

pkg/clients/udpGameServer/serversettings-exchange.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
// GENERATED BY 'T'ransport 'G'enerator. DO NOT EDIT.
22
package udpGameServer
33

4-
import (
5-
"github.com/ascenmmo/udp-server/pkg/api/types"
6-
"github.com/google/uuid"
7-
)
4+
import "github.com/ascenmmo/udp-server/pkg/api/types"
85

96
type requestServerSettingsGetConnectionsNum struct {
107
Token string `json:"token"`
@@ -39,11 +36,11 @@ type requestServerSettingsCreateRoom struct {
3936
// Formal exchange type, please do not delete.
4037
type responseServerSettingsCreateRoom struct{}
4138

42-
type requestServerSettingsSetNotifyServer struct {
43-
Token string `json:"token"`
44-
Id uuid.UUID `json:"id"`
45-
Url string `json:"url"`
39+
type requestServerSettingsGetDeletedRooms struct {
40+
Token string `json:"token"`
41+
Ids []types.GetDeletedRooms `json:"ids"`
4642
}
4743

48-
// Formal exchange type, please do not delete.
49-
type responseServerSettingsSetNotifyServer struct{}
44+
type responseServerSettingsGetDeletedRooms struct {
45+
DeletedIds []types.GetDeletedRooms `json:"deletedIds"`
46+
}

pkg/clients/udpGameServer/serversettings-fallback.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ type fallbackServerSettings interface {
66
HealthCheck(err error) bool
77
GetServerSettings(err error) bool
88
CreateRoom(err error) bool
9-
SetNotifyServer(err error) bool
9+
GetDeletedRooms(err error) bool
1010
}

pkg/clients/udpGameServer/serversettings-jsonrpc.go

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"github.com/ascenmmo/udp-server/pkg/api/types"
88
"github.com/ascenmmo/udp-server/pkg/clients/udpGameServer/hasher"
99
"github.com/ascenmmo/udp-server/pkg/clients/udpGameServer/jsonrpc"
10-
"github.com/google/uuid"
1110
)
1211

1312
type ClientServerSettings struct {
@@ -18,7 +17,7 @@ type retServerSettingsGetConnectionsNum = func(countConn int, exists bool, err e
1817
type retServerSettingsHealthCheck = func(exists bool, err error)
1918
type retServerSettingsGetServerSettings = func(settings types.Settings, err error)
2019
type retServerSettingsCreateRoom = func(err error)
21-
type retServerSettingsSetNotifyServer = func(err error)
20+
type retServerSettingsGetDeletedRooms = func(deletedIds []types.GetDeletedRooms, err error)
2221

2322
func (cli *ClientServerSettings) GetConnectionsNum(ctx context.Context, token string) (countConn int, exists bool, err error) {
2423

@@ -238,20 +237,19 @@ func (cli *ClientServerSettings) ReqCreateRoom(ctx context.Context, callback ret
238237
return
239238
}
240239

241-
func (cli *ClientServerSettings) SetNotifyServer(ctx context.Context, token string, id uuid.UUID, url string) (err error) {
240+
func (cli *ClientServerSettings) GetDeletedRooms(ctx context.Context, token string, ids []types.GetDeletedRooms) (deletedIds []types.GetDeletedRooms, err error) {
242241

243-
request := requestServerSettingsSetNotifyServer{
244-
Id: id,
242+
request := requestServerSettingsGetDeletedRooms{
243+
Ids: ids,
245244
Token: token,
246-
Url: url,
247245
}
248-
var response responseServerSettingsSetNotifyServer
246+
var response responseServerSettingsGetDeletedRooms
249247
var rpcResponse *jsonrpc.ResponseRPC
250248
cacheKey, _ := hasher.Hash(request)
251-
rpcResponse, err = cli.rpc.Call(ctx, "serversettings.setnotifyserver", request)
249+
rpcResponse, err = cli.rpc.Call(ctx, "serversettings.getdeletedrooms", request)
252250
var fallbackCheck func(error) bool
253251
if cli.fallbackServerSettings != nil {
254-
fallbackCheck = cli.fallbackServerSettings.SetNotifyServer
252+
fallbackCheck = cli.fallbackServerSettings.GetDeletedRooms
255253
}
256254
if rpcResponse != nil && rpcResponse.Error != nil {
257255
if cli.errorDecoder != nil {
@@ -263,28 +261,27 @@ func (cli *ClientServerSettings) SetNotifyServer(ctx context.Context, token stri
263261
if err = cli.proceedResponse(ctx, err, cacheKey, fallbackCheck, rpcResponse, &response); err != nil {
264262
return
265263
}
266-
return err
264+
return response.DeletedIds, err
267265
}
268266

269-
func (cli *ClientServerSettings) ReqSetNotifyServer(ctx context.Context, callback retServerSettingsSetNotifyServer, token string, id uuid.UUID, url string) (request RequestRPC) {
267+
func (cli *ClientServerSettings) ReqGetDeletedRooms(ctx context.Context, callback retServerSettingsGetDeletedRooms, token string, ids []types.GetDeletedRooms) (request RequestRPC) {
270268

271269
request = RequestRPC{rpcRequest: &jsonrpc.RequestRPC{
272270
ID: jsonrpc.NewID(),
273271
JSONRPC: jsonrpc.Version,
274-
Method: "serversettings.setnotifyserver",
275-
Params: requestServerSettingsSetNotifyServer{
276-
Id: id,
272+
Method: "serversettings.getdeletedrooms",
273+
Params: requestServerSettingsGetDeletedRooms{
274+
Ids: ids,
277275
Token: token,
278-
Url: url,
279276
},
280277
}}
281278
if callback != nil {
282-
var response responseServerSettingsSetNotifyServer
279+
var response responseServerSettingsGetDeletedRooms
283280
request.retHandler = func(err error, rpcResponse *jsonrpc.ResponseRPC) {
284281
cacheKey, _ := hasher.Hash(request.rpcRequest.Params)
285282
var fallbackCheck func(error) bool
286283
if cli.fallbackServerSettings != nil {
287-
fallbackCheck = cli.fallbackServerSettings.SetNotifyServer
284+
fallbackCheck = cli.fallbackServerSettings.GetDeletedRooms
288285
}
289286
if rpcResponse != nil && rpcResponse.Error != nil {
290287
if cli.errorDecoder != nil {
@@ -293,7 +290,7 @@ func (cli *ClientServerSettings) ReqSetNotifyServer(ctx context.Context, callbac
293290
err = fmt.Errorf(rpcResponse.Error.Message)
294291
}
295292
}
296-
callback(cli.proceedResponse(ctx, err, cacheKey, fallbackCheck, rpcResponse, &response))
293+
callback(response.DeletedIds, cli.proceedResponse(ctx, err, cacheKey, fallbackCheck, rpcResponse, &response))
297294
}
298295
}
299296
return

0 commit comments

Comments
 (0)