Skip to content

Instantly share code, notes, and snippets.

@raek
Created October 12, 2009 17:45
Show Gist options
  • Save raek/208575 to your computer and use it in GitHub Desktop.
Save raek/208575 to your computer and use it in GitHub Desktop.
(ns com.github.raek.events
(:use [clojure.contrib.core :only [dissoc-in]]))
(defn add-event-handler [state event-type key-or-agent f]
(assoc-in state [::handlers event-type key-or-agent] f))
(defn remove-event-handler [state event-type key-or-agent]
(dissoc-in state [::handlers event-type key-or-agent]))
(defn dispatch-event [state event-type & args]
(doseq [[key-or-agent f] (-> state ::handlers event-type)]
(if (keyword? key-or-agent)
(apply f args)
(send-off key-or-agent f args)))
state)
(def a (agent {}))
(send a add-event-handler :on-foo :x #(println "foo occured:" %))
(send a dispatch-event :on-foo "bar")
(send a remove-event-handler :on-foo :x)
(send a dispatch-event :on-foo "baz")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment