'SystemManager'에 해당되는 글 1건
2008.09.07 02:05
본 포스트는 Adobe Flex 공식사이트에서 진행하는  8월 RIA EVENT - 기술문서 리뷰 이벤트, Flash편 응모하기 위하여 작성 된 글입니다.


제가  리뷰하려고 하는 기술문서는 오창훈님께서 작성하신 'Flex와 Flash간의 파라미터 주고 받기' 라는 제목의 기술문서입니다. (이 글을 읽지 않으신 분께서는 링크를 클릭하셔서 우선 기술문서를 읽으신 후 제 포스트를 읽으시면 도움이 되실 것이라 생각됩니다. ) 위 기술문서에서는 swf 파일끼리의 파라미터의 전달에 대해서 다루고 있습니다. 크게 2가지 관점에서 이야기를 전개하고 있는데요, 해당 그림을 인용하자면 아래와 같습니다.
1. swf에서 다른 swf파일을 로드하는 경우

1. swf에서 다른 swf파일을 로드하는 경우

2. 서로 다른 영역에서 파라미터를 공유해야 하는 경우

2. 서로 다른 영역에서 파라미터를 공유해야 하는 경우


위의 문서에는 '1. swf에서 다른 swf파일을 로드하는 경우' 에서
  • url 을 통한 데이터 전달 (파라미터)
  • ApplicationDomain
'2. 서로 다른 영역에서 파라미터를 공유해야 하는 경우' 에서는
  • ExternalInterface를 이용하는 방법
  • LocalConnection을 이용하는 방법
들을 알아보고 있습니다. 이미 완성된 기술문서인만큼 서로간의 파라미터 주고 받기에 대해서는 더할나위 없이 탄탄한 내용이라 할 수 있겠습니다. 처음의 예를 들어주신 URL 뒤에 파라미터를 넣는 방법은 아주 유용한 방법입니다. swf 의 상호간의 파라미터전달 뿐만이 아니라 저 같은 경우에는 WebService나 HTTPService를 사용하는 Flex 어플에서 접속해야 할 서버주소를 파라미터를 통해서 지정하는 방법을 주로 쓰고 있습니다. 이 때 장점은 코드 내에 서버접속 주소를 하드코딩하지 않아도 된다는 장점이 있죠.

이 리뷰를 쓰게된 이유는 기술문서에서 언급하고 있지는 않지만 Flex에서 swf 파일을 로드한 경우 간편하게 swf에 접근할 수 있는 방법이 있기에 그 것을 언급하기 위함입니다. (물론 물질에 눈이 멀어서라는 이유도...) Flex에서 swf 를 SWFLoader를 통해 로드시, 해당 swf 가 ActionScript 3.0 으로 제작된 것이면 간편하게 SWFLoader 객체의 content 속성을 통해서 Flash 의 경우 MovieClip, Flex 의 경우 SystemManager 형태로 접근이 가능합니다.

Flash와 Flex 두 경우 모두 소개해보고자 합니다. 로드되는 swf 파일들은 동일하게 아래와 같이 간단하게 메소드를 제공하고 있습니다.

위의 코드에서 보이시는 myImage 라는 것은 Flex 의 경우 Image 객체, Flash 의 경우 MovieClip의 인스턴스명입니다. iconVisual 라는 속성을 통해 현재 myImage 가 visible 상태를 제어할 수 있게 됩니다. 위의 swf 를 로드하는 예제코드는 아래와 같습니다.



실제 결과물을 보시려면 이미지를 클릭하여주세요.
swf 경로명 관련, 티스토리에 직접 업로드가 힘들어 링크를 걸었습니다.

위의 코드에서 보실 수 있 듯
, Flex 에서 만든 swf 는 SystemManager 로 접근하게 되어 SystemManager 의 application을 불러온 swf 명으로 캐스팅 하여 해당 메소드에 접근하시면 되겠습니다. Flash 의 경우는 MovieClip 형태로 들어오게 됩니다. 직접 메소드를 호출하셔도 됩니다.
물론 메소드를 호출하고 있는 예제입니다만, 각 객체들을 직접 접근하시는 것도 가능합니다. 다만, 다른 개발자와 협업이 이루어져야 된다면 특정 메소드를 구현하기로 사전에 정해놓고 그대로 사용하는게 더욱 좋겠죠? ;)
여기서 살짝 짚고 넘어가야 되는 부분은 swf가 SWFLoader에 embed 되어있는 경우는 위의 방법대로는 사용이 안된다는 것입니다. (코드를 확인해보세요. embed 안되어있죠?) embed 시에는 MovieClipLoaderAsset 형태로 들어있기때문에 위의 방법으로 접근이 불가합니다. embed시에는 어떻게 해야되는지는 잘 모르겠네요 ;^(

안타깝게도 AS2.0 으로 제작된 swf 또한 위와 같은 방법으로 접근이 불가합니다. AS 3.0 부터는 기존의 AS1.0 및 AS2.0에서 사용되던 AVM(Actionscript Virtual Machine) 과는 다른 AVM 을 사용하고 있습니다. 이전버전의 AVM을 AVM1, AS3.0 이 실행되는 AVM은 AVM2 이라고 명명합니다. (물론 Flash Player 9 버전 이후부터는 AVM1, AVM2 가 둘다 포함되어 있습니다.) AS 1.0 이나 AS 2.0으로 제작된 swf 파일의 경우 Flex(AS 3.0) 에서 로드될 경우 AVM1Movie이라는 이름의 객체로 할당이 되게 되는데요, AVM1Movie 객체와 AVM2 객체 간에 호환성(메서드 호출 또는 매개 변수 사용 등)이 없기때문에, 접근이 불가한 것이죠.
이럴때에 기술문서에서 설명하여주신 LocalConnection을 사용하시면 되겠습니다. LocalConnection에 대해서는 기술문서에 충분히 자세히 설명하고 있으니 더 이상 언급은 하지 않겠습니다. ;)
또 다른 방법도 있는데요, Flash Interface라는 것이 있습니다. 저도 검색하여 찾은 것이라 자세한 내용은 패스~^^;


