diff --git a/ProfileStore.luau b/ProfileStore.luau index 5b196af..e3b577c 100644 --- a/ProfileStore.luau +++ b/ProfileStore.luau @@ -350,6 +350,19 @@ local UpdateQueue = { -- For stability sake, we won't do UpdateAsync calls for t --]] } +local DEFAULTS = { + AUTO_SAVE_PERIOD = 300, + LOAD_REPEAT_PERIOD = 10, + FIRST_LOAD_REPEAT = 5, + SESSION_STEAL = 40, + ASSUME_DEAD = 630, + START_SESSION_TIMEOUT = 120, + CRITICAL_STATE_ERROR_COUNT = 5, + CRITICAL_STATE_ERROR_EXPIRE = 120, + CRITICAL_STATE_EXPIRE = 120, + MAX_MESSAGE_QUEUE = 1000, +} + local function WaitInUpdateQueue(session_token) --> next_in_queue() local is_first = false @@ -937,6 +950,14 @@ local function SaveProfileAsync(profile, is_ending_session, is_overwriting, last end +local function SafeSet(name, v) + if type(v) ~= "number" then + warn(`[{script.Name}]: SetConstant {name} ~> A number was expected, got {typeof(v)}; Resetting to default value of {DEFAULTS[name]}`) + return DEFAULTS[name] + end + return v +end + ----- Public ----- --[[ @@ -1199,39 +1220,32 @@ local ProfileStore: ProfileStoreModule = { OnCriticalToggle = Signal.New(), -- (is_critical) DataStoreState = "NotReady", -- ("NotReady", "NoInternet", "NoAccess", "Access") + _constantSetters = { + AUTO_SAVE_PERIOD = function(v) AUTO_SAVE_PERIOD = SafeSet("AUTO_SAVE_PERIOD", v) end, + LOAD_REPEAT_PERIOD = function(v) LOAD_REPEAT_PERIOD = SafeSet("LOAD_REPEAT_PERIOD", v) end, + FIRST_LOAD_REPEAT = function(v) FIRST_LOAD_REPEAT = SafeSet("FIRST_LOAD_REPEAT", v) end, + SESSION_STEAL = function(v) SESSION_STEAL = SafeSet("SESSION_STEAL", v) end, + ASSUME_DEAD = function(v) ASSUME_DEAD = SafeSet("ASSUME_DEAD", v) end, + START_SESSION_TIMEOUT = function(v) START_SESSION_TIMEOUT = SafeSet("START_SESSION_TIMEOUT", v) end, + CRITICAL_STATE_ERROR_COUNT = function(v) CRITICAL_STATE_ERROR_COUNT = SafeSet("CRITICAL_STATE_ERROR_COUNT", v) end, + CRITICAL_STATE_ERROR_EXPIRE = function(v) CRITICAL_STATE_ERROR_EXPIRE = SafeSet("CRITICAL_STATE_ERROR_EXPIRE", v) end, + CRITICAL_STATE_EXPIRE = function(v) CRITICAL_STATE_EXPIRE = SafeSet("CRITICAL_STATE_EXPIRE", v) end, + MAX_MESSAGE_QUEUE = function(v) MAX_MESSAGE_QUEUE = SafeSet("MAX_MESSAGE_QUEUE", v) end, + }, } ProfileStore.__index = ProfileStore function ProfileStore.SetConstant(name, value) - if type(value) ~= "number" then - error(`[{script.Name}]: Invalid value type`) - end - - if name == "AUTO_SAVE_PERIOD" then - AUTO_SAVE_PERIOD = value - elseif name == "LOAD_REPEAT_PERIOD" then - LOAD_REPEAT_PERIOD = value - elseif name == "FIRST_LOAD_REPEAT" then - FIRST_LOAD_REPEAT = value - elseif name == "SESSION_STEAL" then - SESSION_STEAL = value - elseif name == "ASSUME_DEAD" then - ASSUME_DEAD = value - elseif name == "START_SESSION_TIMEOUT" then - START_SESSION_TIMEOUT = value - elseif name == "CRITICAL_STATE_ERROR_COUNT" then - CRITICAL_STATE_ERROR_COUNT = value - elseif name == "CRITICAL_STATE_ERROR_EXPIRE" then - CRITICAL_STATE_ERROR_EXPIRE = value - elseif name == "CRITICAL_STATE_EXPIRE" then - CRITICAL_STATE_EXPIRE = value - elseif name == "MAX_MESSAGE_QUEUE" then - MAX_MESSAGE_QUEUE = value - else - error(`[{script.Name}]: Invalid constant name was provided`) - end - + error(`[{script.Name}]: Invalid value type`) + end + + local setter = ProfileStore._constantSetters[name] + if setter then + setter(value) + else + error(`[{script.Name}]: Invalid constant name was provided`) + end end function ProfileStore.Test()