Last active
April 1, 2016 19:12
-
-
Save NeilMenne/05cd24dfb703c63c068e6e8b1d14fe36 to your computer and use it in GitHub Desktop.
mapcat testing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns lab.core | |
(:gen-class) | |
(:require [clojure.core.async :as a])) | |
(defn event-proc | |
"linearize event logging" | |
[chan] | |
(a/thread | |
(loop [] | |
(let [{:keys [label data]} (a/<!! chan) | |
log (str label " occurred at " (System/currentTimeMillis) ".") | |
log (if data (str log " Additional data: " data) log)] | |
(when label | |
(when (#{:provided :complete} label) | |
(println log)) | |
(recur)))))) | |
(defn event-fn | |
[chan] | |
(fn | |
([label] | |
(a/>!! chan {:label label})) | |
([label data] | |
(a/>!! chan {:label label | |
:data data})))) | |
(defn consumer | |
[chan event] | |
(a/thread | |
(loop [] | |
(when-let [v (a/<!! chan)] | |
(a/<!! (a/timeout 10)) | |
(event :consumed v) | |
(recur))))) | |
(defn provider | |
[chan lim event] | |
(a/<!! (a/onto-chan chan (range lim))) | |
(event :provided)) | |
(defn -main | |
[] | |
(let [e (a/chan) | |
event (event-fn e) | |
event-proc (event-proc e) | |
c (a/chan 1 (mapcat range)) | |
consume (consumer c event)] | |
(provider c 2048 event) | |
(a/<!! consume) | |
(event :complete))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment