Skip to content

Commit 92d5152

Browse files
author
Charles Scalfani
committed
Fixed subscription handling
1 parent 04f3635 commit 92d5152

File tree

2 files changed

+14
-20
lines changed

2 files changed

+14
-20
lines changed

elm-package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "3.0.0",
2+
"version": "3.0.1",
33
"summary": "Websocket Server Effects Manager for Elm",
44
"repository": "https://github.com/panosoft/elm-websocket-server.git",
55
"license": "Unlicense",

src/Websocket.elm

+13-19
Original file line numberDiff line numberDiff line change
@@ -337,19 +337,19 @@ listen errorTagger messageTagger connectionStatusTagger wsPort path =
337337

338338

339339
onEffects : Platform.Router msg (Msg msg) -> List (MyCmd msg) -> List (MySub msg) -> State msg -> Task Never (State msg)
340-
onEffects router cmds newSubs state =
340+
onEffects router cmds subs state =
341341
let
342-
( newSubsDict, subErrorTasks ) =
343-
List.foldl (addMySub router state) ( Dict.empty, [] ) newSubs
342+
( listeners, subErrorTasks ) =
343+
List.foldl (addMySub router state) ( Dict.empty, [] ) subs
344344

345-
oldListeners =
346-
Dict.diff state.listeners newSubsDict
345+
stoppedListening =
346+
Dict.diff state.listeners listeners
347347

348-
newListeners =
349-
Dict.diff newSubsDict state.listeners
348+
startedListening =
349+
Dict.diff listeners state.listeners
350350

351-
keepListeners =
352-
Dict.intersect state.listeners newSubsDict
351+
keptListening =
352+
Dict.diff state.listeners stoppedListening
353353

354354
handleOneCmd state cmd tasks =
355355
let
@@ -363,28 +363,22 @@ onEffects router cmds newSubs state =
363363
in
364364
Task.sequence (List.reverse <| tasks)
365365
&> Task.sequence (List.reverse <| subErrorTasks)
366-
&> Task.succeed { cmdState | listeners = Dict.union keepListeners newListeners }
366+
&> Task.succeed { cmdState | listeners = listeners }
367367

368368

369369
addMySub : Platform.Router msg (Msg msg) -> State msg -> MySub msg -> ( ListenerDict msg, List (Task x ()) ) -> ( ListenerDict msg, List (Task x ()) )
370370
addMySub router state sub ( dict, errorTasks ) =
371371
case sub of
372372
Listen errorTagger messageTagger connectionStatusTagger wsPort path ->
373373
let
374-
error msg =
375-
errorTagger ( wsPort, path, msg )
376-
377374
newSub =
378375
{ messageTagger = messageTagger
379376
, connectionStatusTagger = connectionStatusTagger
380377
}
381-
382-
newErrorTasks =
383-
Dict.get ( wsPort, path ) dict
384-
|?> (\_ -> Platform.sendToApp router (error "Listener already exists") :: errorTasks)
385-
?= errorTasks
386378
in
387-
( Dict.insert ( wsPort, path ) newSub dict, newErrorTasks )
379+
Dict.get ( wsPort, path ) dict
380+
|?> (\_ -> ( dict, Platform.sendToApp router (errorTagger ( wsPort, path, "Another listener exists" )) :: errorTasks ))
381+
?= ( Dict.insert ( wsPort, path ) newSub dict, errorTasks )
388382

389383

390384
settings0 : Platform.Router msg (Msg msg) -> (a -> Msg msg) -> Msg msg -> { onError : a -> Task msg (), onSuccess : Never -> Task x () }

0 commit comments

Comments
 (0)