Quantcast
Channel: Adobe Community : Popular Discussions - Archived Discussions
Viewing all articles
Browse latest Browse all 21156

Can AIR wait/pause/hang/sleep/delay/join until a NativeProcess exits?

$
0
0

Hello!

 

     I am currently working on an Adobe AIR + Javascript application that reads in text files (where the text is in a certain format) and processes the contents into tokens and eventually into JSON. The JSON tokens are then fed to an instance of the YUI treeview. One feature of the program is that it is able to read in a token containing "name@DB", use a NativeProcess instance to execute the curl command from the Command Line Terminal, which fetches an existing JSON object from an online database. My code for handling such a token looks like this:

 

CODE:

 

this.tokenize = function(contents){

     var toks = [];

     toks = contents.split("\n");

     for (var i = 0; i < toks.length; ++ i){

          //Additional token cases are checked before @DB case

 

          else if (toks[i].indexOf("@DB") >= 0){   
               type = "DB Reference";

 

                //Custom function object that stores the name, value, source file, parent Token, and Token type.

                //This allows for the assembly of a JSON token.

                var tok = new Token(name, value, this.name, parent, type);


                //Function to create and execute Native Process.

                //See below for code.

                this.fetch(tok);


                //Array that stores the current files tokens

                this.tokens.push(tok);

          }

          //More token processing

     }

}

 

//FETCH FUNCTION

this.fetch = function(token){

 

   //Name of object to fetch from database
   var name = token.getVal().slice(token.getVal().indexOf(":") + 1, token.getVal().indexOf("@"));


   if(air.NativeProcess.isSupported)
   {
      try
      {

         //air.NativeProcess setup
         var executable = new air.File("/usr/bin/curl");
         var nativeProcessStartupInfo = new air.NativeProcessStartupInfo();
            
         var processArgs = new runtime.Vector["<String>"]();
         processArgs.push("-k");

 

         processArgs.push("https://<URL>/fetch/" + name + "/json");

 

         nativeProcessStartupInfo.arguments = processArgs;
             
         nativeProcessStartupInfo.executable = executable;
         var process = new air.NativeProcess();  

 

 

         //EventListener on STDOUT

         process.addEventListener(air.ProgressEvent.STANDARD_OUTPUT_DATA, onDataOut);

 

         //EventListener on STDERR
         process.addEventListener(air.ProgressEvent.STANDARD_ERROR_DATA, onErrorOut);
                
         process.start(nativeProcessStartupInfo);

 

         //Wait until process exits?


         //Event handler for STDOUT

         function onDataOut(){

 

            //Reads in the reply from the database
            var returnStr = String(process.standardOutput.readUTFBytes(process.standardOutput.byt esAvailable));

 

            //Event listener for when the reply from the database has been processed.

            Commander.dispatcher.addEventListener("DBDone", function(){this.setDBDone(returnStr, token);});

 

            //Tokenize database reply and add the tokens to the token array

            //Dispatches custom air.Event of type="DBDone"

            appendDBTokens(returnStr);
        }

        //Event handler for STDERR
        function onErrorOut(){

 

           //Read in the error message
           var str = String(process.standardError.readUTFBytes(process.standardError.bytes Available));

 

           //Append error message to error message display field
           $("sysOut").value += "Error : " + str + "\n";


        }
     }
     catch(err)
     {
        alert("Error: " + err);
     }
  }
  else
     alert("NativeProcess is not supported!");

};

 

QUESTION:

 

Is there a way for Adobe AIR to wait (I.E. Not execute anymore code) until the NativeProcess "process" exits?

 

ADDITIONAL INFO:

 

The reason I ask is because currently, while the event listeners are waiting for the reply from the database, fetch(token) returns and the for-loop in tokenize(contents) continues to process the rest of the tokens. The first problem with this is that the tokens are now out of order, the second problem is that once tokenize(contents) exits, then the file's tokens are fed to the YUI treeview instance and the tree is built, all before the database reply makes it back. So the tree is being built without the additional tokens from the database. If there is a waitForExit() or some equivalent function, I have thus far been unable to find it in the AIR API Reference materials.

 

SYSTEM/PROGRAM INFORMATION:

 

OS: RedHat Linux

Languages Used: Javascript, HTML

Additional Libraries: YUI, Adobe AIR

 

Thanks, in advance!


Viewing all articles
Browse latest Browse all 21156

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>