Guest User

Untitled

a guest
Jul 22nd, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. -module(ggs_table).
  2. -export([
  3. start_link/2,
  4. add_player/2,
  5. remove_player/2,
  6. stop/1,
  7. notify/3,
  8. loop/4,
  9. foo/0
  10. ]).
  11.  
  12. -include_lib("eunit/include/eunit.hrl").
  13.  
  14. %% @doc This module represents a Player with a Socket and a Token
  15.  
  16. % @doc returns a new table
  17. start_link(Token, Socket) ->
  18. GameVM = ggs_gamevm:start_link(),
  19. Pid = spawn_link(?MODULE, loop, [Token, Socket, GameVM, []]),
  20. Pid.
  21.  
  22. % @doc adds a player to a table
  23. add_player(Table, Player) ->
  24. Table ! {add_player, Player},
  25. ok.
  26.  
  27. % @doc removes player form a table
  28. remove_player(Table, Player) ->
  29. Table ! {remove_player, Player},
  30. ok.
  31.  
  32. % @doc stops the table process
  33. stop(Table) ->
  34. Table ! {'EXIT', self(), normal},
  35. ok.
  36.  
  37. % @doc notifies the table with a message from a player
  38. notify(Table, Player, Message) ->
  39. Table ! {notify, Player, Message},
  40. ok.
  41.  
  42. % loop
  43. loop(Token, Socket, GameVM, PlayerList) ->
  44. receive
  45. {add_player, Player} ->
  46. NewPlayerList = list:append(PlayerList, [Player]),
  47. loop(Token, Socket, GameVM, NewPlayerList);
  48.  
  49. {remove_player, Player} ->
  50. NewPlayerList = list:delete(Player, PlayerList),
  51. loop(Token, Socket, GameVM, NewPlayerList);
  52.  
  53. {notify, Player, Message} ->
  54. case Message of
  55. {server, define, Args} ->
  56. ggs_gamevm:define(GameVM, Args),
  57. loop(Token, Socket, GameVM, PlayerList);
  58. {game, Command, Args} ->
  59. ggs_gamevm:user_command(GameVM, Player, Command, Args),
  60. loop(Token, Socket, GameVM, PlayerList);
  61. Any ->
  62. error_logger:info_msg("~p: Unknown message ~p~n", [?MODULE, Any]),
  63. loop(Token, Socket, GameVM, PlayerList)
  64. end
  65. end.
  66.  
  67. % Tests
  68.  
  69. start_link_test() ->
  70. {ok, LSocket} = gen_tcp:listen(7000, [binary, {packet, 0}, {active, false}]),
  71. {ok, Socket} = gen_tcp:accept(LSocket),
  72. ClientToken = "123",
  73. Pid = start_link(ClientToken, Socket),
  74. ?assertNot(Pid =:= undefined).
Add Comment
Please, Sign In to add comment