Advertisement
josefkyrian

GoodWe UDP Caching Proxy Server

Feb 17th, 2024 (edited)
900
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const dgram = require('dgram');
  2. const server = dgram.createSocket('udp4');
  3.  
  4. const INVERTER_HOST = 'goodwe';
  5. const TIMEOUT_BY_REQUEST = {
  6.     'f70388b800213ac1' : 60000, // inverter info
  7. };
  8. const DEFAULT_TIMEOUT = 5000;
  9.  
  10. const cacheByRequest = new Map();
  11.  
  12. server.on('error', (err) => {
  13.     console.error(err);
  14.     server.close();
  15. });
  16.  
  17. server.on('message', (msg, rinfo) => {
  18.     const hex = msg.toString('hex');
  19.     console.log(`Server got request (HEX): ${hex}`);
  20.  
  21.     const reply = (msg) => {
  22.         server.send(msg, rinfo.port, rinfo.address);
  23.     };
  24.  
  25.     if (cacheByRequest.has(hex) && cacheByRequest.get(hex).timeout > Date.now()) {
  26.         reply(cacheByRequest.get(hex).data);
  27.     }else {
  28.         const client = dgram.createSocket('udp4');
  29.         client.on('message', (msg) => {
  30.             cacheByRequest.set(hex, {
  31.                 timeout: Date.now() + (TIMEOUT_BY_REQUEST[hex] || DEFAULT_TIMEOUT),
  32.                 data: msg,
  33.             });
  34.             reply(msg);
  35.             client.close();
  36.         });
  37.         client.send(msg, 0, msg.length, 8899, INVERTER_HOST);
  38.     }
  39. });
  40.  
  41. server.bind(8899);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement