2019-11-11 04:24:53 +01:00
|
|
|
import { useState, useEffect, useCallback } from 'react'
|
2019-09-03 02:59:29 +02:00
|
|
|
import useClient from './useClient'
|
|
|
|
|
|
|
|
const useStomp = topic => {
|
|
|
|
const [message, setMessage] = useState({})
|
|
|
|
const client = useClient()
|
|
|
|
|
|
|
|
// subscribe to a channel, then listen to the messages.
|
2019-11-11 04:24:53 +01:00
|
|
|
const subscribe = useCallback(() => {
|
2019-09-03 02:59:29 +02:00
|
|
|
client.subscribe(topic, msg => {
|
|
|
|
const change = JSON.parse(msg.body)
|
|
|
|
setMessage(change)
|
|
|
|
})
|
2019-11-11 04:24:53 +01:00
|
|
|
}, [client, topic])
|
2019-09-03 02:59:29 +02:00
|
|
|
|
|
|
|
// unsubscribe on unmount
|
2019-11-11 04:24:53 +01:00
|
|
|
const unSubscribe = useCallback(() => {
|
2019-09-03 02:59:29 +02:00
|
|
|
client.unsubscribe()
|
2019-11-11 04:24:53 +01:00
|
|
|
}, [client])
|
2019-09-03 02:59:29 +02:00
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
subscribe()
|
|
|
|
return unSubscribe
|
2019-11-11 04:24:53 +01:00
|
|
|
}, [subscribe, unSubscribe])
|
2019-09-03 02:59:29 +02:00
|
|
|
|
|
|
|
return message
|
|
|
|
}
|
|
|
|
|
|
|
|
export default useStomp
|