Packages
game_server_sdk
1.0.979
1.0.1082
1.0.1079
1.0.1078
1.0.1077
1.0.1076
1.0.1075
1.0.1074
1.0.1073
1.0.1070
1.0.1068
1.0.1067
1.0.1063
1.0.1059
1.0.1058
1.0.1057
1.0.1056
1.0.1055
1.0.1050
1.0.1049
1.0.1048
1.0.1047
1.0.1046
1.0.1044
1.0.1043
1.0.1042
1.0.1041
1.0.1040
1.0.1039
1.0.1038
1.0.1034
1.0.1033
1.0.1029
1.0.1028
1.0.1026
1.0.1025
1.0.1024
1.0.1023
1.0.1022
1.0.1021
1.0.1020
1.0.1019
1.0.1018
1.0.1017
1.0.1016
1.0.1015
1.0.1014
1.0.1013
1.0.1012
1.0.1011
1.0.1009
1.0.1008
1.0.1007
1.0.1006
1.0.1005
1.0.1004
1.0.1003
1.0.1001
1.0.999
1.0.998
1.0.997
1.0.996
1.0.995
1.0.994
1.0.993
1.0.992
1.0.991
1.0.990
1.0.989
1.0.988
1.0.987
1.0.986
1.0.985
1.0.984
1.0.983
1.0.982
1.0.981
1.0.980
1.0.979
1.0.978
1.0.977
1.0.976
1.0.975
1.0.974
1.0.973
1.0.972
1.0.971
1.0.970
1.0.969
1.0.968
1.0.967
1.0.966
1.0.965
1.0.964
1.0.963
1.0.962
1.0.961
1.0.959
1.0.958
1.0.956
1.0.951
1.0.950
1.0.943
1.0.942
1.0.941
1.0.940
1.0.938
1.0.936
1.0.935
1.0.931
1.0.929
1.0.928
1.0.927
1.0.926
1.0.925
1.0.924
1.0.923
1.0.921
1.0.920
1.0.919
1.0.918
1.0.917
1.0.916
1.0.911
1.0.910
1.0.902
1.0.899
1.0.898
1.0.897
1.0.896
1.0.894
1.0.893
1.0.891
1.0.890
1.0.889
1.0.888
1.0.887
1.0.886
1.0.885
1.0.884
1.0.883
1.0.882
1.0.881
1.0.880
1.0.879
1.0.878
1.0.877
1.0.26
1.0.25
1.0.22
1.0.21
1.0.20
1.0.19
1.0.15
1.0.14
1.0.13
1.0.12
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.1.0
SDK for GameServer hooks development. Provides type specs, documentation, and IDE autocomplete for GameServer modules without requiring the full server.
Current section
Files
Jump to
Current section
Files
game_server_sdk
README.md
README.md
# GameServer SDK
SDK for GameServer hooks development. This package provides type specs, documentation,
and IDE autocomplete for GameServer modules without requiring the full server.
## Installation
Add `game_server_sdk` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:game_server_sdk, "~> 0.1.0", runtime: false, optional: true}
]
end
```
## Usage
This SDK provides stub modules that match the GameServer API:
### Core Modules
- `GameServer.Accounts` - User account management (registration, login, profile updates, metadata)
- `GameServer.Lobbies` - Lobby management (create, join, leave, kick, host transfer)
- `GameServer.Groups` - Group management (create, join, leave, invite, promote/demote, join requests)
- `GameServer.Parties` - Ephemeral party management (create, invite, lobby integration)
- `GameServer.Leaderboards` - Leaderboard operations (submit scores, rankings, seasonal resets)
- `GameServer.Friends` - Friend relationships and blocking (send/accept/decline requests, block/unblock)
- `GameServer.Notifications` - In-app notification delivery (friend requests, group invites, system alerts)
- `GameServer.KV` - Generic key/value storage (server-side persistent storage for game data)
- `GameServer.Schedule` - Dynamic cron-like job scheduling for hooks
### Behaviour & Types
- `GameServer.Hooks` - Hook behaviour for custom game logic (lifecycle callbacks, RPC functions)
- `GameServer.Types` - Shared types used across GameServer contexts
### Implementing Hooks
Create your hooks module using `use GameServer.Hooks` to get default implementations
for all callbacks, then override only the ones you need:
```elixir
defmodule MyGame.Hooks do
use GameServer.Hooks
@impl true
def after_user_register(user) do
# Give new users starting coins
GameServer.Accounts.update_user(user, %{
metadata: Map.put(user.metadata || %{}, "coins", 100)
})
end
@impl true
def before_group_create(user, attrs) do
# Check if user has enough coins to create a group
coins = get_in(user.metadata, ["coins"]) || 0
if coins >= 50, do: {:ok, attrs}, else: {:error, :not_enough_coins}
end
@impl true
def before_lobby_join(user, lobby, opts) do
# Check level requirements
{:ok, {user, lobby, opts}}
end
# Custom RPC - callable from game clients
def give_coins(amount, _opts) do
caller = GameServer.Hooks.caller_user()
coins = get_in(caller.metadata, ["coins"]) || 0
GameServer.Accounts.update_user(caller, %{
metadata: Map.put(caller.metadata, "coins", coins + amount)
})
end
end
```
### Module APIs
The SDK modules provide the same API as the real GameServer:
```elixir
# Get user by ID (returns nil if not found)
user = GameServer.Accounts.get_user(user_id)
# Update user metadata
{:ok, user} = GameServer.Accounts.update_user(user, %{metadata: %{level: 5}})
# Submit leaderboard score
{:ok, record} = GameServer.Leaderboards.submit_score(leaderboard_id, user_id, 1000)
# Get lobby members
members = GameServer.Lobbies.get_lobby_members(lobby)
```
## Note
This SDK only provides type specifications and documentation for IDE support.
The actual implementations run on the GameServer - these stubs will raise
`RuntimeError` if called directly.