Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
16b24cb
feat: Add LootLockerLifecycleManager for centralized service management
kirre-bylund Nov 11, 2025
00e4c0f
refactor: Convert RateLimiter to ILootLockerService architecture
kirre-bylund Nov 11, 2025
423d840
refactor: Integrate HTTPClient with LifecycleManager service architec…
kirre-bylund Nov 11, 2025
363a0bf
feat: Add LootLockerEventSystem for centralized SDK event management
kirre-bylund Nov 11, 2025
6ccd527
feat: Add comprehensive Presence system with WebSocket real-time conn…
kirre-bylund Nov 11, 2025
fffa104
feat: Integrate event system and presence features into LootLockerSDK…
kirre-bylund Nov 11, 2025
79d10c2
refactor: Update editor extensions and endpoints for lifecycle manage…
kirre-bylund Nov 11, 2025
a3c85d3
Apply suggestions from code review
kirre-bylund Nov 12, 2025
41b8aae
fix: Support C# <v8
kirre-bylund Nov 12, 2025
4cf4c4b
fix: Tested working state
kirre-bylund Nov 13, 2025
2f26f88
depr: Remove legacy HTTP Stack completely
kirre-bylund Nov 13, 2025
3e93d8c
fix: Stop event subs from non enabled presence clients
kirre-bylund Nov 14, 2025
229a11c
feat: Delay status update if client is starting
kirre-bylund Nov 14, 2025
c70b22c
fix: Make presence client latency one way instead of round trip'
kirre-bylund Nov 18, 2025
f04fffd
fix: Reduce code duplication in LootLockerEventSystem
kirre-bylund Nov 18, 2025
81c5cdd
refactor: Make presence state change an actual event
kirre-bylund Nov 19, 2025
385fe2f
fix: Rename presence interface to clarify it's meant as overrides
kirre-bylund Nov 19, 2025
7a43036
fix: Simplify presence configuration
kirre-bylund Nov 19, 2025
53defb5
fixes after review
kirre-bylund Nov 19, 2025
eed4b3c
fix: Prettify settings and test
kirre-bylund Nov 19, 2025
9705fe8
feat: Add mini feature - clear player data cache in editor
kirre-bylund Nov 19, 2025
5930365
ci: Add presence tests
kirre-bylund Nov 20, 2025
1d05539
ci: Enable presence in CI
kirre-bylund Nov 20, 2025
fddf409
fix: Fixes after review
kirre-bylund Nov 20, 2025
9430304
f
kirre-bylund Nov 20, 2025
61f8490
Rebase and add command line config
kirre-bylund Nov 20, 2025
2714f46
Fixes after review
kirre-bylund Nov 20, 2025
b13c723
fix: Stop parsing presence cli args if not enabled
kirre-bylund Nov 20, 2025
0004aec
fix: Shore up instance access to avoid null references
kirre-bylund Nov 20, 2025
799a39d
chore: Deduplicate presence manager code
kirre-bylund Nov 21, 2025
41ee229
fix: Reset Player Caches between tests
kirre-bylund Nov 21, 2025
a7b64d8
fix: Check multi user test strings for null or empty
kirre-bylund Nov 21, 2025
d863960
ci: Enable Presence title config for presence tests
kirre-bylund Nov 25, 2025
5c56512
temp: Set only presence tests to run
kirre-bylund Nov 26, 2025
78466f6
fix: Make PresenceClient disconnect using single method
kirre-bylund Nov 26, 2025
ae36cf1
Revert "temp: Set only presence tests to run"
kirre-bylund Nov 26, 2025
e560073
ci: Make presence run less often
kirre-bylund Nov 26, 2025
4f8d1dd
ci: Make rate limiter in tests initialize as gameobject
kirre-bylund Nov 26, 2025
a1395f2
wip: Debug lifecycle init failure in CI
kirre-bylund Nov 26, 2025
7b484de
fix: Use internal subscriber clearing on event system destroy
kirre-bylund Nov 26, 2025
6578ce3
fix: Stop using event system during shut down
kirre-bylund Nov 26, 2025
f196fad
chore: Reduce log level for semi expected errors
kirre-bylund Nov 26, 2025
fa405e8
fix: Take appropriate actions when presence enabled state changes
kirre-bylund Nov 27, 2025
0a9d11d
chore: Cleanup of presence during review
kirre-bylund Nov 27, 2025
21c612e
fix: Format changes after review
kirre-bylund Dec 4, 2025
245f917
fix: Restructure LifecycleManager after review
kirre-bylund Dec 8, 2025
fc4329f
fix: Restructure LootLockerPresenceClient after review
kirre-bylund Dec 8, 2025
d001bf3
fix: Disable warning for compile def. unreachable code
kirre-bylund Dec 8, 2025
80299f1
fix: Stop creating instances when entering playmode
kirre-bylund Dec 8, 2025
ab18602
fix: Null check languages in broadcasts
kirre-bylund Dec 9, 2025
34a566a
fix: Refactor PresenceManager after review
kirre-bylund Dec 9, 2025
ac1587e
fix: Adressed the last remaining review comments
kirre-bylund Dec 9, 2025
ac542ff
fix: Remove Presence compile flag
kirre-bylund Dec 10, 2025
7034eeb
fix: Stop activating player sessions in presence manager
kirre-bylund Dec 11, 2025
8fcb894
fix: Don't active sessions when reading previous player states for re…
kirre-bylund Dec 11, 2025
7b50bd8
fix: Remove unnecessary logging
kirre-bylund Dec 11, 2025
c8d2cf1
chore: Improve presence settings window
kirre-bylund Dec 11, 2025
e65229c
fix: Stop activating player sessions when purely checking cached data
kirre-bylund Dec 11, 2025
9edcc93
fix: Stop activating players when trying to read existing state for data
kirre-bylund Dec 11, 2025
b358e70
feat: Add toggle to disable presence in editor
kirre-bylund Dec 11, 2025
f8229c0
fix: Check active session for default player if empty ulid suplied
kirre-bylund Dec 11, 2025
8a5a54c
ref: Treat isDisposed and isDestroying as connection states in presen…
kirre-bylund Dec 11, 2025
35b0291
feat: Keep presence clients and reconnect and resend status if reacti…
kirre-bylund Dec 12, 2025
cf6fd32
feat: Provide method to make a player active
kirre-bylund Dec 12, 2025
9a11974
fix: Fixes after testing
kirre-bylund Dec 12, 2025
85794ca
Bump version to v7.0.0
kirre-bylund Dec 12, 2025
e4c6c3b
fix: Use default player if no player specified when making requests
kirre-bylund Dec 12, 2025
177461b
Disable WebGL builds until it's been fixed
kirre-bylund Dec 15, 2025
823c9ea
fix: Rename "advanced" presence to "rich" presence
kirre-bylund Dec 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .github/workflows/run-tests-and-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ jobs:
runs-on: [ubuntu-latest]
needs: [editor-smoke-test]
timeout-minutes: 20
if: false && (startsWith(github.ref, 'refs/pull') && endsWith(github.base_ref, 'main')) || startsWith(github.ref, 'refs/tags/v') || (startsWith(github.ref, 'refs/heads') && endsWith(github.ref, 'main'))
if: false && ((startsWith(github.ref, 'refs/pull') && endsWith(github.base_ref, 'main')) || startsWith(github.ref, 'refs/tags/v') || (startsWith(github.ref, 'refs/heads') && endsWith(github.ref, 'main')))
env:
LL_USE_STAGE: false
strategy:
Expand Down Expand Up @@ -465,15 +465,14 @@ jobs:
- name: Enable beta features
run: |
sed -i -e 's/1: LOOTLOCKER_COMMANDLINE_SETTINGS/1: LOOTLOCKER_COMMANDLINE_SETTINGS;${{ VARS.CURRENT_BETA_FEATURES }}/g' TestProject/ProjectSettings/ProjectSettings.asset
- name: Set presence to disabled
run: |
echo "PRESENCE_CONFIG=-enablepresence false -enablepresenceautoconnect false -enablepresenceautodisconnectonfocuschange false" >> $GITHUB_ENV
- name: Set the project to use Newtonsoft json
if: ${{ ENV.JSON_LIBRARY == 'newtonsoft' }}
run: |
sed -i -e 's/1: LOOTLOCKER_COMMANDLINE_SETTINGS/1: LOOTLOCKER_COMMANDLINE_SETTINGS;LOOTLOCKER_USE_NEWTONSOFTJSON/g' TestProject/ProjectSettings/ProjectSettings.asset
sed -i -e 's/"nunit.framework.dll"/"nunit.framework.dll",\n\t\t"Newtonsoft.Json.dll"/g' sdk/Tests/LootLockerTests/PlayMode/PlayModeTests.asmdef
- name: Use Legacy HTTP Stack
if: ${{ ENV.USE_HTTP_EXECUTION_QUEUE == 'false' }}
run: |
sed -i -e 's/1: LOOTLOCKER_COMMANDLINE_SETTINGS/1: LOOTLOCKER_COMMANDLINE_SETTINGS;LOOTLOCKER_LEGACY_HTTP_STACK/g' TestProject/ProjectSettings/ProjectSettings.asset
- name: Set LootLocker to target stage environment
if: ${{ ENV.TARGET_ENVIRONMENT == 'STAGE' }}
run: |
Expand Down Expand Up @@ -520,7 +519,7 @@ jobs:
checkName: Integration tests (${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }}) Test Results
artifactsPath: ${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }}-artifacts
githubToken: ${{ secrets.GITHUB_TOKEN }}
customParameters: -lootlockerurl ${{ ENV.LOOTLOCKER_URL }} ${{ ENV.USER_COMMANDLINE_ARGUMENTS }} ${{ ENV.TEST_CATEGORY }}
customParameters: -lootlockerurl ${{ ENV.LOOTLOCKER_URL }} ${{ ENV.USER_COMMANDLINE_ARGUMENTS }} ${{ ENV.TEST_CATEGORY }} ${{ ENV.PRESENCE_CONFIG }}
useHostNetwork: true
####### CLEANUP ###########
- name: Bring down Go Backend
Expand Down
43 changes: 43 additions & 0 deletions Runtime/Client/ILootLockerService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
namespace LootLocker
{
/// <summary>
/// Interface that all LootLocker services must implement to be managed by the LifecycleManager
/// </summary>
public interface ILootLockerService
{
/// <summary>
/// Initialize the service
/// </summary>
void Initialize();

/// <summary>
/// Reset/cleanup the service state
/// </summary>
void Reset();

/// <summary>
/// Handle application pause events (optional - default implementation does nothing)
/// </summary>
void HandleApplicationPause(bool pauseStatus);

/// <summary>
/// Handle application focus events (optional - default implementation does nothing)
/// </summary>
void HandleApplicationFocus(bool hasFocus);

/// <summary>
/// Handle application quit events
/// </summary>
void HandleApplicationQuit();

/// <summary>
/// Whether the service has been initialized
/// </summary>
bool IsInitialized { get; }

/// <summary>
/// Service name for logging and identification
/// </summary>
string ServiceName { get; }
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Runtime/Client/LootLockerEndPoints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,10 @@ public class LootLockerEndPoints
// Broadcasts
[Header("Broadcasts")]
public static EndPointClass ListBroadcasts = new EndPointClass("broadcasts/v1", LootLockerHTTPMethod.GET);

// Presence (WebSocket)
[Header("Presence")]
public static EndPointClass presenceWebSocket = new EndPointClass("presence/v1", LootLockerHTTPMethod.GET);
}

[Serializable]
Expand Down
Loading
Loading