This repository has been archived on 2025-08-18. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
GGS/src/ggs_table.erl

57 lines
No EOL
1.6 KiB
Erlang

-module(ggs_table).
-export([
start_link/1,
add_player/2,
remove_player/2,
stop/2,
notify/3
]).
%% @doc This module represents a Player with a Socket and a Token
% @doc returns a new table
start_link(Token, Socket) ->
spawn_link(fun(Token, Socket) ->
GameVM = ggs_gamevm:start_link();
loop(Token, Socket, GameVM, [])
).
% @doc adds a player to a table
add_player(Table, Player) ->
ggs_logger:not_implemented().
% @doc removes player form a table
remove_player(Table, Player) ->
ggs_logger:not_implemented().
% @doc stops the table process
stop(Table) ->
Table ! {'EXIT', self(), normal}
% @doc notifies the table with a message from a player
notify(Table, Player, Message) ->
Table ! {notify, Player, Message}.
% loop
loop(Token, Socket, GameVM, PlayerList) ->
receive
{add_player, Player} ->
NewPlayerList = list:append(PlayerList, [Player]),
loop(Token, Socket, GameVM, NewPlayerList);
{remove_player, Player} ->
NewPlayerList = list:delete(Player, PlayerList),
loop(Token, Socket, GameVM, NewPlayerList);
{notify, Player, Message} ->
case Message of
{server, define, Args} ->
ggs_gamevm:define(GameVM, Args),
loop(Token, Socket, GameVM, PlayerList);
{game, Command, Args} ->
ggs_gamevm:user_command(GameVM, Player, Command, Args),
loop(Token, Socket, GameVM, PlayerList);
end
end.
% private helpers