aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/elm.json3
-rw-r--r--client/src/Client.elm19
-rw-r--r--client/src/Messages.elm4
3 files changed, 18 insertions, 8 deletions
diff --git a/client/elm.json b/client/elm.json
index 4fdc946..aa05ace 100644
--- a/client/elm.json
+++ b/client/elm.json
@@ -6,13 +6,14 @@
"elm-version": "0.19.1",
"dependencies": {
"direct": {
+ "bartavelle/json-helpers": "2.0.2",
"elm/browser": "1.0.2",
"elm/core": "1.0.5",
"elm/html": "1.0.0",
+ "elm/json": "1.1.3",
"elm/url": "1.0.0"
},
"indirect": {
- "elm/json": "1.1.3",
"elm/time": "1.0.0",
"elm/virtual-dom": "1.0.2"
}
diff --git a/client/src/Client.elm b/client/src/Client.elm
index f4247f7..ffb2b0e 100644
--- a/client/src/Client.elm
+++ b/client/src/Client.elm
@@ -2,6 +2,8 @@ port module Client exposing (main)
import Browser
import Html exposing (Html)
+import Json.Decode
+import Messages
import Url exposing (Url)
port webSocketIn : (String -> msg) -> Sub msg
@@ -14,8 +16,8 @@ type Msg
type Model
= Error String
- | JoinRoom
- { id : String
+ | Connecting
+ { roomId : String
}
parseRoomId : Url -> Result String String
@@ -29,8 +31,9 @@ view model = case model of
[ Html.h1 [] [Html.text "Error"]
, Html.p [] [Html.text str]
]
- JoinRoom room ->
- [ Html.h1 [] [Html.text <| "Room " ++ room.id]
+ Connecting state ->
+ [ Html.h1 []
+ [Html.text <| "Connecting to room " ++ state.roomId ++ "..."]
]
subscriptions : Model -> Sub Msg
@@ -40,13 +43,17 @@ update : Msg -> Model -> (Model, Cmd Msg)
update msg model = case msg of
Ignore -> (model, Cmd.none)
Send -> (model, webSocketOut "Hi")
- WebSocketIn str -> Debug.log str (model, Cmd.none)
+ WebSocketIn json ->
+ case Json.Decode.decodeString Messages.jsonDecServerMessage json of
+ Err str -> (Error <| Json.Decode.errorToString str, Cmd.none)
+ Ok Messages.Welcome -> Debug.log "Welcome" (model, Cmd.none)
+ Ok Messages.Bye -> Debug.log "Bye" (model, Cmd.none)
main : Program () Model Msg
main = Browser.application
{ init = \() url key -> case parseRoomId url of
Err str -> (Error <| "Could not parse room ID: " ++ str, Cmd.none)
- Ok roomId -> (JoinRoom {id = roomId}, Cmd.none)
+ Ok roomId -> (Connecting {roomId = roomId}, Cmd.none)
, update = update
, subscriptions = subscriptions
, view = \model -> {title = "Client", body = view model}
diff --git a/client/src/Messages.elm b/client/src/Messages.elm
index da10d22..2510544 100644
--- a/client/src/Messages.elm
+++ b/client/src/Messages.elm
@@ -10,15 +10,17 @@ import Set exposing (Set)
type ServerMessage =
Welcome
+ | Bye
jsonDecServerMessage : Json.Decode.Decoder ( ServerMessage )
jsonDecServerMessage =
- let jsonDecDictServerMessage = Dict.fromList [("Welcome", Welcome)]
+ let jsonDecDictServerMessage = Dict.fromList [("Welcome", Welcome), ("Bye", Bye)]
in decodeSumUnaries "ServerMessage" jsonDecDictServerMessage
jsonEncServerMessage : ServerMessage -> Value
jsonEncServerMessage val =
case val of
Welcome -> Json.Encode.string "Welcome"
+ Bye -> Json.Encode.string "Bye"