Unfortunaltely that does not work either, thank you for the help. It stops
receiving after the first message, just like before. Here is the updated
version:
(defn long-poll-newest
  ([url callback error-callback]
     (long-poll-newest  url callback error-callback (net/xhr-connection)))
  ([url callback error-callback xhr1]
     (do
       (event/listen xhr1
                     :success
                     (fn[e]
                         (callback (. xhr1 (getResponseText)))
                         (long-poll-newest  url callback error-callback
xhr1)
                         ))
       (event/listen xhr1
                     :error
                     (fn[e]
                       (when error-callback
                           (println "entered the error callback")
                           (error-callback e)
                         )))
       (event/listen xhr1
                     :timeout
                     (fn[e]
                         (long-poll-newest  url callback error-callback
xhr1)
                       ))
       (net/transmit xhr1 url))))

Here is the working version with opening and closing of the connection on
every call, at least it should not leak xhr connections:
(defn long-poll
  ([url callback error-callback]
     (let [kk (net/xhr-connection)]
       (do
         (event/listen-once kk
                            :complete
                            (fn[e]
                              (let [isSucc (. kk (isSuccess))
                                    ek (. kk (getLastErrorCode))
                                    isErr (or (= ek ec/EXCEPTION) (= ek
ec/HTTP_ERROR))]
                                (do
                                  (when isSucc
                                    (callback (. kk (getResponseText))))
                                  (. kk (dispose))
                                  (if isErr
                                    (error-callback e)
                                    (long-poll url callback error-callback))
                                  ))))
         (net/transmit kk url)))
     ))

Thx



On Tue, May 1, 2012 at 2:17 PM, Gijs S. <gijsstuur...@gmail.com> wrote:

> The order of arguments you pass to long-poll-newest doesn't look
> right.
>
> You defined long-poll-newest to optionally take a fourth parameter for
> the existing xhr connection. However, when calling long-poll-newest
> you pass the existing xhr connection as the first argument.
>
> Replace
> (long-poll-newest xhr1 url callback error-callback)
> with
> (long-poll-newest url callback error-callback xhr1)
>
> Also, all of the (do ..)'s are unnecessary. 'let', 'fn' and 'when'
> evaluate the body in an implicit 'do' themselves.
>
> The overall approach to reuse the connection looks fine otherwise.
>
> -Gijs
>
> On Apr 30, 12:00 pm, Dusan <dusan.milorado...@gmail.com> wrote:
> > I am trying to figure out how to setup the long polling from the
> > clojurescript.
> >
> > I use aleph on the server side. Here is the trivial aleph handler and
> > related code:
> >
> > (def k (permanent-channel))
> >
> > (receive-all k (fn[x] (println "got " x)))
> >
> > (defn longpoll-new [ch request]
> >   (siphon k ch)
> >   )
> >
> > (defn send-mes [k mes]
> >   (enqueue k ((comp r/response pr-str) mes)))
> >
> > On the clojurescript side I am trying to open one xhr connection, and use
> > it for all subsequent calls:
> >
> > (defn long-poll-newest
> >   ([url callback error-callback]
> >      (long-poll-newest  url callback error-callback
> (net/xhr-connection)))
> >   ([url callback error-callback xhr1]
> >      (do
> >        (event/listen xhr1
> >                      :success
> >                      (fn[e]
> >                        (do
> >                          (callback (. xhr1 (getResponseText)))
> >                          (long-poll-newest xhr1 url callback
> error-callback)
> >                          )))
> >        (event/listen xhr1
> >                      :error
> >                      (fn[e]
> >                        (when error-callback
> >                          (do
> >                            (println "entered the error callback")
> >                            (error-callback e)
> >                            )
> >                          )))
> >        (event/listen xhr1
> >                      :timeout
> >                      (fn[e]
> >                        (do
> >                          (long-poll-newest xhr1 url callback
> error-callback)
> >                          )
> >                        ))
> >        (net/transmit xhr1 url))
> >      ))
> >
> > Unfiortunatelly, this receives just the first message from server, and
> then
> > it stops.
> >
> > This is the version that is working:
> > (defn long-poll [url callback error-callback]
> >   (let [xhr1 (net/xhr-connection)]
> >     (do
> >       (event/listen xhr1
> >                     :success
> >                     (fn[e]
> >                       (do
> >                         (callback (. xhr1 (getResponseText)))
> >                         (long-poll url callback error-callback)
> >                         )))
> >       (event/listen xhr1
> >                     :error
> >                     (fn[e]
> >                       (when error-callback
> >                         (do
> >                           (println "entered the error callback")
> >                           (error-callback e)
> >                           )
> >                         )))
> >       (event/listen xhr1
> >                     :timeout
> >                     (fn[e]
> >                       (do
> >                         (long-poll url callback error-callback)
> >                         )
> >                       ))
> >       (net/transmit xhr1 url))))
> >
> > In this version I am closing the original xhr, I am creating the new one
> > for each request.
> > How can I make the first version functional, what do I miss?
> >
> > Dusan
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to