3030 */
3131"use strict" ;
3232
33+ var events = require ( 'events' ) ;
34+
35+ var g_emitter = new events . EventEmitter ( ) ;
36+
3337/**
3438 * @module
3539 */
@@ -47,7 +51,6 @@ var getIpAddress = (function() {
4751 var os = require ( 'os' ) ;
4852
4953 return function ( ) {
50-
5154 var now = Date . now ( ) ;
5255 if ( ! addresses || now - lastRead > cacheTime ) {
5356 lastRead = now ;
@@ -66,21 +69,59 @@ var getIpAddress = (function() {
6669 } ;
6770} ( ) ) ;
6871
69- var getOneIpAddress = function ( ) {
70- var address ;
71- var addresses = getIpAddress ( ) ;
72+ var arraysEqual = function ( a , b ) {
73+ if ( ( ! a && b ) || ( ! b && a ) ) {
74+ return false ;
75+ }
76+
77+ if ( a . length != b . length ) {
78+ return false ;
79+ }
7280
73- if ( addresses . length < 1 ) {
74- console . error ( "No IP address found!!!" ) ;
75- } else {
76- address = addresses [ 0 ] ;
77- if ( addresses . length > 1 ) {
78- console . log ( "more than 1 IP address found: " + addresses ) ;
81+ var len = a . length ;
82+ for ( var ii = 0 ; ii < len ; ++ ii ) {
83+ if ( a [ ii ] !== b [ ii ] ) {
84+ return false ;
7985 }
8086 }
81- return address ;
87+ return true ;
8288} ;
8389
90+ var getOneIpAddress = ( function ( ) {
91+ var lastAddress ;
92+ var oldAddresses ;
93+
94+ return function ( ) {
95+ var address ;
96+ var addresses = getIpAddress ( ) ;
97+
98+ if ( addresses . length < 1 ) {
99+ console . error ( "No IP address found!!!" ) ;
100+ } else {
101+ address = addresses [ 0 ] ;
102+ if ( addresses . length > 1 ) {
103+ var newAddresses = addresses . slice ( ) . sort ( ) ;
104+ if ( ! arraysEqual ( newAddresses , oldAddresses ) ) {
105+ console . log ( "more than 1 IP address found: " + addresses ) ;
106+ oldAddresses = newAddresses ;
107+ }
108+ }
109+ }
110+
111+ if ( address !== lastAddress ) {
112+ lastAddress = address ;
113+ g_emitter . emit ( 'changed' , lastAddress ) ;
114+ }
115+
116+ return address ;
117+ } ;
118+ } ( ) ) ;
119+
84120exports . getIpAddress = getIpAddress ;
85121exports . getOneIpAddress = getOneIpAddress ;
122+ exports . on = g_emitter . on . bind ( g_emitter ) ;
123+ exports . addListener = exports . on ;
124+ exports . removeListener = g_emitter . removeListener . bind ( g_emitter ) ;
125+
126+
86127
0 commit comments