Advertisement
Guest User

Untitled

a guest
May 31st, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. const WebSocket = require('ws')
  2. const SHA256 = require('crypto-js/sha256')
  3. const EJSON = require('ejson')
  4. const { rocketTypes, resolveTypes } = require('./types')
  5. const { hashPassword, generateId } = require('./utils')
  6. const DDP = require('./ddp')
  7.  
  8.  
  9. class Socket {
  10. constructor(url, ddp) {
  11. this.url = url
  12. this.ddp = ddp
  13. }
  14.  
  15. connection() {
  16. if (this.wss) {
  17. return
  18. }
  19.  
  20. this.wss = new WebSocket(this.url, null)
  21. this.wss.onopen = this.onOpen.bind(this)
  22. this.wss.onerror = this.onError.bind(this)
  23. this.wss.onclose = this.onClose.bind(this)
  24. this.wss.onmessage = this.onMessage.bind(this)
  25.  
  26. this.ddp.subscribe(rocketTypes.PING, () => {
  27. this.send({ msg: rocketTypes.PONG }, true)
  28. })
  29. }
  30.  
  31. async onOpen() {
  32. this.send({ msg: rocketTypes.CONNECTION, version: '1', support: ['1'] }, true)
  33. const data = await this.loginWithPassword('dmitry.shelomanov', '123456789qwert')
  34.  
  35. this.ddp.emit(resolveTypes.LOGIN, data)
  36. }
  37.  
  38. onError(error) {
  39. console.log('error', error)
  40. }
  41.  
  42. onMessage({ data }) {
  43. data = JSON.parse(data)
  44.  
  45. this.ddp.emit(data.id || data.msg, data)
  46. }
  47.  
  48. loginWithPassword(username, password) {
  49. return this.call(rocketTypes.LOGIN, {
  50. user: { username },
  51. password: hashPassword(password),
  52. })
  53. }
  54.  
  55. onClose(reason) {
  56. console.log('onClose', reason)
  57. }
  58.  
  59. send(obj, ignore) {
  60. return new Promise((resolve, reject) => {
  61. const id = generateId()
  62.  
  63. this.wss.send(JSON.stringify({ ...obj, id }))
  64.  
  65. if (ignore) {
  66. resolve(true)
  67. return
  68. }
  69.  
  70. this.ddp.subscribe(id, (data) => {
  71. this.ddp.removeListener(id)
  72.  
  73. return data.error
  74. ? reject(data.error)
  75. : resolve({ id, ...data })
  76. })
  77. })
  78. }
  79.  
  80. call(method, ...params) {
  81. return this.send({ msg: 'method', method, params })
  82. }
  83. }
  84.  
  85.  
  86. const s = new Socket('wss://chat.unitemp.ru/websocket', DDP)
  87.  
  88. s.connection()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement