1import * as NETMGR from 'NETMGR'
2import * as events from 'events'
3
4class netMgr extends events.EventEmitter {
5    constructor(options) {
6        super();
7
8        if (!options || !options.name) {
9            throw new Error('device info error');
10        }
11
12        this.options = {
13            name: options.name
14        };
15
16        this.name = options.name
17        this._init();
18        this.dev_handler = this._getDev();
19    }
20
21    _init() {
22        if (NETMGR.serviceInit() !== 0) {
23            this.emit('error', 'netmgr init error');
24        }
25    }
26
27    _getDev() {
28        console.log('wifi name:' + this.name)
29        var dev_handler = NETMGR.getDev(this.name);
30        if (dev_handler == -1) {
31            console.log('netmgr get wifi dev error: ' + this.name);
32            return;
33        }
34
35        return dev_handler;
36    }
37
38    setMsgCb(cb) {
39        NETMGR.setMsgCb(this.dev_handler, cb);
40    }
41
42    delMsgCb(cb) {
43        NETMGR.delMsgCb(this.dev_handler, cb);
44    }
45
46    setAutoReconnect(flag) {
47        var ret = NETMGR.setAutoReconnect(this.dev_handler, flag);
48        if (ret !== 0) {
49            this.emit('error', 'netmgr set auto reconnect error');
50        }
51    }
52
53    connect(options) {
54
55        options = {
56            ssid: options.ssid,
57            password: options.password,
58            bssid: options.bssid || '',
59            timeout_ms: options.timeout_ms || 18000
60        }
61
62        NETMGR.connect(this.dev_handler, options, function (status) {
63            if (status == 'DISCONNECT') {
64                this.emit('disconnect', options.ssid);
65                return;
66            }
67            this.emit('connect', options.ssid);
68        }.bind(this));
69    }
70
71    disconnect() {
72        var ret = NETMGR.disconnect(this.dev_handler);
73        if (ret !== 0) {
74            this.emit('error', 'netmgr disconnect error');
75            return;
76        }
77        this.emit('disconnect', ssid);
78    }
79
80    getType() {
81        return NETMGR.getType();
82    }
83
84    getState() {
85        var ret = NETMGR.getState(this.dev_handler);
86        switch (ret) {
87            case 0:
88                return 'disconnecting';
89            case 1:
90                return 'disconnected';
91            case 2:
92                return 'connecting';
93            case 3:
94                return 'connected';
95            case 4:
96                return 'obtaining ip';
97            case 5:
98                return 'network connected';
99            case 6:
100                return 'failed';
101        }
102    }
103
104    saveConfig() {
105        var ret = NETMGR.saveConfig(this.dev_handler);
106        if (ret !== 0) {
107            this.emit('error', 'netmgr save config error');
108        }
109    }
110
111    setIfConfig(options) {
112
113        options = {
114            dhcp_en: options.dhcp_en || true,
115            ip_addr: options.ip_addr || '',
116            mask: options.mask || '',
117            gw: options.gw || '',
118            dns_server: options.dns_server || '',
119            mac: options.mac || ''
120        }
121
122        var ret = NETMGR.setIfConfig(this.dev_handler, options);
123        if (ret !== 0) {
124            this.emit('error', 'netmgr save config error');
125        }
126    }
127
128    getIfConfig() {
129        var config = NETMGR.getIfConfig(this.dev_handler);
130        if (!config) {
131            this.emit('error', 'get if config error');
132        }
133        return config;
134    }
135}
136
137export function openNetMgrClient(options) {
138    return new netMgr(options);
139}
140