eco-pro / elm-phoenix-ports / Phoenix.Channel

A channel declares which topic should be joined, registers event handlers and has various callbacks for possible lifecycle events.

Definition


type alias Channel msg =
PhoenixChannel msg

Representation of a Phoenix Channel


type alias Topic =
String

Topic of channel

Helpers

init : Topic -> Channel msg

Initialize a channel to a given topic.

init "room:lobby"

withPayload : Json.Decode.Value -> Channel msg -> Channel msg

Attach a payload to the join message. You can use this to submit e.g. a user id or authentication infos. This will be the second argument in your join/3 callback on the server.

payload =
    Json.Encode.object [("user_id", "123")]

init "room:lobby"
    |> withPayload payload

on : String -> (Json.Decode.Value -> msg) -> Channel msg -> Channel msg

Register an event handler for a event.

type Msg = NewMsg Value | ...

init "roomy:lobby"
    |> on "new_msg" NewMsg

onJoin : (Json.Decode.Value -> msg) -> Channel msg -> Channel msg

Set a callback which will be called after you sucessfully joined the channel. It will also be called after you rejoined the channel after a disconnect unless you specified an onRejoin handler.

type Msg =
    IsOnline Json.Encode.Value | ...

init "room:lobby"
    |> onJoin IsOnline

onRequestJoin : msg -> Channel msg -> Channel msg

Set a callback which will be called after you request to join the channel.

type Msg =
    JoinLobbyRequested

init "room:lobby"
    |> onRequestJoin JoinLobbyRequested

onJoinError : (Json.Decode.Value -> msg) -> Channel msg -> Channel msg

Set a callback which will be called if the server declined your request to join the channel.

type Msg =
    CouldNotJoin Json.Encode.Value | ...

init "room:lobby"
    |> onJoinError CouldNotJoin

Note: If a channel declined a request to join a topic the effect manager won_t try again.

onError : msg -> Channel msg -> Channel msg

Set a callback which will be called if the channel process on the server crashed. The effect manager will automatically rejoin the channel after a crash.

type Msg =
     ChannelCrashed | ...

init "room:lobby"
    |> onError ChannelCrashed

onLeave : (Json.Decode.Value -> msg) -> Channel msg -> Channel msg

Set a callback which will be called after you sucessfully left a channel.

type Msg =
    LeftLobby Json.Encode.Value | ...

init "room:lobby"
    |> onLeave LeftLobby

onLeaveError : (Json.Decode.Value -> msg) -> Channel msg -> Channel msg

Set a callback which will be called if the server declined your request to left a channel. _(It seems that Phoenix v1.2 doesn_t send this)_

withDebug : Channel msg -> Channel msg

Print all status changes.

withPresence : Phoenix.Presence.Presence msg -> Channel msg -> Channel msg

Set a callback which will be called when there is a change in the presence state caused by "presence_state" and "presence_diff" events.

type Msg =
    PresenceChange (Dict String (List Json.Encode.Value)) | ...

init "room:lobby"
    |> onPresenceChange PresenceChange

map : (a -> b) -> Channel a -> Channel b

Composes each callback with the function a -> b.