2012-05-28 2 views
0

모든 응용 프로그램에서 모든 데이터 액세스 객체 클래스와 공유되는 싱글 톤 패턴 내에 NetConnection 객체가 있다고 가정 해 봅니다. 이제 화면에 가서 실수 나 다른 것을 검색하기 위해 5 천 개의 레코드를로드하라는 요청을 받았습니다. 하지만 이제는 당신이 틀린 화면에 있다는 것을 깨달았고 실제로 다른 "엔터티"로부터 5 천개의 레코드를 원합니다. 데이터가 도착할 때까지 2 분 정도 기다리지 않아도 다른 화면으로 이동하여 다른 데이터를 요청할 수 없게하는 방법은 무엇입니까? NetConnection.close() 이벤트의 주요 발신자로 ESC 버튼을 사용했지만 실제로 작동하지 않습니다. 그것은 단지 빈 이벤트를 보내고 호출은 여전히 ​​반환됩니다. 나는 서버에 자신의 일을 계속하지 말라고 요청할 수 없다는 것을 알고 있지만, ESC 나 그와 비슷한 것을 누른 후에 ActionScript가 더 이상 특정 호출을 신경 쓸 필요가 없다는 것을 어떻게 확신 할 수 있는지 알고 싶습니다. 너의 삶과 함께 움직여 라. 그리고 서버가 해당 호출에 응답 할 때 배경에서 이미 취소하기로 동의했기 때문에이를 버릴 것입니다.NetConnection을 사용하여 AMF 통화를 취소하는 방법은 무엇입니까?

Ps : ESC 버튼을 듣고 몇 가지 방법으로 호출하는 방법에 의심의 여지가 없습니다. 사용자가 데이터 수신을 원하지 않는다고 결정한 후에 무엇을 호출해야하는지 알고 싶습니다. 더 이상 앱을 종료하고 다시 열지 않아도 계속 이동하고 싶어합니다.

편집 :

내가 전화를 한 후 응답자의 오브젝트를 파괴하는 시도했지만 작동하지 않았다. 여기에 설명 된 코드

 public function call(command:String, f:Function, fault:Function, ...parameters):void{ 
     var r:Responder = new Responder(f, fault); 
     this._Responder = r; 
     if(parameters.length == 0) 
      GATEWAY.call(command, _Responder); 
     else 
      GATEWAY.call(command, _Responder, parameters); 
    } 

    public function close():void{   
     _Responder = new Responder(function(obj:Object):void{}, function(obj:Object):void{}); 
     //_Responder = null; 
     trace("Canceled"); 
    } 

, 나는 NetConnection::call에 대한 호출을 중단하고 내가 쓴 '통화 기능 "을 호출하기 시작했다. 따라서이 함수는 클래스 범위에 속할 Responder를 만들었습니다. 그래서 호출이 이루어지고 ESC 버튼이 "Close"함수를 호출 한 후에도 액세스 할 수있었습니다. null로 설정하고 다시 빌드하려고했습니다. 그것은 작동하지 않았다. NetConnection이 호출 한 후 Responder를 변경할 수 없다고 생각합니다.

+0

당신이 싱글 연결 또는이에서 얻을 찾고 어떤 혜택을 사용해야 할 이유가 있나요? 당신이 호출하는 싱글 톤에서 cancel 메서드를 설정하는 것에 상관없이, cancel 메서드에서 새로운 NetConnection을 만들고 사용자가 사용했던 핸들러를 비활성화합니다 (솔직히 직접 NetConnection을 많이 사용하지는 않았지만 우리는 AbstractService RPC 클래스와 IResponder는 유사한 태스크를 구현하기 위해 객체를 구현하지만, 일반적으로 우리는 각각의 서비스 클래스가 아닌 각각의 자바 서비스에 대한 서비스 클래스의 인스턴스를 가지고있다. – shaunhusain

+0

'NetConnection :: close'를 호출하고,'NetConnection' 클래스를 재 빌드하고 객체를 null로 설정하려고했습니다. 또한 NetConnection 객체뿐 아니라 Responder 객체에 대해서도 null을 설정하는 편집에서 지금까지 설명한 내용을 시도했습니다. 아무것도 작동하는 것 같습니다. –

답변

0

NetConnection 클래스에는 AMF 호출 취소가 지원되지 않습니다. 그러나 shaunhusain이 말했듯이, 저장 공간 (배열, 사전은 무엇이든간에)을 싱글 톤 클래스에서 호출 할 수 있으며 호출을 취소하면 해당 호출에 대한 결과 이벤트 리스너를 비활성화해야합니다.

AmfCall의 결과를 기다리는 모듈을 종료하더라도 싱글 톤 클래스의 콜백이 없으므로 다음 화면으로 계속 진행할 수 있습니다.

public class Call 
{ 
var responder:Responder; 
var service:String; 
var params:Array; 

public function Call(service:String, params:Array) 
{ 
    responder = new Responder(this.onResult, this.onFault); 
    this.service = service; 
    this.params = params; 

} 

public function removeListeners():void 
{ 
    removeEventListener(CallEvent.RESULT, onResult); 
} 

public function onResult(result:Object):void 
{ 
    this.result = result; 
    dispatchEvent(new CallEvent(CallEvent.RESULT, callId, result)); 
} 

}

콜 클래스는 결과를받는 이벤트를 파견 할 책임이있다. 그러나 이벤트 리스너가없는 경우 전달 된 이벤트는 모든 클래스에서 수신되지 않습니다.

이 코드 단편은 AmfPhpToolBox에서 가져온 것입니다. 대신이 라이브러리를 사용하여 이러한 모든 문제를 해결할 수 있습니다.

AMFPHPToolBox

+0

NetConnection 클래스로는 그렇게 할 수 없다고 생각합니다. –

+0

내가 말했듯이, NetConnection 클래스를 사용하여 그렇게 할 수는 없으며 대신 자체 결과 이벤트 또는 콜백 함수가있는 호출 클래스를 유지해야합니다. 싱글 톤 클래스를 통해 호출 할 때마다 호출을 로컬 저장소에 넣고 결과 이벤트 리스너를 설정합니다. 호출이 처리되면 결과 이벤트를 전달하십시오. –

관련 문제