On 08/12/2010 02:23 PM, Kevin Qiu wrote:
> Thanks for taking the time. Although it's not clear what action you put
> in the timer and what the timer is supposed to do 

It's a "processing occurring" timer. I think I mentioned it earlier, so
I didn't remove it from the example.

> (IncrementalCommand is executed by DeferredCommand.CommandExecutor
> and it already has a timer with timeslice set to 100ms).

Right.

> Also, I suppose you need to reset the "busy" flag in the callback of
> the asynchronous calls.

Yes. You already had that bit sussed. The case statement asynchronously
drains the command queue, while providing a structure that synchronously
resolves to a "final" command step.

> I'm still a bit incredulous but I'll give it a try. Thanks again :)

Feel free to ask.

> 
> Cheers,
> 
> On Thu, Aug 12, 2010 at 4:43 PM, Jeff Chimene <[email protected]
> <mailto:[email protected]>> wrote:
> 
>     On 08/12/2010 12:50 PM, Kevin Qiu wrote:
>     > After some thought, I don't think putting it in IncrementalCommand and
>     > execute with DeferredCommand help much here. Jeff, If I understand you
>     > correctly, my execute method will look like this:
>     >
>     > class Executor {
>     >   // declaration of list of commands
>     >   void execute() {
>     >     DeferredCommand.addCommand(new IncrementalCommand() {
>     >       boolean executing;
>     >       int currentIdx;
>     >
>     >       public boolean execute() {
>     >         if (executing) return true;  // executor will keep looping
>     >         // it's my turn now
>     >         executing = true;
>     >         AsyncCommand cmd = commands.get(currentIdx);
>     >         cmd.execute(new AsyncCallback() {
>     >           public void onFailure(Throwable e) { onSuccess(null); }
>     >           public void onSuccess(Object o) {
>     >             executing = false;
>     >             ++currentIdx;
>     >           }
>     >       }
>     >       // return point
>     >   }
>     > }
>     >
>     > The above method is actually still non-blocking. There's no guarantee
>     > that my incremental command will finish executing before I reach
>     > //return point. Did I miss anything?
> 
>     Looking at your code a bit more closely (and while composing an
>     example), I see that you want something that requires a bit more
>     structure.
> 
>     You have the IncrementalCommand() correctly implemented. Forget my
>     previous answer.
> 
>     Now that I really understand what you're asking (I think)...
> 
>     I solve the problem using a state machine. Notice how the SM loops on
>     DICTIONARYREAD until the command queue is empty.
> 
>     DeferredCommand.addCommand(new IncrementalCommand() {
>      @Override
>      public boolean execute() {
>        switch (startupState) {
>          case INITIAL:
>            timer.scheduleRepeating(600);
>            startupState = StartupState.DICTIONARYREAD;
>            break;
> 
>          case DICTIONARYREAD:
>            if (dictionaryRequest.getDictionaryPages()) {
>               break;
>            }
> 
>            startupState = StartupState.FINAL;
>            break;
> 
>          case FINAL:  // Kevin's RETURN POINT?
>            timer.cancel();
>            return false; // command is complete
>          }
>        return true;
>     });
> 
>     public boolean getDictionaryPages() {
>      while (dictionaryRequestList.size() > 0) {
>        if (busy) {
>          return true;
>        }
>        dictionaryRequestList.pop().execute(); // RPC and BUSY mutex
>      }
>      return false;
>     }
> 
>     --
>     You received this message because you are subscribed to the Google
>     Groups "Google Web Toolkit" group.
>     To post to this group, send email to
>     [email protected]
>     <mailto:[email protected]>.
>     To unsubscribe from this group, send email to
>     [email protected]
>     <mailto:google-web-toolkit%[email protected]>.
>     For more options, visit this group at
>     http://groups.google.com/group/google-web-toolkit?hl=en.
> 
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Google Web Toolkit" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-web-toolkit?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to