diff --git a/internal/service/dev_tools/connections.go b/internal/service/dev_tools/connections.go index 453d686..87f32e0 100644 --- a/internal/service/dev_tools/connections.go +++ b/internal/service/dev_tools/connections.go @@ -51,7 +51,7 @@ func (c *connections) CreateRoom(ctx context.Context, token string, name string) GameID: info.GameID, CreatorID: info.UserID, Connections: []uuid.UUID{info.UserID}, - CreatedAt: time.Now().Unix(), + CreatedAt: time.Now(), } room.RoomCode = utills.GenerateRoomCode(room.ID) @@ -235,20 +235,30 @@ func (c *connections) GetRoomsConnectionUrls(ctx context.Context, token string) } }() + if len(room.ExistsServers) != 0 { + return nil, nil + } + uniqueServerType := make(map[string]types.ConnectionServer) + uniqueServers := make(map[uuid.UUID]types.Server) uniqueAllTypes := make(map[string]struct{}) + for _, server := range servers { - connNum, exists, err := server.GetConnectionsNum(ctx, token) - if err != nil { - c.logger.Error().Err(err).Msg("server error create room") + uniqueServers[server.ID] = server + } + + for _, server := range uniqueServers { + if _, ok := uniqueServerType[server.ServerType]; ok { continue } - if server.MaxConnections < connNum+len(room.Connections) && exists { + connNum, exists, err := server.GetConnectionsNum(ctx, token) + if err != nil { + c.logger.Error().Err(err).Msg("server error create room") continue } - if _, ok := uniqueServerType[server.ServerType]; ok { + if server.MaxConnections < connNum+len(room.Connections) || !exists { continue } diff --git a/internal/start/multiplatform.go b/internal/start/multiplatform.go index 6327bdd..80f67df 100644 --- a/internal/start/multiplatform.go +++ b/internal/start/multiplatform.go @@ -58,7 +58,7 @@ func Multiplayer(logger zerolog.Logger) { devToolsServerService := devtools.NewServerService(accessGameService, gameStorage, serverStorage, token, &logger) devToolsGameConfigs := devtools.NewGameConfigs(accessGameService, gameConfigStorage, token, &logger) - go connectionsScheduler.RoomCleaner(context.Background(), time.Minute*15, 300) + go connectionsScheduler.RoomCleaner(context.Background(), time.Minute*15, 0) services := []transport.Option{ transport.MaxBodySize(10 * 1024 * 1024), diff --git a/internal/storage/defalult_data/servers.go b/internal/storage/defalult_data/servers.go index 7a2d90f..b5bdb80 100644 --- a/internal/storage/defalult_data/servers.go +++ b/internal/storage/defalult_data/servers.go @@ -16,6 +16,7 @@ var ( Region: "europe", IsActive: true, AscenmmoServer: true, + MaxConnections: 8000, } defaultServerWebsocket = types.Server{ @@ -27,6 +28,7 @@ var ( Region: "europe", IsActive: true, AscenmmoServer: true, + MaxConnections: 8000, } defaultServerTCP = types.Server{ @@ -38,6 +40,7 @@ var ( Region: "europe", IsActive: true, AscenmmoServer: true, + MaxConnections: 8000, } ) diff --git a/internal/storage/servers.go b/internal/storage/servers.go index 22af16a..8f67922 100644 --- a/internal/storage/servers.go +++ b/internal/storage/servers.go @@ -2,6 +2,7 @@ package storage import ( "context" + "github.com/ascenmmo/multiplayer-game-servers/internal/errors" defalultdata "github.com/ascenmmo/multiplayer-game-servers/internal/storage/defalult_data" "github.com/ascenmmo/multiplayer-game-servers/pkg/multiplayer/types" "github.com/google/uuid" @@ -55,6 +56,10 @@ func (d *serversStorage) FindByIDs(serversIDs []uuid.UUID) (servers []types.Serv return nil, err } + if len(servers) == 0 { + return nil, errors.ErrServerCreatingRoomAllServesOffError + } + return servers, nil } diff --git a/pkg/multiplayer/types/room.go b/pkg/multiplayer/types/room.go index 232009b..f2cd0e1 100644 --- a/pkg/multiplayer/types/room.go +++ b/pkg/multiplayer/types/room.go @@ -2,6 +2,7 @@ package types import ( "github.com/google/uuid" + "time" ) type Room struct { @@ -17,8 +18,8 @@ type Room struct { Servers []uuid.UUID `json:"servers" bson:"servers"` ExistsServers []uuid.UUID `json:"existsServers" bson:"existsServers"` - IsExists bool `json:"isExists" bson:"isExists"` - CreatedAt int64 `json:"createdAt" bson:"createdAt"` + IsExists bool `json:"isExists" bson:"isExists"` + CreatedAt time.Time `json:"createdAt" bson:"createdAt"` } func (r *Room) RemoveConnectionID(id uuid.UUID) { diff --git a/pkg/multiplayer/types/server.go b/pkg/multiplayer/types/server.go index a9f2c04..e263190 100644 --- a/pkg/multiplayer/types/server.go +++ b/pkg/multiplayer/types/server.go @@ -60,6 +60,7 @@ func (s *Server) IsExists(ctx context.Context, token string) (bool, error) { s.ServerType = settings.ServerType s.ConnectionPort = settings.ConnectionPort s.IsActive = true + s.MaxConnections = settings.MaxConnections return s.IsActive, err }