It seems that on line 136 of URLStream it should be "cleanupCallbacks()" 
instead of "cleanupHandlers()". At least when doing that change, the build 
passes, but I didn't deeply look into your change, so I won't commit that 
change and eventually break your stuff.


Chris

________________________________
Von: Christofer Dutz <christofer.d...@c-ware.de>
Gesendet: Dienstag, 5. Juli 2016 14:35:23
An: dev@flex.apache.org
Betreff: AW: git commit: [flex-asjs] [refs/heads/develop] - Added callbacks

And could you please have a look at the build? Seems the Maven build is failing 
now ...

https://builds.apache.org/view/E-G/view/Flex/job/flex-asjs%20(maven)/90/console


Chris

________________________________
Von: Josh Tynjala <joshtynj...@gmail.com>
Gesendet: Dienstag, 5. Juli 2016 14:07:17
An: dev@flex.apache.org
Betreff: Re: git commit: [flex-asjs] [refs/heads/develop] - Added callbacks

There have been multiple cases where a developer decided to use callbacks
instead of events in their API because they felt that no one would ever
need multiple listeners, and I ended up actually needing them. The
workarounds required can be ugly. Having been there, I try to avoid making
assumptions like that in my own code.

Just my personal experience.

- Josh
On Jul 5, 2016 3:25 AM, "Harbs" <harbs.li...@gmail.com> wrote:

> I’d like to start a discussion on what I did here.
>
> There is a pretty popular pattern in Javascript which allows for chaining
> of callbacks. Instead of lots of addEventListeners and such, you would do
> myClass.doSomething().success(handleSuccess).error(handleError). It’s
> currently giving the class object to the handler, but it could take an
> event object instead. I’m not sure what makes more sense.
>
> You can also specify things like myClass.onError = handleError.
>
> This approach works very well when there’s a single object which needs the
> callbacks. For those types of situations, EventDispatcher is not really
> necessary at all. I’m thinking of removing the dependency on
> EventDispatcher completely for URLLoader and related classes. Requiring
> clients to call add and removeEventListeners is cumbersome and error-prone.
>
> Thoughts?
>
> Harbs
>
> On Jul 5, 2016, at 1:09 PM, ha...@apache.org wrote:
>
> > Repository: flex-asjs
> > Updated Branches:
> >  refs/heads/develop cc22300be -> 298d2041f
> >
> >
> > Added callbacks
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
> > Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/298d2041
> > Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/298d2041
> > Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/298d2041
> >
> > Branch: refs/heads/develop
> > Commit: 298d2041ff2c02c203764ed22fb11e131e4b092e
> > Parents: cc22300
> > Author: Harbs <ha...@in-tools.com>
> > Authored: Tue Jul 5 13:09:05 2016 +0300
> > Committer: Harbs <ha...@in-tools.com>
> > Committed: Tue Jul 5 13:09:05 2016 +0300
> >
> > ----------------------------------------------------------------------
> > .../flex/org/apache/flex/net/URLBinaryLoader.as | 37 +++++++--
> > .../main/flex/org/apache/flex/net/URLLoader.as  | 78 ++++++++++++++++++
> > .../main/flex/org/apache/flex/net/URLStream.as  | 86 +++++++++++++++++++-
> > 3 files changed, 191 insertions(+), 10 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/298d2041/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as
> > ----------------------------------------------------------------------
> > diff --git
> a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as
> b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as
> > index 2dfc490..ff9121b 100644
> > ---
> a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as
> > +++
> b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as
> > @@ -20,7 +20,6 @@ package org.apache.flex.net
> > {
> >
> >     import org.apache.flex.events.Event;
> > -    import org.apache.flex.events.EventDispatcher;
> >     import org.apache.flex.events.ProgressEvent;
> >     import org.apache.flex.utils.BinaryData;
> >
> > @@ -73,43 +72,63 @@ package org.apache.flex.net
> >         {
> >             super();
> >             stream = new URLStream();
> > -            stream.addEventListener(HTTPConstants.COMPLETE, onComplete);
> > +            stream.addEventListener(HTTPConstants.COMPLETE,
> completeHandler);
> >         }
> >
> > +             /**
> > +              *  Makes the URL request.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> >         public function load(request:URLRequest):void
> >         {
> >             stream.load(request);
> >         }
> >
> > +             /**
> > +              *  Cancels the URL request
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> >         public function close():void
> >         {
> >             stream.close();
> > +                     //TODO do we need a callback for camceling?
> >         }
> >
> > -        private function redirectEvent(event:Event):void
> > -        {
> > -            dispatchEvent(event);
> > -        }
> > -
> > -        private function onComplete(event:Event):void
> > +        private function completeHandler(event:Event):void
> >         {
> >             data = stream.response;
> >             if (data)
> >             {
> >                 dispatchEvent(event);
> > +                             if(onComplete)
> > +                                     onComplete(this);
> > +
> >             }
> >             else
> >             {
> >                 // TODO dipatch error event?
> >                 dispatchEvent(new Event(HTTPConstants.IO_ERROR));
> > +                             if(onError)
> > +                                     onError(this);
> >             }
> > +                     cleanupCallbacks();
> >         }
> >
> > -        private function onProgress(event:ProgressEvent):void
> > +        private function progressHandler(event:ProgressEvent):void
> >         {
> >             this.bytesLoaded = event.current
> >             this.bytesTotal = event.total;
> >             dispatchEvent(event);
> > +                     if(onProgress)
> > +                             onProgress(this);
> >         }
> >     }
> > }
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/298d2041/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as
> > ----------------------------------------------------------------------
> > diff --git
> a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as
> b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as
> > index 809e120..102f525 100644
> > ---
> a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as
> > +++
> b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as
> > @@ -86,5 +86,83 @@ package org.apache.flex.net
> >               {
> >                       throw new Error("URLLoader should not be
> instantiated. Use a derived class instead.")
> >               }
> > +
> > +             protected function cleanupCallbacks():void
> > +             {
> > +                     onComplete = null;
> > +                     onError = null;
> > +                     onProgress = null;
> > +             }
> > +             /**
> > +              *  Callback for complete event.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public var onComplete:Function;
> > +
> > +             /**
> > +              *  Callback for error event.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public var onError:Function;
> > +
> > +             /**
> > +              *  Callback for progress event.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public var onProgress:Function;
> > +
> > +             /**
> > +              *  Convenience function for complete event to allow
> chaining.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public function complete(callback:Function):URLLoader
> > +             {
> > +                     onComplete = callback;
> > +                     return this;
> > +             }
> > +
> > +             /**
> > +              *  Convenience function for error event to allow chaining.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public function error(callback:Function):URLLoader
> > +             {
> > +                     onError = callback;
> > +                     return this;
> > +             }
> > +
> > +             /**
> > +              *  Convenience function for progress event to allow
> chaining.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public function progress(callback:Function):URLLoader
> > +             {
> > +                     onProgress = callback;
> > +                     return this;
> > +             }
> >       }
> > }
> > \ No newline at end of file
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/298d2041/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as
> > ----------------------------------------------------------------------
> > diff --git
> a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as
> b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as
> > index 7b5ff89..e2b1654 100644
> > ---
> a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as
> > +++
> b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as
> > @@ -107,6 +107,9 @@ package org.apache.flex.net
> >         protected function flash_complete(event:flash.events.Event):void
> >         {
> >             dispatchEvent(new
> org.apache.flex.events.Event(HTTPConstants.COMPLETE));
> > +                     if(onComplete)
> > +                             onComplete();
> > +                     cleanupCallbacks();
> >         }
> >         COMPILE::SWF
> >         protected function
> flash_progress(event:flash.events.ProgressEvent):void
> > @@ -129,6 +132,9 @@ package org.apache.flex.net
> >             if (xhr.readyState == 4 && xhr.status == 200)
> >             {
> >                 dispatchEvent(new
> org.apache.flex.events.Event(HTTPConstants.COMPLETE));
> > +                             if(onComplete)
> > +                                     onComplete();
> > +                             cleanupHandlers();
> >             }else if (xhr.readyState==4&&xhr.status==404){
> >                 //                    dispatchEvent(new
> IOErrorEvent(IOErrorEvent.IO_ERROR));
> >             }
> > @@ -146,9 +152,87 @@ package org.apache.flex.net
> >             }
> >
> >             //TODO send an event that it's been aborted
> > +
> > +                     cleanupCallbacks();
> > +
> >         }
> > +             private function cleanupCallbacks():void
> > +             {
> > +                     onComplete = null;
> > +                     onError = null;
> > +                     onProgress = null;
> > +             }
> > +             /**
> > +              *  Callback for complete event.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> >         public var onComplete:Function;
> > +
> > +             /**
> > +              *  Callback for error event.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> >         public var onError:Function;
> > -    }
> > +
> > +             /**
> > +              *  Callback for progress event.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public var onProgress:Function;
> > +
> > +             /**
> > +              *  Convenience function for complete event to allow
> chaining.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public function
> complete(callback:Function):org.apache.flex.net.URLStream
> > +             {
> > +                     onComplete = callback;
> > +                     return this;
> > +             }
> > +
> > +             /**
> > +              *  Convenience function for error event to allow chaining.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public function
> error(callback:Function):org.apache.flex.net.URLStream
> > +             {
> > +                     onError = callback;
> > +                     return this;
> > +             }
> > +
> > +             /**
> > +              *  Convenience function for progress event to allow
> chaining.
> > +              *
> > +              *  @langversion 3.0
> > +              *  @playerversion Flash 10.2
> > +              *  @playerversion AIR 2.6
> > +              *  @productversion FlexJS 0.7.0
> > +              */
> > +             public function
> progress(callback:Function):org.apache.flex.net.URLStream
> > +             {
> > +                     onProgress = callback;
> > +                     return this;
> > +             }
> > +}
> > }
> >
> >
>
>

Reply via email to