cozy-realtime v5.6.4
Subscribe to cozy-stack server side events cozy-stack via Websocket.
Install
npm install --save cozy-realtime`
yarn add cozy-realtime
Setup
CozyRealtime comes with a plugin for cozy-client. This is the recommended way to setup:
// setup.js
import CozyClient from 'cozy-client'
import { RealtimePlugin } from 'cozy-realtime'
const client = new CozyClient({})
client.registerPlugin(RealtimePlugin)
Then, you can listen for a whole doctype, thanks to the <RealTimeQueries>
component, provided by cozy-client.
This will automatically subscribe to all the events occuring on the specified doctype and accordingly update the store, so your app will reflect the data changes in realtime.
// App.js
import { RealTimeQueries } from 'cozy-client'
<App>
<RealTimeQueries doctype="io.cozy.files" />
...
</App>
Simple, isn't it?
You can also provide your own method to instantiate Websockets. This can be useful when using cozy-realtime
from a Node application for example.
// main.node.js
import { Agent } from 'http'
import { WebSocket } from 'ws'
import CozyClient from 'cozy-client'
import { RealtimePlugin } from 'cozy-realtime'
const agent = new Agent({ keepAlive: true })
const createWebSocket = (uri, protocol) => {
return new WebSocket(uri, protocol, { agent })
}
const client = new CozyClient({})
client.registerPlugin(RealtimePlugin, { createWebSocket })
Manual subscribe
If your app needs to handle specific events on the data, you need to subscribe/unsubscribe like this:
const realtime = client.plugins.realtime
realtime.subscribe('created', 'io.cozy.bank.accounts', handleBankAccountCreated)
realtime.unsubscribe('created', 'io.cozy.bank.accounts', handleBankAccountCreated)
Example
It is important to unsubscribe when unmounting React components.
// some-component.js
const handleCreate = accounts => {
console.log(`A new 'io.cozy.accounts' is created with id '${accounts._id}'.`)
}
const handleUpdate = accounts => {
console.log(`An account is updated with id '${accounts._id}'.`)
}
class MyComp extends Component {
constructor(props){
super(props)
}
componentDidMount(){
this.realtime = this.props.client.plugins.realtime
if(this.realtime){
// Listen to document creations
await this.realtime.subscribe('created', type, this.handleCreate)
//listen of the update for a type
await this.realtime.subscribe('updated', type, this.handleUpdate)
// Listen to a specific document
await this.realtime.subscribe('updated', type, id, this.handleUpdate)
}
}
componentWillUnmount(){
if(this.realtime){
// To unsubscribe
await this.realtime.unsubscribe('created', type, handleCreate)
await this.realtime.unsubscribe('updated', type, handleUpdate)
await this.realtime.unsubscribe('updated', type, id, handleUpdate)
// To unsubscribe all
await this.realtime.unsubscribeAll()
}
}
}
export default withClient(MyComp)
Subscribe to multiple events
Here we subscribe to
- The creation event
- The update of a single document
import CozyRealtime from 'cozy-realtime'
/**
* In Node applications, provide a function to instantiate Websockets:
*
* const createWebSocket = (uri, protocol) => { ... }
*
* const realtime = new CozyRealtime({ client: cozyClient, createWebSocket })
*
*/
const realtime = new CozyRealtime({ client: cozyClient })
const type = 'io.cozy.accounts'
const id = 'document_id'
const handleCreate = accounts => {
console.log(`A new 'io.cozy.accounts' is created with id '${accounts._id}'.`)
}
const handleUpdate = accounts => {
console.log(`An account is updated with id '${accounts._id}'.`)
}
// To subscribe
await realtime.subscribe('created', type, handleCreate)
await realtime.subscribe('updated', type, id, handleUpdate)
// To unsubscribe
await realtime.unsubscribe('created', type, handleCreate)
await realtime.unsubscribe('updated', type, id, handleUpdate)
// To unsubscribe all events in one go
await realtime.unsubscribeAll()
License
cozy-realtime
is distributed under the MIT license.
7 months ago
7 months ago
9 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
12 months ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago