You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Backend.ts 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. 'use strict'
  2. import http = require('http');
  3. import bsock = require('bsock');
  4. import * as T from './Types';
  5. import * as U from './Utils';
  6. import * as I from './Interfaces';
  7. export class RPCServer{
  8. private ws = http.createServer()
  9. private io = bsock.createServer()
  10. constructor(
  11. private port:number,
  12. private exporters: I.Exporter[] = [],
  13. private conf: T.SocketConf = {
  14. errorHandler: (socket:I.Socket) => (error:any) => { socket.destroy(); console.error(error) },
  15. closeHandler: (socket:I.Socket) => () => { console.log("Socket closing") },
  16. connectionHandler: (socket:I.Socket) => { console.log("New websocket connection in port "+socket.port)},
  17. visibility: "127.0.0.1"
  18. }
  19. ){
  20. this.startWebsocket()
  21. }
  22. private startWebsocket(){
  23. try{
  24. this.io.attach(this.ws)
  25. this.io.on('socket', (socket:I.Socket) => {
  26. socket.on('error', this.conf.errorHandler(socket))
  27. socket.on('close', this.conf.closeHandler(socket))
  28. if(this.conf.visibility === "127.0.0.1")
  29. this.initRPCs(socket)
  30. else
  31. this.initPublicRPCs(socket)
  32. })
  33. this.ws.listen(this.port, this.conf.visibility)
  34. }catch(e){
  35. //@ts-ignore
  36. this.errorHandler(undefined)("Unable to connect to socket")
  37. }
  38. }
  39. protected initRPCs(socket:I.Socket){
  40. socket.hook('info', () => rpcInfos)
  41. const rpcInfos:T.ExtendedRpcInfo[] = [
  42. ...this.exporters.flatMap(exporter => U.rpcHooker(socket, exporter))
  43. ]
  44. }
  45. protected initPublicRPCs(socket:I.Socket){
  46. socket.hook('info', () => rpcInfos)
  47. const rpcInfos:T.ExtendedRpcInfo[] = [
  48. ...this.exporters.flatMap(exporter => U.rpcHooker(socket, exporter))
  49. ]
  50. }
  51. }