@@ -81,6 +81,12 @@ module.exports.create = function (spec, on_init_ok, on_init_failed) {
81
81
*/
82
82
var terminals = { } ;
83
83
84
+ /*
85
+ Save internal address for locality node to avoid duplicate `getInternalAddress` RPC.
86
+ internalAddresses = {nodeRpcID: {ip: agentIP, port: internalPort, readyCb: callback}}
87
+ */
88
+ var internalAddresses = { } ;
89
+
84
90
/*
85
91
streams = {StreamID: {owner: terminalID,
86
92
audio: {format: 'pcmu' | 'pcma' | 'isac_16000' | 'isac_32000' | 'opus_48000_2' |...
@@ -419,17 +425,25 @@ module.exports.create = function (spec, on_init_ok, on_init_failed) {
419
425
published : [ ] ,
420
426
subscribed : { } } ;
421
427
on_ok ( ) ;
422
- // Get internal address for new node
423
- if ( ! locality . ip || ! locality . port ) {
428
+ //TODO: trigger terminal ok after getInternalAddress call.
429
+ // The conference logic requires newTerminal finish fast.
430
+ if ( ! internalAddresses [ locality . node ] ) {
431
+ // Get internal address for new node
424
432
makeRPC ( rpcClient , locality . node , 'getInternalAddress' , [ ] ,
425
433
function okCb ( addr ) {
426
434
log . debug ( 'Get internal addr:' , locality . node , addr ) ;
427
- terminals [ terminal_id ] . locality . ip = addr . ip ;
428
- terminals [ terminal_id ] . locality . port = addr . port ;
435
+ internalAddresses [ locality . node ] = { } ;
436
+ internalAddresses [ locality . node ] . ip = addr . ip ;
437
+ internalAddresses [ locality . node ] . port = addr . port ;
438
+ locality . ip = addr . ip ;
439
+ locality . port = addr . port ;
429
440
} ,
430
441
function errCb ( reason ) {
431
442
log . warn ( 'Failed to get internal addr:' , locality . node ) ;
432
443
} ) ;
444
+ } else {
445
+ locality . ip = internalAddresses [ locality . node ] . ip ;
446
+ locality . port = internalAddresses [ locality . node ] . port ;
433
447
}
434
448
} , function ( err ) {
435
449
on_error ( err . message ? err . message : err ) ;
0 commit comments