Skip to content

Instantly share code, notes, and snippets.

@destroytoday
Created November 22, 2010 06:07
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save destroytoday/709593 to your computer and use it in GitHub Desktop.
Save destroytoday/709593 to your computer and use it in GitHub Desktop.
package com.destroytoday.example
{
public class AccountController
{
[Inject]
public var signalBus:SignalBus;
[Inject]
public var twitterService:TwitterService;
[Inject]
public var userModel:UserModel;
public function AccountController()
{
}
public function login(screenName:String, password:String):void
{
promise = twitterService.getAccessToken(screenName, password);
promise.completed.add(getAccessTokenCompletedHandler);
promise.failed.add(getAccessTokenFailedHandler);
}
protected function getAccessTokenCompletedHandler(promise:IPromise):void
{
userModel.accessToken = promise.result as XAuthToken;
}
protected function getAccessTokenFailedHandler(promise:IPromise):void
{
signalBus.loginFailed.dispatch(promise.error as String);
}
}
}
package com.destroytoday.example
{
public class TwitterService
{
protected var promisePool:ObjectPool;
protected var promiseMap:ObjectMap;
public function TwitterService()
{
promisePool = new ObjectPool(Promise);
promiseMap = new ObjectMap();
}
public function getAccessToken(screenName:String, password:String):IPromise
{
var loader:URLLoader = new URLLoader();
var promise:IPromise =
promiseMap.mapValue(loader, promisePool.getObject());
/* parse OAuth signature */
/* set loader params */
/* add loader listeners */
loader.load(request);
return promise;
}
protected function getAccessTokenCompletedHandler(event:Event):void
{
var promise:IPromise = promiseMap.unmapValue(event.currentTarget);
promise.dispatchResult(event.data);
promisePool.dispose(promise);
}
protected function getAccessTokenFailedHandler(event:IOErrorEvent):void
{
var promise:IPromise = promiseMap.unmapValue(event.currentTarget);
promise.dispatchError(event.message);
promisePool.dispose(promise);
}
}
}
package com.destroytoday.example
{
public class TwitterService
{
protected var promisePool:ObjectPool;
protected var promiseMap:ObjectMap;
public function TwitterService()
{
promisePool = new ObjectPool(Promise);
promiseMap = new ObjectMap();
}
public function getAccessToken(screenName:String, password:String):IPromise
{
var loader:URLLoader = new URLLoader();
var promise:IPromise =
promiseMap.mapValue(loader, promisePool.getObject());
promise.addResultProcessor(processGetAccessTokenResult);
/* parse OAuth signature */
/* set loader params */
/* add loader listeners */
loader.load(request);
return promise;
}
/* insert other API methods here */
protected function processGetAccessTokenResult(result:*):*
{
return TwitterParser.parseToken(result);
}
/* insert other API method result processors here */
protected function completedHandler(event:Event):void
{
var promise:IPromise = promiseMap.unmapValue(event.currentTarget);
promise.dispatchResult(event.data);
promisePool.dispose(promise);
}
protected function failedHandler(event:IOErrorEvent):void
{
var promise:IPromise = promiseMap.unmapValue(event.currentTarget);
promise.dispatchError(event.message);
promisePool.dispose(promise);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment