Blame view

lib/modems2.js 2.05 KB
f43dbc16a   Adhidarma Hadiwinoto   New modem selector
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  'use strict';
  
  const modemList = {
      by_name: {},
      by_imsi: {},
      by_msisdn: {},
  };
  
  /**
   * Objek data sebuah modem.
   * 
   * @typedef   {Object} ModemData
   * @property  {string} name - nama modem
   * @property  {string} imsi - IMSI modem
   * @property  {string} msisdn - MSISDN modem
   * @property  {string} reportIp - IP modem
   * @property  {number} reportPort - TCP port modem
   * @property  {string} reportApikey - APIKEY modem
   */
  
  /**
   * Update data sebuah modem berdasarkan nama modem.
   * 
   * @param  {ModemData} val - objek data modem
   */
  function touchByName(val) {
      if (!val || !val.name) return;
      if (typeof val.name !== 'string') return;
      if (!val.name.trim()) return;
  
      modemList.by_name[val.name] = val;
  }
  /**
   * Update data sebuah modem berdasarkan IMSI.
   * 
   * @param  {ModemData} val - objek data modem
   */
  function touchByIMSI(val) {
      if (!val || !val.imsi) return;
      if (typeof val.imsi !== 'string') return;
      if (!val.imsi.trim()) return;
  
      modemList.by_imsi[val.imsi] = val;
  }
  
  /**
   * Update data sebuah modem berdasarkan MSISDN.
   * 
   * @param  {ModemData} val - objek data modem
   */
  function touchByMSISDN(val) {
      if (!val || !val.msisdn) return;
      if (typeof val.msisdn !== 'string') return;
      if (!val.msisdn.trim()) return;
  
      modemList.by_msisdn[val.msisdn] = val;
  }
  
  /**
   * Update data sebuah modem.
   * 
   * @param  {ModemData} val - objek data modem
   * @see ModemData
   */
  function touch(val) {
      if (!val) return;
  
      if (!val.reportIp) {
          val.reportIp = '127.0.0.1';
      }
  
      touchByName(val);
      touchByIMSI(val);
      touchByMSISDN(val);
  }
  /**
   * Ambil data sebuah modem.
   * 
   * @param  {string} selector - selector pencarian, valid jika bernilai salah satu dari: name, imsi, msisdn
   * @param  {string} keyword - kata kunci modem yang ingin diambil
   * @returns {ModemData} data modem terkait
   */
  function get(selector, keyword) {
      if (!selector || !keyword) return null;
  
      return modemList[`by_${selector}`] ? modemList[`by_${selector}`][keyword] : null;
  }
  
  exports.touch = touch;
  exports.set = touch;
  exports.get = get;