Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new code structure #2

Merged
merged 2 commits into from
Mar 15, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/messenger/android/core.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
[messenger.state :as state]
[messenger.android.login :refer [login]]
[messenger.android.contacts-list :refer [contacts-list]]
[messenger.android.chat :refer [chat]]))
[messenger.android.chat :refer [chat]]
[messenger.comm.pubsub :as pubsub]
[messenger.comm.intercom :refer [load-user-phone-number]]))

(def app-registry (.-AppRegistry js/React))

Expand Down Expand Up @@ -55,5 +57,7 @@
(defonce app-root (om/factory RootNode))

(defn init []
(pubsub/setup-pub-sub)
(load-user-phone-number)
(om/add-root! state/reconciler AppRoot 1)
(.registerComponent app-registry "Messenger" (fn [] app-root)))
13 changes: 0 additions & 13 deletions src/messenger/android/login.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -83,23 +83,10 @@
(swap! state/app-state assoc :user-phone-number
formatted)))

(defn load-user-phone-number [handler]
(get-item "user-phone-number"
(fn [error value]
(if (not error)
(let [phone-number (when value (str value))]
(swap! state/app-state assoc :user-phone-number phone-number)
(when handler
(handler phone-number)))
(alert (str "error" error))))))

(defui Login
static om/IQuery
(query [this]
'[:user-phone-number])
Object
(componentDidMount [this]
(load-user-phone-number nil))
(render [this]
(let [{:keys [user-phone-number]} (om/props this)
{:keys [nav]} (om/get-computed this)]
Expand Down
2 changes: 1 addition & 1 deletion src/messenger/android/utils.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[natal-shell.alert :refer [alert]]
[natal-shell.toast-android :as toast]))

(def server-address "http://10.0.3.2:3000/")
(def server-address "http://rpc0.syng.im:20000/")

(defn log [obj]
(.log js/console obj))
Expand Down
19 changes: 19 additions & 0 deletions src/messenger/comm/intercom.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
(ns messenger.comm.intercom
(:require [cljs.core.async :as async :refer [put!]]
[messenger.state :refer [state
pub-sub-publisher]]
[syng-im.utils.logging :as log]))

(defn publish! [topic message]
(let [publisher (->> (state)
(pub-sub-publisher))]
(put! publisher [topic message])))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn load-user-phone-number []
;; :service [service_name action_id args_map]
(publish! :service [:user-data :user-data/load-phone-number nil]))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

33 changes: 33 additions & 0 deletions src/messenger/comm/pubsub.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
(ns messenger.comm.pubsub
(:require-macros [cljs.core.async.macros :refer [go alt!]])
(:require [cljs.core.async :as async :refer [chan pub sub]]
[messenger.state :refer [state
pub-sub-publisher
app-state
pub-sub-path]]
[messenger.comm.services :refer [services-handler]]
[messenger.utils.event :refer [handle-channel-events]]))

(defn service-id [message]
(first message))

(defn payload [message]
(rest message))

(defn subscribe-handler [publication topic handler]
(let [chn (chan)]
(sub publication topic chn)
(handle-channel-events chn (fn [_topic message]
(handler app-state
(service-id message)
(payload message))))))

(defn setup-publication! [app-state]
(let [publisher (pub-sub-publisher @app-state)
publication (pub publisher first)]
(swap! app-state assoc-in pub-sub-path publication)
publication))

(defn setup-pub-sub []
(-> (setup-publication! app-state)
(subscribe-handler :service services-handler)))
15 changes: 15 additions & 0 deletions src/messenger/comm/services.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
(ns messenger.comm.services
(:require
[syng-im.utils.logging :as log]
[messenger.services.user-data :refer [user-data-handler]]))

(defmulti service (fn [state service-id args]
service-id))

(defmethod service :user-data
[state service-id args]
(user-data-handler state args))

(defn services-handler [state service-id args]
(log/info "handling " service-id " args = " args)
(service state service-id args))
16 changes: 16 additions & 0 deletions src/messenger/models/user_data.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
(ns messenger.models.user-data
(:require-macros
[natal-shell.async-storage :refer [get-item set-item]]
[natal-shell.alert :refer [alert]])
(:require [messenger.state :as state]))


(defn load-phone-number []
(get-item "user-phone-number"
(fn [error value]
(if error
(alert (str "error" error))
(swap! state/app-state assoc :user-phone-number (when value
(str value)))))))


15 changes: 15 additions & 0 deletions src/messenger/services/user_data.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
(ns messenger.services.user-data
(:require [messenger.models.user-data :refer [load-phone-number]]
[syng-im.utils.logging :as log]))

(defmulti user-data (fn [state id args]
id))

(defmethod user-data :user-data/load-phone-number
[state id args]
(log/info "handling " id "args = " args)
(load-phone-number))

(defn user-data-handler [state [id args]]
(log/info "user notification: " args)
(user-data state id args))
30 changes: 21 additions & 9 deletions src/messenger/state.cljs
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
(ns messenger.state
(:require [om.next :as om]
(:require [cljs.core.async :as async :refer [chan pub sub]]
[om.next :as om]
[re-natal.support :as sup]))

(set! js/React (js/require "react-native"))

(defonce app-state (atom {:component nil
:user-phone-number nil
(defonce app-state (atom {:component nil
:user-phone-number nil
:user-whisper-identity nil
:confirmation-code nil}))
:confirmation-code nil
:channels {:pub-sub-publisher (chan)
:pub-sub-publication nil}}))
(def ^{:dynamic true :private true} *nav-render*
"Flag to suppress navigator re-renders from outside om when pushing/popping."
true)
Expand All @@ -21,8 +24,17 @@
{:value :not-found})))

(defonce reconciler
(om/reconciler
{:state app-state
:parser (om/parser {:read read})
:root-render sup/root-render
:root-unmount sup/root-unmount}))
(om/reconciler
{:state app-state
:parser (om/parser {:read read})
:root-render sup/root-render
:root-unmount sup/root-unmount}))


(defn state [] @app-state)

(def pub-sub-bus-path [:channels :pub-sub-publisher])
(def pub-sub-path [:channels :pub-sub-publication])
(def user-notification-path [:user-notification])

(defn pub-sub-publisher [app] (get-in app pub-sub-bus-path))
9 changes: 9 additions & 0 deletions src/messenger/utils/event.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
(ns messenger.utils.event
(:require [cljs.core.async :refer [<!]])
(:require-macros [cljs.core.async.macros :refer [go]]))

(defn handle-channel-events [chan handler]
(go (loop [[msg args] (<! chan)]
(when msg
(handler msg args)
(recur (<! chan))))))