Skip to content

Commit

Permalink
move close-session/create-session login into core
Browse files Browse the repository at this point in the history
  • Loading branch information
sunng87 committed Aug 30, 2011
1 parent 4e7d312 commit d9c835c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 20 deletions.
22 changes: 17 additions & 5 deletions src/clojalk/core.clj
Expand Up @@ -52,10 +52,6 @@
deadline_at state tube body nil
0 0 0 0 0)))

(defn open-session
([type] (open-session (uuid) type))
([id type] (ref (struct Session id type :default #{:default} nil :idle nil #{}))))

(defonce drain (atom false))
(defn toggle-drain []
(swap! drain not))
Expand Down Expand Up @@ -112,14 +108,30 @@
(conj (:reserved_jobs @session) (:id updated-top-job)))
updated-top-job)))

(defn set-job-as-ready [job]
(defn- set-job-as-ready [job]
(let [tube ((:tube job) @tubes)]
(do
(alter jobs assoc (:id job) (assoc job :state :ready))
(alter tube assoc :ready_set (conj (:ready_set @tube) job))
(if-let [s (first (:waiting_list @tube))]
(reserve-job s job)))))

(defn open-session
([type] (open-session (uuid) type))
([id type & sesssion-data]
(let [session (ref (struct Session id type :default #{:default} nil :idle nil #{}))]
(dosync
(if (not-empty sesssion-data)
(alter session assoc-all sesssion-data))
(alter sessions assoc id session))
session)))

(defn close-session [id]
(let [session (@sessions id)]
(dosync
(doall (map #(set-job-as-ready (@jobs %)) (:reserved_jobs @session)))
(alter sessions dissoc id))))

;;-------- macros ----------

(defmacro defcommand [name args & body]
Expand Down
20 changes: 5 additions & 15 deletions src/clojalk/net.clj
Expand Up @@ -21,24 +21,14 @@

(enqueue ch ["UNKNOWN_COMMAND"]))))))

(defn close-session [remote-addr]
(let [session (@sessions remote-addr)]
(dosync
(doall (map #(set-job-as-ready (@jobs %)) (:reserved_jobs @session)))
(alter sessions dissoc remote-addr))))

(defn- create-session [ch remote-addr type]
(let [new-session (open-session remote-addr type)]
(alter new-session assoc :channel ch)
(alter sessions assoc remote-addr new-session)

;; also register on-closed callback on channel
(on-closed ch #(close-session remote-addr))))
(open-session remote-addr type :channel ch)
;; also register on-closed callback on channel
(on-closed ch #(close-session remote-addr)))

(defn get-or-create-session [ch remote-addr type]
(dosync
(if-not (contains? @sessions remote-addr)
(create-session ch remote-addr type)))
(if-not (contains? @sessions remote-addr)
(create-session ch remote-addr type))
(@sessions remote-addr))

;; reserve watcher
Expand Down
6 changes: 6 additions & 0 deletions src/clojalk/utils.clj
Expand Up @@ -21,6 +21,12 @@

(defn uppercase [#^String s] (.toUpperCase s))

(defn assoc-all [x s]
"assoc a sequence of k-v pairs into x"
(if-not (empty? s)
(apply assoc x s)
x))

(defn conj-all [x s]
"conject a sequence s into x"
(if-not (empty? s)
Expand Down

0 comments on commit d9c835c

Please sign in to comment.