summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/Update')
-rw-r--r--src/Update/AddPlayer.elm24
-rw-r--r--src/Update/HandleServerReply.elm61
-rw-r--r--src/Update/RefreshBattles.elm28
-rw-r--r--src/Update/StoreParams.elm18
4 files changed, 126 insertions, 5 deletions
diff --git a/src/Update/AddPlayer.elm b/src/Update/AddPlayer.elm
new file mode 100644
index 0000000..ed9da4a
--- /dev/null
+++ b/src/Update/AddPlayer.elm
@@ -0,0 +1,24 @@
+module Update.AddPlayer exposing (apply_to)
+
+-- Elm -------------------------------------------------------------------------
+import Array
+
+-- Extension -------------------------------------------------------------------
+import Struct.Event
+import Struct.Flags
+import Struct.Model
+import Struct.Player
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))
+apply_to model =
+ (
+ {model | players = (Array.push (Struct.Player.default) model.players)},
+ Cmd.none
+ )
diff --git a/src/Update/HandleServerReply.elm b/src/Update/HandleServerReply.elm
index 271ecfb..b80c7b4 100644
--- a/src/Update/HandleServerReply.elm
+++ b/src/Update/HandleServerReply.elm
@@ -1,12 +1,14 @@
module Update.HandleServerReply exposing (apply_to)
-- Elm -------------------------------------------------------------------------
+import Array
+
import Http
--- Shared ----------------------------------------------------------------------
-import Struct.Flags
+-- Extension -------------------------------------------------------------------
+import Comm.GetBattles
--- Main Menu -------------------------------------------------------------------
+import Struct.BattleSummary
import Struct.Error
import Struct.Event
import Struct.Model
@@ -20,6 +22,55 @@ import Struct.ServerReply
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
+handle_set_battles : (
+ (
+ (List Struct.BattleSummary.Type),
+ (List Struct.BattleSummary.Type),
+ (List Struct.BattleSummary.Type)
+ ) ->
+ (Struct.Model.Type, (List (Cmd Struct.Event.Type))) ->
+ (Struct.Model.Type, (List (Cmd Struct.Event.Type)))
+ )
+handle_set_battles battles current_state =
+ let
+ (model, cmds) = current_state
+ (campaigns, invasions, events) = battles
+ in
+ case (Array.get model.query_index model.players) of
+ Nothing -> current_state -- TODO: error
+ (Just player) ->
+ let
+ updated_player =
+ (Struct.Player.set_battles
+ campaigns
+ invasions
+ events
+ player
+ )
+ updated_model =
+ {model |
+ players =
+ (Array.set
+ model.query_index
+ updated_player
+ model.players
+ ),
+ query_index = (model.query_index + 1),
+ notify =
+ (
+ model.notify
+ || (Struct.Player.has_active_battles updated_player)
+ )
+ }
+ in
+ case (Array.get updated_model.query_index model.players) of
+ Nothing -> ({updated_model| query_index = -1}, cmds)
+
+ (Just next_player) ->
+ case (Comm.GetBattles.try updated_model next_player) of
+ Nothing -> ({updated_model| query_index = -1}, cmds)
+ (Just query) -> (updated_model, (query :: cmds))
+
apply_command : (
Struct.ServerReply.Type ->
(Struct.Model.Type, (List (Cmd Struct.Event.Type))) ->
@@ -28,6 +79,10 @@ apply_command : (
apply_command command current_state =
case command of
Struct.ServerReply.Okay -> current_state
+ (Struct.ServerReply.SetID str) -> current_state -- TODO
+ (Struct.ServerReply.SetUsername str) -> current_state -- TODO
+ (Struct.ServerReply.SetBattles battles) ->
+ (handle_set_battles battles current_state)
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
diff --git a/src/Update/RefreshBattles.elm b/src/Update/RefreshBattles.elm
new file mode 100644
index 0000000..2ff739f
--- /dev/null
+++ b/src/Update/RefreshBattles.elm
@@ -0,0 +1,28 @@
+module Update.RefreshBattles exposing (apply_to)
+
+-- Elm -------------------------------------------------------------------------
+import Array
+
+-- Extension -------------------------------------------------------------------
+import Comm.GetBattles
+
+import Struct.Event
+import Struct.Flags
+import Struct.Model
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))
+apply_to model =
+ case (Array.get 0 model.players) of
+ Nothing -> (model, Cmd.none)
+ (Just player) ->
+ case (Comm.GetBattles.try model player) of
+ -- TODO: Invalidate only this player, refresh the others.
+ Nothing -> (model, Cmd.none)
+ (Just cmd) -> ({model | query_index = 0}, cmd)
diff --git a/src/Update/StoreParams.elm b/src/Update/StoreParams.elm
index 3955ecd..f369be8 100644
--- a/src/Update/StoreParams.elm
+++ b/src/Update/StoreParams.elm
@@ -1,13 +1,17 @@
module Update.StoreParams exposing (apply_to)
-- Elm -------------------------------------------------------------------------
+import Array
--- Login -----------------------------------------------------------------------
+import Json.Encode
+
+-- Extension -------------------------------------------------------------------
import Action.Ports
import Struct.Event
import Struct.Flags
import Struct.Model
+import Struct.Player
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
@@ -20,5 +24,15 @@ apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))
apply_to model =
(
model,
- (Action.Ports.store_params (5, ""))
+ (Action.Ports.store_params
+ (
+ (Struct.Flags.get_frequency model.flags),
+ (Json.Encode.encode
+ 0
+ (Json.Encode.list
+ (List.map (Struct.Player.encode) (Array.toList model.players))
+ )
+ )
+ )
+ )
)