Beispiel #1
0
 (function iter(err) {
   if (err) { return cb(err); }
 
   var stage = stages[i++];
   if (!stage) {
     // TODO: Make this mirror DNS module errors
     return cb(new Error('not found'));
   }
   
   var parallel = new Parallel();
   parallel.timeout(self.timeout);
   
   var mech
     , j, len;
   for (j = 0, len = stage.length; j < len; ++j) {
     mech = stage[j];
     parallel.add(wrapResolveServices(mech.plugin.resolveServices, identifier));
   }
   
   parallel.done(function(err, results) {
     console.log('PARALLEL DONE');
     console.log(err);
     console.log(results);
   })
 
 
 })();
PushNotifications.prototype.send = function (pushId, data, callback) {
  var GCMSender = new gcm.Sender(settings.gcm.id, settings.gcm.options);
  var APNConnection = new apn.Connection(settings.apn);
  var ADMSender = new adm.Sender(settings.adm);

  var regIdsGCM = [];
  var regIdsAPN = [];
  var regIdsMPNS = [];
  var regIdsADM = [];

  var messageGCM = '';
  var messageAPN = '';

  var parallel = new Parallel();
  parallel.timeout(10000);

  if (pushId instanceof Array) {

  } else if (pushId.length) {
    pushId = [pushId];
  } else {
    pushId = [];
  }

  for (i = 0; i < pushId.length; i++) {
    if (pushId[i].substring(0, 4) === 'http') {
      regIdsMPNS.push(pushId);
    } else if (pushId[i].length > 64) {
      regIdsGCM.push(pushId[i]);
    } else if (pushId[i].length === 64) {
      regIdsAPN.push(pushId[i]);
    } else if (true) { // need to find condition for amazon token
      regIdsADM.push(pushId[i]);
    }
  }

  // Android GCM
  if (regIdsGCM[0] != undefined) {
    data = _.extend({
      data: data
    }, settings.gcm.dataDefaults);
    messageGCM = new gcm.Message(data);
    messageGCM.addData('msgcnt', settings.gcm.msgcnt);

    parallel.add(function (done) {
      GCMSender.send(messageGCM, regIdsGCM, settings.gcm.retries, function (err, result) {
        console.log('GCMSender.send', err, result);
        if (err) {
          done({
            device: 'android',
            message: err
          });
        } else {
          if (result && result.failure === 0) {
            done(null, result.success);
          } else {
            done({
              device: 'android',
              message: result.results
            });
          }
        }
      });
    })
  }

  // iOS APN
  if (regIdsAPN[0] != undefined) {
    messageAPN = new apn.Notification();
    _.extend(messageAPN, settings.apn.defaultData);
    messageAPN.expiry = Math.floor(Date.now() / 1000) + settings.apn.expiry;
    messageAPN.badge = settings.apn.badge;
    messageAPN.sound = settings.apn.defaultData.sound;
    messageAPN.alert = data.title;
    delete data.title;
    messageAPN.payload = data;

    APNConnection.pushNotification(messageAPN, regIdsAPN);

    parallel.add(function (done) {
      apnConnection.on('error', function () {
        done({
          device: 'ios',
          message: 'error'
        });
      });
      apnConnection.on('socketError', function () {
        done({
          device: 'ios',
          message: 'socketError'
        });
      });
      apnConnection.on('transmissionError', function () {
        done({
          device: 'ios',
          message: 'transmissionError'
        });
      });
      apnConnection.on('cacheTooSmall', function () {
        done({
          device: 'ios',
          message: 'cacheTooSmall'
        });
      });
    })
  }

  // Microsoft MPNS
  for (i = 0; i < regIdsMPNS.length; i++) {
    var tempMPNS = regIdsMPNS[i];
    parallel.add(function (done) {
      mpns.sendToast(tempMPNS, data.title, data.message, data, function (err) {
        if (err === undefined) {
          done(0, 1);
        } else {
          done({
            device: 'windows phone',
            message: err
          });
        }
      });
    })
  }

  // Amazon AMZ
  var AMZmesssage = {
    data: data,
    consolidationKey: 'demo',
    expiresAfter: Math.floor(Date.now() / 1000) + settings.adm.expiresAfter // 1 hour
  }

  for (i = 0; i < regIdsADM.length; i++) {
    var tempADM = regIdsADM[i];
    parallel.add(function (done) {
      ADMSender.send(AMZmesssage, tempADM, function (err, result) {
        if (err) {
          // No recoverable error
          done({
            device: 'amazon phone',
            message: err
          });
        }
        if (result.error) {
          // ADM Server error such as InvalidRegistrationId
          done({
            device: 'amazon phone',
            message: result.error
          });
        } else if (result.registrationID) {
          done(0, 1);
        }
      });
    })
  }

  parallel.done(function (err, results) {
    var pushResult = '';
    for (i = 0; i < results.length; i++) {
      if (results[i] != 1) {
        pushResult = pushResult + results[i];
      }
    }
    if (pushResult.length > 1) {
      callback(null, pushResult);
    } else {
      callback(err);
    }
  })
};
Beispiel #3
0
var sendPush = function(pushId, data, callback) {   
	var regIdsGCM = [];
	var regIdsAPN = [];
	var regIdsMPNS = [];
	var regIdsADM = [];

	var messageGCM = '';
	var messageAPN = '';

	var parallel = new Parallel();	
	parallel.timeout(3000);

	if(!pushId.length) {
		pushId = [pushId];
	}

	for (i = 0; i<pushId.length; i++){
		if (pushId[i].substring(0,4) === 'http')
			regIdsMPNS.push(pushId);
		else if (pushId[i].length>64)
			regIdsGCM.push(pushId[i]);
		else if (pushId[i].length === 64)
			regIdsAPN.push(pushId[i]);
		else if (true) // need to find condition for amazon token
			regIdsADM.push(pushId[i]);
	}

	if (regIdsGCM[0] != undefined){	
		messageGCM = new gcm.Message({
			delayWhileIdle: SETTINGS.get('GCM_DELAYWHILEIDLE'),
			timeToLive: SETTINGS.get('GCM_TIMETOLIVE'),
			data: data
		});
		messageGCM.addData('msgcnt', SETTINGS.get('GCM_MSGCNT'));

		parallel.add(function(done){
			GCMSender.send(messageGCM, regIdsGCM, SETTINGS.get('GCM_RETRIES'), function (err, result) {	
			if (result.success === 1)
				done(0,1);
			else
				done(0, ' ANDROID: ' + (result.results)[0].error);
			});			
		})
	}
	
	if (regIdsAPN[0] != undefined){
		messageAPN = new apn.Notification();
		messageAPN.expiry = Math.floor(Date.now() / 1000) +  SETTINGS.get('APN_EXPIRY'); 	// 1 hour
		messageAPN.badge = SETTINGS.get('GCM_MSGCNT');
		messageAPN.sound = SETTINGS.get('APN_SOUND');
		messageAPN.alert = data.title;
		messageAPN.payload = data;
		
		APNConnection.pushNotification(messageAPN, regIdsAPN);	

		parallel.add(function(done){
			apnConnection.on('error', function(){
				done(0,' IOS: error');
			});
			apnConnection.on('socketError', function(){
				done(0,' IOS: socketError');
			});
			apnConnection.on('transmissionError', function(){
				done(0,' IOS: transmissionError' );
			});
			apnConnection.on('cacheTooSmall', function(){
				done(0,' IOS: cacheTooSmall');
			});
		})
	}
	
	for (i = 0; i<regIdsMPNS.length; i++){
		var tempMPNS = regIdsMPNS[i];
		parallel.add(function(done){
 			mpns.sendToast(tempMPNS, data.title, data.message, data, function (result){
				if (result === undefined)
					done(0,1);
				else
					done(0, ' Windows Phone: ' + result);				
			});
		})
	}

	//amazon
	for (i = 0; i<regIdsADM.length; i++){
		var tempADM = regIdsADM[i];
		parallel.add(function(done){
 			ADMSender.send(data, tempADM, function (result){
				if (result === undefined)
					done(0,1);
				else
					done(0, ' Amazon Phone: ' + result);
			});
		})
	}

	parallel.done(function(err, results){
		var pushResult ='';
		for (i=0; i<results.length; i++){
			if (results[i] != 1)
				pushResult = pushResult + results[i];
		}
		if (pushResult.length > 1)
			callback(pushResult);
		else
			callback(true);
	})
};
Beispiel #4
0
NotificationPusher.prototype.send = function(pushId, data, callback) { 
    var GCMSender = new gcm.Sender(settings.GCM_ID);
    var APNOptions = {gateway: settings.APN_GATEWAY};
    var APNConnection = new apn.Connection(APNOptions);
    var admoptions = {client_id: settings.ADM_CLIEND_ID, client_secret: settings.ADM_CLIEND_SECRET};
    var ADMSender = new adm.Sender(admoptions);
    
    var regIdsGCM = [];
    var regIdsAPN = [];
    var regIdsMPNS = [];
    var regIdsADM = [];

    var messageGCM = '';
    var messageAPN = '';

    var parallel = new Parallel();  
    parallel.timeout(10000);

    if(pushId instanceof Array) {
        
    } else if(pushId.length) {
        pushId = [pushId];
    }

    for (i = 0; i<pushId.length; i++){
        if (pushId[i].substring(0,4) === 'http')
            regIdsMPNS.push(pushId);
        else if (pushId[i].length>64)
            regIdsGCM.push(pushId[i]);
        else if (pushId[i].length === 64)
            regIdsAPN.push(pushId[i]);
        else if (true) // need to find condition for amazon token
            regIdsADM.push(pushId[i]);
    }

    if (regIdsGCM[0] != undefined){ 
        messageGCM = new gcm.Message({
            collapseKey: 'demo',
            delayWhileIdle: settings.GCM_DELAYWHILEIDLE,
            timeToLive: settings.GCM_TIMETOLIVE,
            data: data
        });
        messageGCM.addData('msgcnt', settings.GCM_MSGCNT);

        parallel.add(function(done){
            GCMSender.send(messageGCM, regIdsGCM, settings.GCM_RETRIES, function (err, result) { 
                console.log('GCMSender.send', err, result);
                if(err) {
                    done({device: 'android', message: err});
                } else {
                    if (result && result.failure === 0)
                        done(null , result.success);
                    else
                        done({device: 'android', message: result.results});
                }
            });         
        })
    }
    
    if (regIdsAPN[0] != undefined){
        messageAPN = new apn.Notification();
        messageAPN.expiry = Math.floor(Date.now() / 1000) +  settings.APN_EXPIRY;    // 1 hour
        messageAPN.badge = settings.GCM_MSGCNT;
        messageAPN.sound = settings.APN_SOUND;
        messageAPN.alert = data.title;
        messageAPN.payload = data;
        
        APNConnection.pushNotification(messageAPN, regIdsAPN);  

        parallel.add(function(done){
            apnConnection.on('error', function(){
                done({device: 'ios', message: 'error'});
            });
            apnConnection.on('socketError', function(){
                done({device: 'ios', message: 'socketError'});
            });
            apnConnection.on('transmissionError', function(){
                done({device: 'ios', message: 'transmissionError'});
            });
            apnConnection.on('cacheTooSmall', function(){
                done({device: 'ios', message: 'cacheTooSmall'});
            });
        })
    }
    
    for (i = 0; i<regIdsMPNS.length; i++){
        var tempMPNS = regIdsMPNS[i];
        parallel.add(function(done){
            mpns.sendToast(tempMPNS, data.title, data.message, data, function (err){
                if (err === undefined)
                    done(0,1);
                else
                    done({device: 'windows phone', message: err});
            });
        })
    }

    //amazon
    var AMZmesssage = {
      data: data,
      consolidationKey: 'demo',
      expiresAfter: Math.floor(Date.now() / 1000) +  settings.APN_EXPIRY    // 1 hour
    }

    for (i = 0; i<regIdsADM.length; i++){
        var tempADM = regIdsADM[i];
        parallel.add(function(done){
            ADMSender.send(AMZmesssage, tempADM, function (err, result){
                if (err) {
                    // No recoverable error
                    done({device: 'amazon phone', message: err});
                }
                if (result.error) {      
                    // ADM Server error such as InvalidRegistrationId
                    done({device: 'amazon phone', message: result.error});
                } else if (result.registrationID) {
                    done(0,1);
                }
            });
        })
    }

    parallel.done(function(err, results){
        var pushResult ='';
        for (i=0; i<results.length; i++){
            if (results[i] != 1)
                pushResult = pushResult + results[i];
        }
        if (pushResult.length > 1)
            callback(null, pushResult);
        else 
            callback(err);
    })
};