Ngo, I checked out your github , it is great. I have not used netty, it looks clean. However, what is the meaning of this, (def reshedule nil)?
Regards, Emeka On Thu, Oct 15, 2009 at 3:02 AM, ngocdaothanh <ngocdaoth...@gmail.com>wrote: > > I created this (Netty is used instead of server-socket): > http://github.com/ngocdaothanh/telchat-clojure > > I am going to create a Scala version of the same program to have a > feeling of Clojure vs Scala, it will be telchat-scala. > > > On Oct 14, 10:12 pm, Emeka <emekami...@gmail.com> wrote: > > Ngo, > > > > Honestly speaking I don't know. How far have you gone? > > > > Regards, > > Emeka > > > > On Sat, Oct 3, 2009 at 3:21 PM, ngocdaothanh <ngocdaoth...@gmail.com> > wrote: > > > > > Emeka, good catch. It's just my mistake. > > > > > Another thing is I think there may be exception raised when on-msg > > > sends message to a closed socket. How would you solve this? > > > > > On Oct 3, 7:35 pm, Emeka <emekami...@gmail.com> wrote: > > > > ngo, > > > > I was about doing this kind of client/server thing some days ago, > > > however > > > > now you are into it I would like to learn then. I am not quite clear > why > > > you > > > > have this: > > > > (.start (new Thread (fn [] (create-server 8080 chat-loop)))) > > > > > > My concern is on Thread, create-server function has a Thread inside > > > > create-server-aux function. > > > > > > Regards, > > > > Emeka > > > > > > On Fri, Oct 2, 2009 at 3:13 AM, ngocdaothanh <ngocdaoth...@gmail.com > > > > > wrote: > > > > > > > > I'm not sure TCP/IP has a native facility for that. > > > > > > > I'm afraid John's statement is correct: > > > > > > > > http://www.velocityreviews.com/forums/t125620-client-socket-disconnec. > > > .. > > > > > and trying to read and write until something wrong happens as > > > > > demonstrated in Roger's code is the only way to check for > > > > > disconnection. > > > > > > > Below is my new code. Sorry it is rather long. > > > > > > > (import '[java.io BufferedReader InputStreamReader > > > > > OutputStreamWriter]) > > > > > (use 'clojure.contrib.server-socket) > > > > > > > (def clients (ref [])) ; Each client is an *out* > > > > > > > (defn on-msg [from msg] > > > > > (println msg) > > > > > (doall > > > > > (map > > > > > (fn [client] > > > > > (if-not (= from client) > > > > > (binding [*out* client] > > > > > (println msg) > > > > > (flush)))) > > > > > @clients))) > > > > > > > (defn on-disconnect [client] > > > > > (dosync > > > > > (alter clients > > > > > (fn [clients] > > > > > (remove (fn [c] (= c client)) clients)))) > > > > > (on-msg client "A client has disconnected")) > > > > > > > (defn on-connect [client] > > > > > (dosync (alter clients conj client)) > > > > > (on-msg client "A client has connected")) > > > > > > > (defn chat-loop [is os] > > > > > (let [client (OutputStreamWriter. os)] > > > > > (on-connect client) > > > > > (binding [*in* (BufferedReader. (InputStreamReader. is))] > > > > > (loop [] > > > > > (let [msg (read-line)] ; msg is nil when the client > > > > > disconnects > > > > > (if (nil? msg) > > > > > (on-disconnect client) > > > > > (do > > > > > (on-msg client msg) > > > > > (recur)))))))) > > > > > > > (.start (new Thread (fn [] (create-server 8080 chat-loop)))) > > > > > > > On Oct 2, 5:20 am, John Harrop <jharrop...@gmail.com> wrote: > > > > > > On Thu, Oct 1, 2009 at 4:02 PM, Roger Gilliar <ro...@gilliar.de> > > > wrote: > > > > > > > Am 01.10.2009 um 21:28 schrieb ngocdaothanh: > > > > > > > > Roger, your code is not event based. > > > > > > > What do you mean by not event based ? > > > > > > > > He means he wants automatic notification if a connection is > dropped. > > > > > > > > I'm not sure TCP/IP has a native facility for that. > > > > > > > > What most chat type programs, multiplayer games, and suchlike do > is > > > send > > > > > a > > > > > > periodic ping from server to each connected client, which as part > of > > > the > > > > > > chat protocol the client is supposed to acknowledge. If a client > > > stops > > > > > > responding for more than a few ping-intervals, it's assumed to > have > > > > > > disconnected or otherwise become unreachable. > > > > > > > > This method has the advantage of being entirely under the control > of > > > the > > > > > > application layer, and the further advantage of also working with > UDP > > > > > (which > > > > > > is crucial in the "multiplayer games" case at least). > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---