ps. 코드가 필요하신 분은 위의 swf 에서 마우스 우클릭하셔서 View Source 하시면 다운로드 하실 수 있습니다 ;^)
신고
Favicon of http://2rang.tistory.com BlogIcon 꽃녀 | 2008.09.11 09:17 신고 | PERMALINK | EDIT/DEL | REPLY
헐헐... 역시 부지런함..

쉰님 조만간 뵐수도 있겠네여 ^^
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.11 15:25 신고 | PERMALINK | EDIT/DEL
넵. 캠프때 뵙겠습니다 ;)
Favicon of http://egg.pe.kr BlogIcon egg | 2008.09.11 09:46 신고 | PERMALINK | EDIT/DEL | REPLY
검쉰님 포스팅을 보면서 공부좀 해야겠다는 생각이 절로 듭니다.하하하;
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.11 15:25 신고 | PERMALINK | EDIT/DEL
우리 모두 열공~ ㅎ
Favicon of http://lovedev.tistory.com BlogIcon lovedev | 2008.09.11 12:39 신고 | PERMALINK | EDIT/DEL | REPLY
검쉰님 잘 지내시죠?
와...정리 정말 잘하시네요 ^^;
근데 조금 부끄럽긴 하네요 :)
ApplicationDomain을 이용한 접근 방법이죠.. 맞아요 기술문서에서 언급하지 않았어요 저 방법은 ^^
ApplicationDomain에 대한 이해를 하고 넘어가야 하는 부분이라 이야기가 길어질거 같더군요.

그래서 문서내용에 http://www.adobeflex.co.kr/iwt/board/board.php?tn=pds_tech&id=169&mode=view 이 부분을 참고하라고 넣어 놨었습니다 ^^;;

내용 보충해주셔서 너무 감사드려요~.. 복 받으실꺼에요 ^^
좋은 하루 되세요~

ps: SWFLoader로 swf를 로드하게 되는 경우도 마찬가지로 ApplicationDomain을 활용해서 접근이 가능해요 ^^ SystemManager는 그런 일을 대신 해주는 역할을 하고 있습니다..
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.11 15:27 신고 | PERMALINK | EDIT/DEL
물론 아실꺼라고 생각했습니다. ^^; ApplicationDomain 관련 링크 거신거 보고 말이죠 ㅎ

알면서도 언급한 것은 사실 ApplicationDomain에 대한 이해가 쉽지 않다는 겁니다. ㅎㅎ 저또한 완벽하게 이해하고 있다 하기 어렵고요. 그래서 보다 알기 쉽게 접근할 수 있는 위의 방법을 소개해보았습니다 ;)

그리고 이벤트 응모하려고 쓴거기도..... ;^(
ps. 캠프때 발표 기대하겠습니다 ㅎㅎ
찌노 | 2008.09.12 10:02 신고 | PERMALINK | EDIT/DEL | REPLY
움.. 결국엔 AS2.0 은 접근이 불가한거네요 ; 아주 안되는건 아니지만 .. 번거러운 부분이 없지않아 있네요 ;;
뭐.. 억울하면 AS 3.0 으로 만들어버리라는.. ㅋ
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.12 13:20 신고 | PERMALINK | EDIT/DEL
본문에 있는 Flash Interface 를 이용하면 되는 듯 합니다. 아직 자세하게 살펴보진 않아서 정확하게 말씀드리기가 힘드네요 ㅎ
박스농사 | 2008.09.18 22:10 신고 | PERMALINK | EDIT/DEL | REPLY
음..설마이거 나땜에 쓴거 아니겠죠?
위방법은 아니지만 해결했지롱~
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.19 14:13 신고 | PERMALINK | EDIT/DEL
다른 방법도 가르켜주시라요~
- 덧글 좀..(굽신굽신) : 장문의 덧글은 트랙백을 이용해주세요 ;^)
Name
Password
Homepage
Secret
prev"" #1 next

티스토리 툴바