@@ -4,12 +4,14 @@ effect module Phoenix where { command = MyCmd, subscription = MySub } exposing (
4
4
5
5
This package makes it easy to connect to Phoenix Channels, but in a more declarative manner than the Phoenix Socket Javascript library. Simply provide a `Socket` and a list of `Channel`s you want to join and this library handles the tedious parts like opening a connection, joining channels, reconnecting after a network error and registering event handlers.
6
6
7
-
8
7
#Connect with Phoenix
9
8
@docs connect
10
9
10
+
11
11
# Push messages
12
+
12
13
@docs push
14
+
13
15
-}
14
16
15
17
import Json.Encode as Encode exposing (Value )
@@ -54,6 +56,7 @@ type MySub msg
54
56
connect socket [channel]
55
57
56
58
**Note**: An empty channel list keeps the socket connection open.
59
+
57
60
-}
58
61
connect : Socket msg -> List (Channel msg ) -> Sub msg
59
62
connect socket channels =
@@ -79,8 +82,8 @@ type MyCmd msg
79
82
80
83
push "ws://localhost:4000/socket/websocket" message
81
84
82
-
83
85
**Note**: The message will be queued until you successfully joined a channel to the topic of the message.
86
+
84
87
-}
85
88
push : String -> Push msg -> Cmd msg
86
89
push endpoint push_ =
@@ -118,7 +121,7 @@ type alias Message =
118
121
type alias State msg =
119
122
{ sockets : InternalSocketsDict msg
120
123
, channels : InternalChannelsDict msg
121
- , selfCallbacks : Dict Ref ( SelfCallback msg)
124
+ , selfCallbacks : SelfCallbackDict msg
122
125
, channelQueues : ChannelQueuesDict msg
123
126
}
124
127
@@ -147,6 +150,10 @@ type alias ChannelQueuesDict msg =
147
150
Dict Endpoint ( Dict Topic ( List ( Message , Maybe ( SelfCallback msg) )))
148
151
149
152
153
+ type alias SelfCallbackDict msg =
154
+ Dict ( Ref , Endpoint ) ( SelfCallback msg)
155
+
156
+
150
157
type alias Callback msg =
151
158
Value -> msg
152
159
@@ -372,7 +379,7 @@ updateChannels channels state =
372
379
{ state | channels = channels }
373
380
374
381
375
- updateSelfCallbacks : Dict Ref ( SelfCallback msg ) -> State msg -> State msg
382
+ updateSelfCallbacks : SelfCallbackDict msg -> State msg -> State msg
376
383
updateSelfCallbacks selfCallbacks state =
377
384
{ state | selfCallbacks = selfCallbacks }
378
385
@@ -389,15 +396,15 @@ insertSocket endpoint socket state =
389
396
}
390
397
391
398
392
- insertSelfCallback : Ref -> Maybe (SelfCallback msg ) -> State msg -> State msg
393
- insertSelfCallback ref maybeSelfCb state =
399
+ insertSelfCallback : ( Ref , Endpoint ) -> Maybe (SelfCallback msg ) -> State msg -> State msg
400
+ insertSelfCallback ( ref, endpoint ) maybeSelfCb state =
394
401
case maybeSelfCb of
395
402
Nothing ->
396
403
state
397
404
398
405
Just selfCb ->
399
406
{ state
400
- | selfCallbacks = Dict . insert ref selfCb state. selfCallbacks
407
+ | selfCallbacks = Dict . insert ( ref, endpoint ) selfCb state. selfCallbacks
401
408
}
402
409
403
410
@@ -633,20 +640,20 @@ onSelfMsg router selfMsg state =
633
640
Task . succeed state
634
641
635
642
636
- handleSelfcallback : Platform .Router msg (Msg msg ) -> Endpoint -> Message -> Dict Ref ( SelfCallback msg ) -> Task x (Dict Ref ( SelfCallback msg ) )
643
+ handleSelfcallback : Platform .Router msg (Msg msg ) -> Endpoint -> Message -> SelfCallbackDict msg -> Task x (SelfCallbackDict msg )
637
644
handleSelfcallback router endpoint message selfCallbacks =
638
645
case message. ref of
639
646
Nothing ->
640
647
Task . succeed selfCallbacks
641
648
642
649
Just ref ->
643
- case Dict . get ref selfCallbacks of
650
+ case Dict . get ( ref, endpoint ) selfCallbacks of
644
651
Nothing ->
645
652
Task . succeed selfCallbacks
646
653
647
654
Just selfCb ->
648
655
Platform . sendToSelf router ( selfCb message)
649
- &> Task . succeed ( Dict . remove ref selfCallbacks)
656
+ &> Task . succeed ( Dict . remove ( ref, endpoint ) selfCallbacks)
650
657
651
658
652
659
processQueue : Endpoint -> List ( Message , Maybe (SelfCallback msg ) ) -> State msg -> Task x (State msg )
@@ -968,7 +975,7 @@ pushSocket_ endpoint message maybeSelfCb state =
968
975
969
976
Just ref ->
970
977
insertSocket endpoint ( InternalSocket . increaseRef socket) state
971
- |> insertSelfCallback ref maybeSelfCb
978
+ |> insertSelfCallback ( ref, endpoint ) maybeSelfCb
972
979
|> Task . succeed
973
980
974
981
@@ -990,7 +997,7 @@ pushSocket endpoint message selfCb state =
990
997
991
998
Just ref ->
992
999
insertSocket endpoint ( InternalSocket . increaseRef socket) state
993
- |> insertSelfCallback ref selfCb
1000
+ |> insertSelfCallback ( ref, endpoint ) selfCb
994
1001
|> Task . succeed
995
1002
in
996
1003
case Dict . get endpoint state. sockets of
0 commit comments