summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-12-10 18:49:05 +0100
committernsensfel <SpamShield0@noot-noot.org>2018-12-10 18:49:05 +0100
commitbf88fff4463697c20fa664852486278771189d35 (patch)
tree15e92b4452551e4abbf53496348f758546c05d02 /src/battle
parentb9860582e2334213572d2100d2e047d0ad219702 (diff)
Working on the creation of invasions.
Diffstat (limited to 'src/battle')
-rw-r--r--src/battle/query/btl_join.erl129
-rw-r--r--src/battle/query/btl_load.erl2
-rw-r--r--src/battle/struct/btl_character_turn_request.erl4
-rw-r--r--src/battle/struct/btl_player.erl9
4 files changed, 136 insertions, 8 deletions
diff --git a/src/battle/query/btl_join.erl b/src/battle/query/btl_join.erl
new file mode 100644
index 0000000..8ecb609
--- /dev/null
+++ b/src/battle/query/btl_join.erl
@@ -0,0 +1,129 @@
+-module(btl_join).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-include("../../../include/yaws_api.hrl").
+
+-type mode() :: (attack | defend | {invalid, binary()}).
+
+-record
+(
+ input,
+ {
+ player_id :: shr_player:id(),
+ session_token :: binary(),
+ mode :: mode(),
+ size :: non_neg_integer(),
+ roster_ixs :: list(non_neg_integer()),
+ map_id :: string()
+ }
+).
+
+-record
+(
+ query_state,
+ {
+ battle :: btl_battle:type()
+ }
+).
+
+-type input() :: #input{}.
+-type query_state() :: #query_state{}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export([out/1]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec parse_input (binary()) -> input().
+parse_input (Req) ->
+ JSONReqMap = jiffy:decode(Req, [return_maps]),
+ PlayerID = maps:get(<<"pid">>, JSONReqMap),
+ SessionToken = maps:get(<<"stk">>, JSONReqMap),
+
+ Mode =
+ case maps:get(<<"m">>, JSONReqMap) of
+ <<"a">> -> attack;
+ <<"b">> -> defend;
+ V -> {invalid, V}
+ end,
+
+ true = ((Mode == attack) or (Mode == defend)),
+
+ Size =
+ case maps:get(<<"s">>, JSONReqMap) of
+ <<"s">> -> 8;
+ <<"m">> -> 16;
+ <<"l">> -> 24;
+ _ -> 0
+ end,
+
+ Roster = maps:get(<<"r">>, JSONReqMap),
+ MapID = maps:get(<<"map_id">>, JSONReqMap),
+
+ #input
+ {
+ player_id = PlayerID,
+ session_token = SessionToken,
+ mode = Mode,
+ size = Size,
+ roster_ixs = Roster,
+ map_id = MapID
+ }.
+
+-spec authenticate_user (input()) -> ('ok' | 'error').
+authenticate_user (Input) ->
+ PlayerID = Input#input.player_id,
+ SessionToken = Input#input.session_token,
+
+ Player = shr_timed_cache:fetch(player_db, any, PlayerID),
+
+ case shr_security:credentials_match(SessionToken, Player) of
+ true -> ok;
+ _ -> error
+ end.
+
+-spec fetch_data (input()) -> query_state().
+fetch_data (Input) ->
+ PlayerID = Input#input.player_id,
+ BattleID = Input#input.battle_id,
+
+ Battle = shr_timed_cache:fetch(battle_db, PlayerID, BattleID),
+
+ #query_state
+ {
+ battle = Battle
+ }.
+
+
+-spec generate_reply(query_state(), input()) -> binary().
+generate_reply (QueryState, Input) ->
+
+ Output.
+
+-spec handle (binary()) -> binary().
+handle (Req) ->
+ Input = parse_input(Req),
+ case authenticate_user(Input) of
+ ok ->
+ shr_security:lock_queries(Input#input.player_id),
+ QueryState = fetch_data(Input),
+ shr_security:unlock_queries(Input#input.player_id),
+ generate_reply(QueryState, Input);
+
+ error -> jiffy:encode([shr_disconnected:generate()])
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+out(A) ->
+ {
+ content,
+ "application/json; charset=UTF-8",
+ handle(A#arg.clidata)
+ }.
diff --git a/src/battle/query/btl_load.erl b/src/battle/query/btl_load.erl
index cbcc3b5..bbc9a3f 100644
--- a/src/battle/query/btl_load.erl
+++ b/src/battle/query/btl_load.erl
@@ -9,7 +9,7 @@
(
input,
{
- player_id :: btl_player:id(),
+ player_id :: shr_player:id(),
session_token :: binary(),
battle_id :: binary()
}
diff --git a/src/battle/struct/btl_character_turn_request.erl b/src/battle/struct/btl_character_turn_request.erl
index a4f310d..c8508e2 100644
--- a/src/battle/struct/btl_character_turn_request.erl
+++ b/src/battle/struct/btl_character_turn_request.erl
@@ -13,7 +13,7 @@
(
type,
{
- player_id :: btl_player:id(),
+ player_id :: shr_player:id(),
session_token :: binary(),
battle_id :: binary(),
character_ix :: non_neg_integer(),
@@ -68,7 +68,7 @@ decode (Map) ->
actions = Actions
}.
--spec get_player_id (type()) -> btl_player:id().
+-spec get_player_id (type()) -> shr_player:id().
get_player_id (Request) -> Request#type.player_id.
-spec get_session_token (type()) -> binary().
diff --git a/src/battle/struct/btl_player.erl b/src/battle/struct/btl_player.erl
index 1cb1d93..cedd9e7 100644
--- a/src/battle/struct/btl_player.erl
+++ b/src/battle/struct/btl_player.erl
@@ -3,14 +3,13 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--type id() :: binary().
-record
(
player,
{
ix :: non_neg_integer(),
- id :: id(),
+ id :: shr_player:id(),
character_ix :: non_neg_integer(),
timeline :: list(any()),
is_active :: boolean()
@@ -19,7 +18,7 @@
-opaque type() :: #player{}.
--export_type([type/0, id/0]).
+-export_type([type/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -56,7 +55,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec get_id (type()) -> id().
+-spec get_id (type()) -> shr_player:id().
get_id (Player) -> Player#player.id.
-spec get_index (type()) -> non_neg_integer().
@@ -86,7 +85,7 @@ add_to_timeline (NewEvents, Player) ->
-spec reset_timeline (type()) -> type().
reset_timeline (Player) -> Player#player{ timeline = [] }.
--spec new (non_neg_integer(), non_neg_integer(), id()) -> type().
+-spec new (non_neg_integer(), non_neg_integer(), shr_player:id()) -> type().
new (IX, CharacterIX, ID) ->
#player
{