Le 16/05/2017 à 17:17, Christophe de Vienne a écrit :
> Thank you for the feedback.
> 
> I am still trying to find a non-effect based API. Did not find anything
> satisfying so far.
> 
> The WebSocket.LowLevel module is interesting for send batches, but my
> main issue is how to associate a custom message translator to each
> subscription in a global protocol state.

Plus the WebSocket module provides very useful behavior I would prefer
not to reimplement.

> 
> Le 16/05/2017 à 17:02, Aaron VonderHaar a écrit :
>> Hi, I haven't played much with WebSockets, but I have been building a
>> protocol on top of HTTP.  I haven't yet run into an issue that made me
>> think to try an effects module.
>>
>> Instead of having custom subscriptions, my package has an `update`
>> function that takes any msgs resulting from its commands and returns
>> some appropriate stuff (in my case, that is an optional output value
>> that the caller can do something with, and also another Cmd to run).
>>
>> For the Cmds, I do have to use the Tasks portion of the HTTP API so that
>> I can compose and chain things together (though I do in the end return a
>> Cmd for most functions in my protocol's API).  For WebSockets, I see
>> there's 
>> http://package.elm-lang.org/packages/elm-lang/websocket/1.0.2/WebSocket-LowLevel
>> which provides Tasks instead of Cmds, so it's likely you could use that
>> for what you need.
>>
>> I don't know if those things will address all the needs of your
>> WebSockets protocol, but those approaches have worked for what I've been
>> building.  (Sorry, it's not open-source, so can't share the code.)
>>
>> --Aaron V.
>>
>> On Tue, May 16, 2017 at 7:30 AM, Christophe de Vienne
>> <[email protected] <mailto:[email protected]>> wrote:
>>
>>     Hi everyone,
>>
>>     I am attempting to implement the pub/sub NATS (https://nats.io) protocol
>>     on top of the WebSocket API as a TEA component.
>>
>>     I have a hard time finding an API for subscriptions: for each
>>     subscription some context must be kept, a unique subscription ID
>>     generated and in some case a unique reply subject too, and I would like
>>     each subscription to generate custom messages for the component which
>>     made it.
>>
>>     I suspect it would be a lot more natural with an effect module, with
>>     which I could (hopefully) write, in any part of the application:
>>
>>     subscriptions : Model -> Sub Msg
>>     subscriptions model =
>>         Nats.Subscribe model.endpoint "some.subject" MyMessage
>>
>>     or, for req/rep (a pub + a short-living sub expecting a result):
>>
>>     myrequest : Model -> Cmd Msg
>>     myrequest model =
>>         Nats.request model.endpoint "a.request.subject" MyReply
>>
>>
>>     Another difficulty I have is that in some cases I need to send 2 or 3
>>     messages through the websocket, in the right order, but WebSocket.send
>>     returns a Cmd. So I have to concat the 3 commands in 1 message, which
>>     works but oblige
>>
>>     Am I wrong being tempted by using an effect module for this kind of
>>     module ?
>>     If so how can I mimick such an API with a TEA approach  ?
>>     If not is there any documentation I can read to get familiar with them ?
>>
>>     Is there any existing module that does this kind of thing for another
>>     protocol ?
>>
>>     Thanks!
>>
>>     --
>>     Christophe de Vienne
>>
>>     --
>>     You received this message because you are subscribed to the Google
>>     Groups "Elm Discuss" group.
>>     To unsubscribe from this group and stop receiving emails from it,
>>     send an email to [email protected]
>>     <mailto:elm-discuss%[email protected]>.
>>     For more options, visit https://groups.google.com/d/optout
>>     <https://groups.google.com/d/optout>.
>>
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Elm Discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send
>> an email to [email protected]
>> <mailto:[email protected]>.
>> For more options, visit https://groups.google.com/d/optout.
> 

-- 
Christophe de Vienne

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to