1'use strict'; 2 3import * as UDP from 'UDP' 4import * as event from 'events' 5 6class UDPClient extends event.EventEmitter { 7 constructor() { 8 super(); 9 this.udpClientInstance = UDP.createSocket(); 10 if(this.udpClientInstance < 0) { 11 throw new Error("create socket error!"); 12 } 13 this.localPort = 0; 14 } 15 16 bind(port) { 17 this.localPort = port || 0; 18 if(UDP.bind(this.udpClientInstance, this.localPort) < 0) { 19 throw new Error("bind error"); 20 } 21 this._onListening(); 22 }; 23 24 send(options) { 25 if (!(options.message instanceof Array)) { 26 throw new Error("udp send message is empty"); 27 } 28 options.message = new Uint8Array(options.message).buffer; 29 UDP.sendto(this.udpClientInstance, options, function(ret) { 30 console.log("sendto callback " + ret); 31 if (ret < 0) { 32 this.emit('error', 'udp send error'); 33 if(options.fail) options.fail(); 34 return; 35 } 36 this.emit('send', 'udp send success'); 37 if(options.success) options.success(); 38 }.bind(this)); 39 }; 40 41 close() { 42 var ret = UDP.close(this.udpClientInstance); 43 if (ret < 0) { 44 console.log('close udp socket faild'); 45 return; 46 } 47 this.emit('close', 'udp client close'); 48 }; 49 50 _onListening() { 51 UDP.recvfrom(this.udpClientInstance, function(data, rinfo, err) { 52 console.log("recvfrom callback " + err); 53 if (err === -4) { 54 this.emit('error', 'udp client receive data error'); 55 return; 56 } 57 if (err > 0) { 58 this.emit('message', data, rinfo); 59 } 60 }.bind(this)); 61 }; 62} 63 64export function createSocket(options) { 65 return new UDPClient(options); 66}