Packages
game_server_sdk
1.0.1070
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
lib/game_server/jobs.ex
defmodule GameServer.Jobs do
@moduledoc ~S"""
Durable background jobs, backed by Oban.
Use this from your hooks to run work that must survive a restart, retry on
failure, or happen later — things `GameServer.Async` (best-effort, in-memory)
cannot guarantee.
Jobs are persisted in the same database as the rest of your data (Postgres or
SQLite), executed with retries and backoff, and observable from the admin
panel.
## Enqueue a hook to run in the background
# Run `on_welcome_email` now, retried on failure
GameServer.Jobs.enqueue_hook(:on_welcome_email, %{"user_id" => user.id})
# Run it in 24 hours (delayed job)
GameServer.Jobs.enqueue_in(24 * 60 * 60, :on_trial_reminder, %{"user_id" => user.id})
The callback receives the args map you passed. **Args are stored as JSON**, so
keys come back as strings and values must be JSON-encodable:
def on_welcome_email(%{"user_id" => user_id}) do
# ...
:ok
end
Returning `{:error, reason}` from the callback makes the job retry with
backoff; `:ok`/`{:ok, _}` completes it.
## Recurring work
For cron-like recurring jobs use `GameServer.Schedule` (also durable, built on
top of this module).
## RPC safety
Any hook enqueued through `enqueue_hook/3` is automatically protected from
client RPC — a client cannot invoke a job callback directly.
**Note:** This is an SDK stub. Calling these functions will raise an error.
The actual implementation runs on the GameServer.
"""
@type args() :: map()
@doc ~S"""
Cancel a pending job by its id (from `enqueue_hook/3` or `enqueue_in/4`).
"""
@spec cancel(integer()) :: :ok
def cancel(_job_id) do
case Application.get_env(:game_server_sdk, :stub_mode, :raise) do
:placeholder ->
:ok
_ ->
raise "GameServer.Jobs.cancel/1 is a stub - only available at runtime on GameServer"
end
end
@doc ~S"""
Enqueue a hook function to run in the background.
Returns `{:ok, job_id}` — pass `job_id` to `cancel/1` to cancel it while it is
still pending. See the module doc for the callback contract.
"""
@spec enqueue_hook(atom(), args(), keyword()) :: {:ok, integer()} | {:error, term()}
def enqueue_hook(_hook_fn, _args, _opts) do
case Application.get_env(:game_server_sdk, :stub_mode, :raise) do
:placeholder ->
{:ok, nil}
_ ->
raise "GameServer.Jobs.enqueue_hook/3 is a stub - only available at runtime on GameServer"
end
end
@doc ~S"""
Enqueue a hook function to run after `seconds`.
Returns `{:ok, job_id}`; cancel it with `cancel/1` before it runs.
"""
@spec enqueue_in(non_neg_integer(), atom(), args(), keyword()) :: {:ok, integer()} | {:error, term()}
def enqueue_in(_seconds, _hook_fn, _args, _opts) do
case Application.get_env(:game_server_sdk, :stub_mode, :raise) do
:placeholder ->
{:ok, nil}
_ ->
raise "GameServer.Jobs.enqueue_in/4 is a stub - only available at runtime on GameServer"
end
end
end