emptyQueue:function (clientId) {
    if (!this._server.hasConnection(clientId)) {
      this._server.debug('Does not have connection for: ?', clientId);
      return;
    }

    var key = this._ns + '/clients/' + clientId + '/messages',
      self = this,
      redis = this._getShard(clientId).redis,
      multi = redis.multi();

    multi.lrange(key, 0, -1, function (error, jsonMessages) {
      if (error) {
        return;
      }

      var messages = jsonMessages.map(function (json) {
        return JSON.parse(json)
      });
      self._server.deliver(clientId, messages);
    });

    multi.del(key);
    multi.exec(function(err) {
      if (err) {
	      self._server.error('redis error from exec: ?', err.message);
      }
    });
  },
Esempio n. 2
0
			redis.get(key, function(err, rs){
				// Параметры запроса
				var params = [];
				// Является ли процесс генератором
				var isGenerator = false;
				/**
				 * prepareData Функция обработки результата
				 */
				var prepareData = function(){
					// Если процесс стал генератором тогда запускаем генерирование сообщений
					if(isGenerator) generator.call(redis);
					// Становимся просто слушателем
					else notGenerator.call(redis);
					// Устанавливаем таймер времени ожидания на 2.5 секунды
					setTimeout(checkGenerator, 2500);
				};
				// Проверяем существует ли генератор
				// Если не существует то создаем себя в качестве генератора
				if(!rs){
					// Запоминаем что процесс стал генератором
					isGenerator = true;
					// Формируем ключ
					params.push(["set", key, appID]);
				// Если мы уже являемся генератором
				} else if(parseInt(rs, 10) === parseInt(appID, 10)) isGenerator = true;
				// Выполняем обработку результата
				if(!isGenerator) prepareData();
				// Если это генератор то обновляем значение
				else {
					// Устанавливаем время жизни ключа в 3 секунды
					params.push(["EXPIRE", key, 3]);
					// Записываем данные в Redis
					redis.multi(params).exec(prepareData);
				}
			});
Esempio n. 3
0
			timer = setInterval(function(){
				// Ключа сообщения
				var key = "message";
				// Выполняем чтение данных
				var params = [
					["set", key, getMessage()],
					["EXPIRE", key, 3]
				];
				// Отправляем сообщения в Redis
				redis.multi(params).exec();
			}, 500);
      }), function(err) {
        // ... and then clear out the client, and trigger a close event.
        if (err) {
          if (callback) callback.call(context);
          return;
        }

        var multi = redis.multi();

        multi.del(self._ns + '/clients/' + clientId + '/messages');
        multi.zrem(self._ns + '/clients', clientId);
        multi.publish(shard.closeChannel, clientId);

        multi.exec(function(err, results) {
          if (err) {
            if (callback) callback.call(context);
            return;
          }

          self._server.debug('Destroyed client ?', clientId);
          self._server.trigger('disconnect', clientId);
          if (callback) callback.call(context);
        });
      });