Comunidad de diseño web y desarrollo en internet online

Cairngorm 3: Utilizar "Task library"

Como algunos sabrán, tenemos una nueva version de Cairngorm, la numero 3

Empecé investigando la que mas me llamó la atencion : Task Library
Les dejo acá algunos bloques de codigo de como utilizar esta libreria ya que amplia y mejora el concepto de commands que teniamos de la versión anterior de Cairngorm.

Una vez agregado el "task-1.7.swc" a la carpeta libs de su proyecto pueden hacer algo como esto:

Recomiendo leer de que se trata Task libraries previamente para comprender mejor su funcionamiento

Clase que solicita la ejecución de tareas en secuencia


StartupMainController.as

Código :

      /**
       * Desencadena en forma secuencial las cargas necesarias para el proyecto
       */
      public function firstSequenceTasks():void {
         var task:StartUpSequenceProcess = new StartUpSequenceProcess();
         task.addEventListener(TaskEvent.CHILD_START, onTaskStart, false, 0, true);
         task.addEventListener(TaskEvent.TASK_PROGRESS, onTaskProgress, false, 0, true);
         task.addEventListener(TaskEvent.CHILD_COMPLETE, onTaskComplete, false, 0, true);
         task.addEventListener(TaskEvent.CHILD_FAULT, onTaskFault, false, 0, true);
         
         task.addChild(new ReadAppConfigTask());
         task.addChild(new LoadUserProfileTask());
         task.start();
      }
      
      private function onTaskStart(event:TaskEvent):void {
         trace('onSequenceStart');
      }
      
      private function onTaskProgress(event:TaskEvent):void {
         trace('onSequenceProgress');
      }
      
      private function onTaskComplete(event:TaskEvent):void {
         trace('onSequenceComplete');
      }
      
      private function onTaskFault(event:TaskEvent):void {
         trace('onSequenceFault');
      }

Notar que para iniciar la secuencia se debera ejecutar el metodo .start() luego de su configuracion inicial.


Extensión de la clase SequenceTask de Cairngorm haciendo override de metodos muy necesarios en el futuro


StartUpSequenceProcess.as

Código :

   public class StartUpSequenceProcess extends SequenceTask
   {
      
      public function StartUpSequenceProcess() {
         super();
      }
      
      override protected function performTask():void {
         super.performTask();
      }
      
      override protected function onChildTaskComplete(event:TaskEvent):void {
         super.onChildTaskComplete(event);
      }
      
      override protected function onChildTaskFault(event:TaskEvent):void {
         super.onChildTaskFault(event);
      }
   }


Extension de la clase Task despachando eventos necesarios para informar el estado de la tarea


BaseTask

Código :

   /**
    * Clase base para los task, implementa el disparo de los eventos que debe tener cada Task concreto/final
    */
   public class BaseTask extends Task
   {
      public function BaseTask() {
         super();
      }
      
      override protected function performTask():void {
         this.dispatchEvent(new TaskEvent(TaskEvent.TASK_START, this));
      }
      
      override protected function complete():void {
         this.dispatchEvent(new TaskEvent(TaskEvent.TASK_COMPLETE, this));
      }
      
      override protected function fault(message:String = null):void {
         this.dispatchEvent(new TaskEvent(TaskEvent.TASK_FAULT, this));
      }
   }


Tarea concreta en la que se deberá escribir el código que realiza dicha tarea


ReadAppConfigTask.as

Código :

   /**
    * Clase encargada de leer la configuracion de la aplicacion
    */ 
   public class ReadAppConfigTask extends BaseTask
   {
      
      public function ReadAppConfigTask() {
         super();
      }
      
      override protected function performTask():void {
         super.performTask();
         // write your code after call to super class
         trace('ReadAppConfigTask performTask');
         this.complete();
      }
      
      override protected function complete():void {
         trace('read app complete');
         // write your code before call to super class
         super.complete();
      }
      
      override protected function fault(message:String = null):void {
         trace('read app fault');
         // write your code before call to super class
         super.fault(message);
      }      
   }


Tarea concreta en la que se deberá escribir el código que realiza dicha tarea


LoadUserProfileTask.as

Código :

   /**
    * Clase encargada de leer la configuracion del usuario
    */
   public class LoadUserProfileTask extends IPTBaseTask
   {
      public function LoadUserProfileTask() {
         super();
      }
      
      override protected function performTask():void {
         super.performTask();
         // write your code after call to super class
         trace('LoadUserProfileTask performTask');
//         this.complete();
         this.fault("NO funciona masss!");
      }
      
      override protected function complete():void {
         trace('load user complete');
         // write your code before call to super class
         super.complete();
      }
      
      override protected function fault(message:String = null):void {
         trace('load user fault');
         // write your code before call to super class
         super.fault(message);
      }
   }


Espero que les sirva esta pequeña ayuda, cuando investigue las demás librerías vuelvo a escribir, slds.

Lucas

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate