Packages
game_server_sdk
0.1.0
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/lobbies.ex
defmodule GameServer.Lobbies do
@moduledoc """
Context module for lobby management: creating, updating, listing and searching lobbies.
This module contains the core domain operations; more advanced membership and
permission logic will be added in follow-up tasks.
## Usage
# Create a lobby (returns {:ok, lobby} | {:error, changeset})
{:ok, lobby} = GameServer.Lobbies.create_lobby(%{name: "fun-room", title: "Fun Room", host_id: host_id})
# List public lobbies (paginated/filterable)
lobbies = GameServer.Lobbies.list_lobbies(%{}, page: 1, page_size: 25)
# Join and leave
{:ok, user} = GameServer.Lobbies.join_lobby(user, lobby.id)
{:ok, _} = GameServer.Lobbies.leave_lobby(user)
# Get current lobby members
members = GameServer.Lobbies.get_lobby_members(lobby)
# Subscribe to global or per-lobby events
:ok = GameServer.Lobbies.subscribe_lobbies()
:ok = GameServer.Lobbies.subscribe_lobby(lobby.id)
## PubSub Events
This module broadcasts the following events:
- `"lobbies"` topic (global lobby list changes):
- `{:lobby_created, lobby}` - a new lobby was created
- `{:lobby_updated, lobby}` - a lobby was updated
- `{:lobby_deleted, lobby_id}` - a lobby was deleted
- `"lobby:<lobby_id>"` topic (per-lobby membership changes):
- `{:user_joined, lobby_id, user_id}` - a user joined the lobby
- `{:user_left, lobby_id, user_id}` - a user left the lobby
- `{:user_kicked, lobby_id, user_id}` - a user was kicked from the lobby
- `{:lobby_updated, lobby}` - the lobby settings were updated
- `{:host_changed, lobby_id, new_host_id}` - the host changed (e.g., after host leaves)
**Note:** This is an SDK stub. Calling these functions will raise an error.
The actual implementation runs on the GameServer.
"""
@doc """
"""
@spec get_lobby(integer() | String.t()) :: GameServer.Lobbies.Lobby.t() | nil
def get_lobby(_id) do
raise "GameServer.Lobbies.get_lobby/1 is a stub - only available at runtime on GameServer"
end
@doc """
Gets all users currently in a lobby.
Returns a list of User structs.
## Examples
iex> get_lobby_members(lobby)
[%User{}, %User{}]
iex> get_lobby_members(lobby_id)
[%User{}]
"""
@spec get_lobby_members(GameServer.Lobbies.Lobby.t() | integer() | String.t()) :: [
GameServer.Accounts.User.t()
]
def get_lobby_members(_lobby_id) do
raise "GameServer.Lobbies.get_lobby_members/1 is a stub - only available at runtime on GameServer"
end
@doc """
List lobbies. Accepts optional search filters.
## Filters
* `:title` - Filter by title (partial match)
* `:is_passworded` - boolean or string 'true'/'false' (omit for any)
* `:is_locked` - boolean or string 'true'/'false' (omit for any)
* `:min_users` - Filter lobbies with max_users >= value
* `:max_users` - Filter lobbies with max_users <= value
* `:metadata_key` - Filter by metadata key
* `:metadata_value` - Filter by metadata value (requires metadata_key)
## Options
See `t:GameServer.Types.lobby_list_opts/0` for available options.
"""
@spec list_lobbies(map(), GameServer.Types.lobby_list_opts()) :: [GameServer.Lobbies.Lobby.t()]
def list_lobbies(_filters, _opts) do
raise "GameServer.Lobbies.list_lobbies/2 is a stub - only available at runtime on GameServer"
end
@doc """
Creates a new lobby.
## Attributes
See `t:GameServer.Types.lobby_create_attrs/0` for available fields.
"""
@spec create_lobby(GameServer.Types.lobby_create_attrs()) ::
{:ok, GameServer.Lobbies.Lobby.t()} | {:error, Ecto.Changeset.t() | term()}
def create_lobby(_attrs) do
raise "GameServer.Lobbies.create_lobby/1 is a stub - only available at runtime on GameServer"
end
@doc """
Updates an existing lobby.
## Attributes
See `t:GameServer.Types.lobby_update_attrs/0` for available fields.
"""
@spec update_lobby(GameServer.Lobbies.Lobby.t(), GameServer.Types.lobby_update_attrs()) ::
{:ok, GameServer.Lobbies.Lobby.t()} | {:error, Ecto.Changeset.t() | term()}
def update_lobby(_lobby, _attrs) do
raise "GameServer.Lobbies.update_lobby/2 is a stub - only available at runtime on GameServer"
end
@doc """
"""
@spec delete_lobby(GameServer.Lobbies.Lobby.t()) ::
{:ok, GameServer.Lobbies.Lobby.t()} | {:error, Ecto.Changeset.t() | term()}
def delete_lobby(_lobby) do
raise "GameServer.Lobbies.delete_lobby/1 is a stub - only available at runtime on GameServer"
end
@doc """
"""
@spec join_lobby(
GameServer.Accounts.User.t(),
GameServer.Lobbies.Lobby.t() | integer() | String.t(),
map() | keyword()
) :: {:ok, GameServer.Accounts.User.t()} | {:error, term()}
def join_lobby(_user, _lobby_arg, _opts) do
raise "GameServer.Lobbies.join_lobby/3 is a stub - only available at runtime on GameServer"
end
@doc """
"""
@spec leave_lobby(GameServer.Accounts.User.t()) :: {:ok, term()} | {:error, term()}
def leave_lobby(_user) do
raise "GameServer.Lobbies.leave_lobby/1 is a stub - only available at runtime on GameServer"
end
@doc """
Kick a user from a lobby. Only the host can kick users.
Returns {:ok, user} on success, {:error, reason} on failure.
"""
@spec kick_user(
GameServer.Accounts.User.t(),
GameServer.Lobbies.Lobby.t(),
GameServer.Accounts.User.t()
) :: {:ok, GameServer.Accounts.User.t()} | {:error, term()}
def kick_user(_arg1, _lobby, _arg3) do
raise "GameServer.Lobbies.kick_user/3 is a stub - only available at runtime on GameServer"
end
@doc """
Subscribe to global lobby events (lobby created, updated, deleted).
"""
@spec subscribe_lobbies() :: :ok | {:error, term()}
def subscribe_lobbies() do
raise "GameServer.Lobbies.subscribe_lobbies/0 is a stub - only available at runtime on GameServer"
end
@doc """
Subscribe to a specific lobby's events (membership changes, updates).
"""
@spec subscribe_lobby(integer()) :: :ok | {:error, term()}
def subscribe_lobby(_lobby_id) do
raise "GameServer.Lobbies.subscribe_lobby/1 is a stub - only available at runtime on GameServer"
end
end