socket.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const { Block } = require('./db/models')
  2. //const chalk = require('chalk')
  3. const { types } = require('@joystream/types')
  4. const { ApiPromise, WsProvider } = require('@polkadot/api')
  5. const wsLocation = [
  6. 'wss://localhost:9933',
  7. 'wss://rome-rpc-endpoint.joystream.org:9944',
  8. ]
  9. // TODO migrate lib: const { addBlock } = require('./joystream')
  10. module.exports = (io) => {
  11. const initializeSocket = async () => {
  12. console.debug(`[Joystream] Connecting to ${wsLocation}`)
  13. try {
  14. const provider = new WsProvider(wsLocation)
  15. const api = await ApiPromise.create({ provider, types })
  16. await api.isReady
  17. console.debug(`[Joystream] Connected.`)
  18. let status = {}
  19. api.derive.chain.subscribeNewHeads(
  20. async (h) => {}
  21. //(status = (await addBlock(api, h, io, status)) || status)
  22. )
  23. } catch (e) {
  24. return console.log(`[Joystream] Connection failed`)
  25. }
  26. }
  27. io.on('connection', async (socket) => {
  28. console.log(chalk.green(`[socket.io] Connection: ${socket.id}`))
  29. socket.on('get blocks', async (limit) => {
  30. const blocks = await Block.findAll({ limit, order: [['id', 'DESC']] })
  31. socket.emit('blocks', blocks)
  32. })
  33. socket.on('disconnect', async () => {
  34. console.log(chalk.red(`[socket.io] Disconnect: ${socket.id}`))
  35. })
  36. })
  37. const connectUpstream = () => {
  38. try {
  39. initializeSocket()
  40. } catch (e) {
  41. console.log(`[Joystream] upstream connection failed`, e)
  42. //setTimeout(connectUpstream, 1000)
  43. }
  44. }
  45. //connectUpstream()
  46. initializeSocket()
  47. }