diff --git a/src/clacts/core.clj b/src/clacts/core.clj index 7d673e9..af6d36e 100644 --- a/src/clacts/core.clj +++ b/src/clacts/core.clj @@ -57,21 +57,19 @@ (defn handler "TCP Handler. Decodes the issued command and calls the appropriate function to excetion some action." - [storage commands] + [storage] (fn [ch ci] (siphon broad-put ch) (receive-all ch (fn [cmd] (println "Processing command: " cmd "From " ci) - (if-let [f ((-> cmd first keyword) commands)] - (f (rest cmd) ch storage) - (handle-err ch ci)))))) - -(def commands - {:PUT put - :LSA lsa - :LSC lsc}) + (letfn [(handle [f] (f (rest cmd) ch storage))] + (condp = (first cmd) + "PUT" (handle put) + "LSA" (handle lsa) + "LSC" (handle lsc) + (handle-err ch ci))))))) (defn -main [& args] @@ -79,15 +77,17 @@ ["-p" "--port" "Port to listen to connections" :default 10200 :parse-fn #(Integer/parseInt %)] ["-s" "--storage" "Type of storage. Use sqlite or datomic" - :default "sqlite"] + :default "sqlite"] + ["-t" "--transactor" "Transactor server:port. For datomic only." + :default "localhost:4334"] ["-h" "--help" "Show this help" :default false :flag true])] (when (:help opts) (println ban) (System/exit 0)) (try - (let [storage (make-storage (:storage opts))] + (let [storage (make-storage opts)] (setup storage) - (start-tcp-server (handler storage commands) {:port (:port opts), :frame prt/CMDS}) + (start-tcp-server (handler storage) {:port (:port opts), :frame prt/CMDS}) (println (format "Ready to get facts! Go for it on PORT %s." (:port opts))) (println (format "Persistence storage is %s." (:storage opts)))) (catch Exception e diff --git a/src/clacts/storage.clj b/src/clacts/storage.clj index 80e78cd..1390a5f 100644 --- a/src/clacts/storage.clj +++ b/src/clacts/storage.clj @@ -89,10 +89,8 @@ ; =============== Datomic -(defonce uri "datomic:free://localhost:4334/clact") (defonce datomic-schema "datomic/clact-schema.dtm") - (defn- extract [e] {:author (:clact/author e) :via (:clact/via e) @@ -102,12 +100,12 @@ (defn- as-e [db r] (d/entity db (first r))) -(defn load-schema [s conn] +(defn- load-schema [s conn] (let [s-tx (read-string (slurp s))] @(d/transact conn s-tx))) (defrecord DatomicStorage - [schema transactor-config conn] + [schema conn] StorageMediumP (setup [this] @@ -138,15 +136,18 @@ ;;Auxiliary function to generation a connection before the Storage itself -(defn- make-datomic [schema transactor-config] +(defn- make-datomic [schema uri] + (println uri) (d/create-database uri) - (DatomicStorage. schema transactor-config (d/connect uri))) + (DatomicStorage. schema (d/connect uri))) ; =============== The rest -(defn make-storage [s] - (condp = s +(defn make-storage [opts] + (condp = (:storage opts) "sqlite" (SQLiteStorage. db-check-file setup-db) - "datomic" (make-datomic datomic-schema nil) + "datomic" (make-datomic + datomic-schema + (format "datomic:free://%s/clact" (:transactor opts))) nil))