0.0.1 • Published 11 years ago
cumulo-client v0.0.1
Cumulo Client
Client side toolkits for Cumulo architechture.
Usage
This is a CommonJS package you can use with Browserify:
npm i --save-dev cumulo-clientcumulo-client exposes several objects and contructors:
# a session manager
exports.session = require './session'
# a router like event hub
exports.transmitter = require './transmitter'
# data store to be synced with server
exports.Store = require './store'
# websocket interface
exports.ws = null
exports.send = (name, data) ->
action = {name, data}
raw = JSON.stringify action, null, 2
@ws.send rawSession
cumulo = require 'cumulo-client'
session = cumulo.session
session.init
key: 'chat-distract' # localStorageKey
initialSession: {} # a default objectsession.get
returns an object.
session.set(obj)
obj is an object that will be lodash.assign to session object.
Session Object will be written to localStorage on onbeforeunload.
Transmitter
cumulo = require 'cumulo-client'
transmitter = cumulo.transmitter
# an interface for debugging, create logs for events
transmitter.display = (action) ->
console.info action
# transmitter pipes actions from websocket
ws.onmessage = (messageObject) ->
raw = messageObject.data
action = JSON.parse raw
transmitter.dispatch action
# and listens events like an router, notice that
# .dispatch({name: '', data: {}})
# .register(name, (data)->)
transmitter.register 'client/patch', (data) =>
store.patch dataStore
Cumulo store in client is simply listening to events and updating data:
cumulo = require 'cumulo-client'
transmitter = cumulo.transmitter
# initial data is required, mind that it's used in patching
# data is mostly {} or [], see what you need in patching
store = new cumulo.Store data: []
module.exports = store
transmitter.register 'preview/sync', (data) =>
store.sync data
transmitter.register 'preview/patch', (data) =>
store.patch dataSend
Well, send is just an alias, and you need to attach ws to cumulo:
# websocket interface
exports.ws = null
exports.send = (name, data) ->
# on server, there's a router receiving this action
action = {name, data}
raw = JSON.stringify action, null, 2
@ws.send rawSee chat-distract for Details.
License
MIT
0.0.1
11 years ago