¿¹ :ActiveX ÄÁÅ×À̳ʿ¡ ´ëÇÑ External API ÀÇ »ç¿ë

ÀÌ ¿¹´Â, External API ¸¦ »ç¿ëÇÑ, ActiveX ÄÁÆ®·ÑÀ» »ç¿ëÇÏ´Â µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ǰú ActionScript ¿ÍÀÇ »çÀÌÀÇ Åë½ÅÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. ÀÌ ¿¹¿¡¼­´Â, ActionScript ÄÚµå ¹× °°Àº SWF ÆÄÀÏÀ» Æ÷ÇÔÇØ Introvert IM ¸¦ ´Ù½Ã »ç¿ëÇϰí ÀÖ±â (À§ÇØ)¶§¹®¿¡, ActionScript ÀÇ External API ÀÇ »ç¿ë¿¡ ´ëÇØ¼­´Â ¼³¸íÇÏÁö ¾Ê½À´Ï´Ù. Àü¼úÀÇ ¿¹¸¦ Àß ÀÌÇØÇØ µÎ¸é, ÀÌ ¿¹¸¦ ÀÌÇØÇϱ⠽¬¿öÁý´Ï´Ù.

ÀÌ ¿¹ÀÇ µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀº, Microsoft Visual Studio . NET ¸¦ »ç¿ëÇØ C# ·Î ±â¼úµÇ°í ÀÖ½À´Ï´Ù. ¼³¸íÀÇ Áß½ÉÀº, ActiveX ÄÁÆ®·ÑÀ» »ç¿ëÇÑ External API ÀÇ Á¶ÀÛ ¹æ¹ýÀÔ´Ï´Ù. ÀÌ ¿¹´Â, ´ÙÀ½ ÀÏÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.

Introvert IM C# ÆÄÀÏÀº Samples/IntrovertIM_CSharp Æú´õ¿¡ ÀÖ½À´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀº, ´ÙÀ½ÀÇ ÆÄÀÏ·Î ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù.

ÆÄÀÏ

¼³¸í

AppForm.cs

C# Windows Forms ÀÎÅÍÆäÀ̽º·Î ±¸¼ºµÇ´Â ¸ÞÀÎ ¾îÇø®ÄÉÀÌ¼Ç ÆÄÀÏ.

bin/Debug/IntrovertIMApp.swf

¾îÇø®ÄÉÀ̼ǿ¡ ·Îµå µÇ´Â SWF ÆÄÀÏ.

ExternalInterfaceProxy/ExternalInterfaceProxy.cs

External Interface ¿ÍÀÇ Åë½ÅÀ» À§ÇÑ ActiveX ÄÁÆ®·ÑÀÇ ·¡ÆÛ·Î¼­ ±â´ÉÇϴ Ŭ·¡½º. ActionScript ¸¦ È£ÃâÇØ, ActionScript ·ÎºÎÅÍÀÇ È£ÃâÀ» ¼ö½ÅÇϱâ À§ÇÑ ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÕ´Ï´Ù.

ExternalInterfaceProxy/ExternalInterfaceSerializer.cs

Flash Player ÀÇ XML Æ÷¸Ë ¸Þ¼¼Áö¸¦ . NET ¿ÀºêÁ§Æ®·Î º¯È¯ÇÏ´Â task ¸¦ ½ÇÇàÇϴ Ŭ·¡½º.

ExternalInterfaceProxy/ExternalInterfaceEventArgs.cs

ÀÌ ÆÄÀÏÀº, custom Deligate ¿Í À̺¥Æ® Àμö¶ó°í ÇÏ´Â 2 °³ÀÇ C# ŸÀÔ (Ŭ·¡½º)À» Á¤ÀÇÇÕ´Ï´Ù. À̰ÍÀº, ActionScript ·ÎºÎÅÍÀÇ ÇÔ¼ö È£ÃâÀÇ Listener¸¦ ÅëÁöÇϱâ À§ÇØ(¶§¹®¿¡), ExternalInterfaceProxy Ŭ·¡½º¿¡¼­ »ç¿ëµË´Ï´Ù.

ExternalInterfaceProxy/ExternalInterfaceCall.cs

ÀÌ Å¬·¡½º´Â, ÇÔ¼ö¸í°ú ÆÄ¶ó¹ÌÅÍÀÇ properties ¸¦ »ç¿ëÇØ, ActionScript ·ÎºÎÅÍ ActiveX ÄÁÅ×À̳ʿ¡ÀÇ ÇÔ¼ö È£ÃâÀ» ³ªÅ¸³»´Â °ª¿ÀºêÁ§Æ®ÀÔ´Ï´Ù.

bin/Debug/IntrovertIMApp.swf

¾îÇø®ÄÉÀ̼ǿ¡ ·Îµå µÇ´Â SWF ÆÄÀÏ.

obj/AxInterop.ShockwaveFlashObjects.dll,

obj/Interop.ShockwaveFlashObjects.dll

Flash Player (Shockwave® Flash) ActiveX ÄÁÆ®·ÑÀÇ ¾×¼¼½º¿¡ ÇÊ¿äÇÑ Visual Studio . NET ¿¡ ÀÇÇØ, °ü¸® ÄÚµå·ÎºÎÅÍ ÀÛ¼ºµÈ ·¡ÆÛ ¾î¼Àºí¸®.

ºÎ ÁÖÁ¦

Introvert IM C# ¾îÇø®ÄÉÀ̼ÇÀÇ °³¿ä
Shockwave Flash ActiveX ÄÁÆ®·ÑÀÇ Æ÷ÇÔ
ActionScript ·ÎºÎÅÍ ActiveX ÄÁÅ×À̳ʿ¡ÀÇ Åë½Å¿¡ ´ëÇØ
ExternalInterfaceProxy Ŭ·¡½ºÀÇ ³»ºÎ
External API ÀÇ XML Æ÷¸Ë

Introvert IM C# ¾îÇø®ÄÉÀ̼ÇÀÇ °³¿ä

ÀÌ ¾îÇø®ÄÉÀ̼ǿ¹´Â, ¼­·Î Åë½ÅÇÏ´Â 2 °³ÀÇ ÀνºÅÏÆ® ¸Þ¼¼Áö Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ (1 °³Àº SWF ÆÄÀϳ», ÀÌÁ¦(¹ú½á) 1 °³Àº Windows Forms ¿¡ Æ÷ÇÔ)À» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. À¯Àú ÀÎÅÍÆäÀ̽º¿¡´Â, Shockwave® Flash ActiveX ÄÁÆ®·ÑÀÇ ÀνºÅϽº°¡ Æ÷ÇԵǾî ActionScript IM Ŭ¶óÀÌ¾ðÆ®¸¦ Æ÷ÇÔÇÑ SWF ÆÄÀÏÀÌ ·Îµå µË´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¿¡´Â, Windows Forms IM Ŭ¶óÀÌ¾ðÆ®¸¦ ±¸¼ºÇÏ´Â ¸î°³ÀÇ ÅØ½ºÆ® Çʵ嵵 Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. 1 °³Àº ¸Þ¼¼Áö ÀԷ¿ë Çʵå (MessageText)¿¡¼­, ÀÌÁ¦(¹ú½á) 1 °³Àº Ŭ¶óÀÌ¾ðÆ®°£¿¡ ¼Û½ÅµÇ´Â ¸Þ¼¼ÁöÀÇ º¹Á¦ (Transcript)¸¦ Ç¥½ÃÇØ, Á¦ 3 ÀÇ Çʵå (Status)´Â SWF IM Ŭ¶óÀÌ¾ðÆ®·Î ¼³Á¤µÈ availability ½ºÅ×ÀÌÅͽº¸¦ Ç¥½ÃÇÕ´Ï´Ù.

Shockwave Flash ActiveX ÄÁÆ®·ÑÀÇ Æ÷ÇÔ

Shockwave Flash ActiveX ÄÁÆ®·ÑÀ» µ¶ÀÚÀûÀÎ Windows Forms ¾îÇø®ÄÉÀ̼ǿ¡ Æ÷ÇÔÇÏ·Á¸é , ÃÖÃÊ·Î ±×°ÍÀ» Microsoft Visual Studio Toolbox ¿¡ Ãß°¡ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

ÄÁÆ®·ÑÀ» Åø ¹Ú½º¿¡ Ãß°¡ÇÏ·Á¸é :

  1. Visual Studio Toolbox ¸¦ ¿±´Ï´Ù.
  2. Visual Studio 2003 ÀÇ [Windows Æû] ¼½¼Ç, ¶Ç´Â Visual Studio 2005 ÀÇ ÀÓÀÇÀÇ ¼½¼ÇÀ» ¿À¸¥ÂÊ Å¬¸¯ÇÕ´Ï´Ù. Visual Studio 2003 ¿¡¼­´Â context menu·Î [Ç׸ñÀÇ Ãß°¡/»èÁ¦] ¸¦ ¼±ÅÃÇÕ´Ï´Ù. Visual Studio 2005 ¿¡¼­´Â [Ç׸ñÀÇ ¼±ÅÃ...] (À»)¸¦ ¼±ÅÃÇÕ´Ï´Ù.

    À̰Ϳ¡ ÀÇÇØ,[Åø ¹Ú½ºÀÇ Ä¿½ºÅ͸¶ÀÌÁî] (2003) ¶Ç´Â [Åø ¹Ú½º Ç׸ñÀÇ ¼±ÅÃ] (2005) ´ÙÀÌ¾Ë·Î±× ¹Ú½º°¡ Ç¥½ÃµË´Ï´Ù.

  3. [COM ÄÄÆÛ³ÍÆ®] ÅÇÀ» ¼±ÅÃÇÕ´Ï´Ù. ÀÌ ÅÇ¿¡´Â, Flash Player ActiveX ÄÁÆ®·Ñ µî, ±× ÄÄÇ»ÅÍ¿¡ ÀÖ´Â ¸ðµç COM ÄÄÆÛ³ÍÆ®°¡ Ç¥½ÃµË´Ï´Ù.
  4. ½ºÅ©·Ñ ÇØ Shockwave Flash Object ¸¦ ã¾Æ, ¼±ÅÃÇÕ´Ï´Ù.

    ÀÌ Ç׸ñÀÌ Ç¥½ÃµÇÁö ¾Ê´Â °æ¿ì´Â, ½Ã½ºÅÛ¿¡ Flash Player ActiveX °¡ ¼³Ä¡(Install) µÇ°í Àֵ簡 È®ÀÎÇØ ÁÖ¼¼¿ä.

ActionScript ·ÎºÎÅÍ ActiveX ÄÁÅ×À̳ʿ¡ÀÇ Åë½Å¿¡ ´ëÇØ

External API ¸¦ »ç¿ëÇÑ ActiveX ÄÁÅ×ÀÌ³Ê ¾îÇø®ÄÉÀ̼ǰúÀÇ Åë½ÅÀº, Web ºê¶ó¿ìÀú¿ÍÀÇ Åë½Å°ú °°°Ô µË´Ï´Ù¸¸, Å« Â÷À̰¡ 1 °³ ÀÖ½À´Ï´Ù. Àü¼úÇÑ °Íó·³, ActionScript °¡ Web ºê¶ó¿ìÀú¿Í Åë½ÅÇÏ´Â °æ¿ì, °³¹ßÀÚ°¡ °í·ÁÇϰí ÀÖ´Â ÇÑ, ÇÔ¼ö´Â Á÷Á¢ ºÒ·Á °©´Ï´Ù. ÇÔ¼öÀÇ È£Ãâ ¹æ¹ý°ú ÀÀ´ä ¹æ¹ýÀÇ ÀÚ¼¼ÇÑ °ÍÀº, Ç÷¹À̾¿¡ ¼ö¼öÇÒ ¼ö ÀÖµµ·Ï(µíÀÌ) Æ÷¸Ë µÇ¾î ºê¶ó¿ìÀú´Â ÀνĵÇÁö ¾Ê½À´Ï´Ù. ´Ù¸¸, ActiveX ÄÁÅ×ÀÌ³Ê ¾îÇø®ÄÉÀ̼ǰúÀÇ Åë½Å¿¡ External API °¡ »ç¿ëµÇ´Â °æ¿ì, Flash Player ´Â ¸Þ¼¼Áö (ÇÔ¼ö È£Ãâ ¹× ¹Ýȯ°ª)¸¦ ÀÖ´Â XML Æ÷¸ËÀ¸·Î ¾îÇø®ÄÉÀ̼ǿ¡ ¼Û½ÅÇØ, ÄÁÅ×ÀÌ³Ê ¾îÇø®ÄÉÀ̼ÇÀ¸·ÎºÎÅÍÀÇ ÇÔ¼ö È£Ãâ°ú ¹Ýȯ°ª¿¡ °°Àº XML Æ÷¸ËÀÌ »ç¿ëµÉ Çʿ䰡 ÀÖ½À´Ï´Ù. ActiveX ÄÁÅ×ÀÌ³Ê ¾îÇø®ÄÉÀ̼ÇÀÇ °³¹ßÀÚ´Â, ÀûÀýÇÑ Æ÷¸ËÀÇ ÇÔ¼ö È£Ãâ°ú ÀÀ´äÀ» ÀνÄÇØ, ÀÛ¼º °¡´ÉÇÑ Äڵ带 ÀÛ¼ºÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

»ùÇÃÀÇ Introvert IM C# ¿¡´Â, ¸Þ¼¼ÁöÀÇ formatting ¹æÁöÀÇ °¡´ÉÇÑ Å¬·¡½º°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù¸¸, ActionScript ÇÔ¼öÀÇ È£Ãâ ¹× ActionScript ·ÎºÎÅÍÀÇ È£ÃâÀÇ ¼ö½Å½Ã´Â, Ç¥ÁØÀÇ µ¥ÀÌÅÍÇüÀ» »ç¿ëÇØ Á¶ÀÛÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ExternalInterfaceProxy Ŭ·¡½º¸¦ ´Ù¸¥ ÇïÆÛ Ŭ·¡½º¿Í Á¶ÇÕÇÏ´Â °÷ÀÇ ±â´ÉÀÌ Á¦°øµÇ¾î ÀÓÀÇÀÇ . NET ÇÁ·ÎÁ§Æ®·Î ÀçÀÌ¿ëÇÏ´Â °ÍÀ¸·Î External API ¿ÍÀÇ Åë½ÅÀÌ ¿ëÀÌÇÏ°Ô µË´Ï´Ù.

´ÙÀ½ÀÇ ÄÚµå´Â, ¸ÞÀÎ ¾îÇø®ÄÉÀÌ¼Ç Æû (AppForm.cs)À¸·ÎºÎÅÍ ÀοëÇÑ °ÍÀ¸·Î, ExternalInterfaceProxy Ŭ·¡½º¸¦ »ç¿ëÇØ ½ÇÇöµÈ ´Ü¼øÇÑ Á¶ÀÛÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.

public class AppForm : System.Windows.Forms.Form
{
    ...
    private ExternalInterfaceProxy proxy;
    ...
    public AppForm()
    {
        ...
        /* ÀÌ ¾îÇø®ÄÉÀ̼ÇÀ» µî·ÏÇÏ´Â °ÍÀ¸·Î, ÇÁ·Ï½Ã°¡ ActionScript ·ÎºÎÅÍÀÇ
             È£ÃâÀ» ¼ö½ÅÇßÀ» ¶§¿¡ ÅëÁö¸¦ ¼ö½ÅÇÑ´Ù */
        proxy = new ExternalInterfaceProxy(IntrovertIMApp);
        proxy.ExternalInterfaceCall += new ExternalInterfaceCallEventHandler(proxy_ExternalInterfaceCall);
        ...
    }
    ...

ÀÌ ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â,proxy ¶ó´Â À̸§ÀÇ ExternalInterfaceProxy ÀνºÅϽº°¡ ¼±¾ð ¹× ÀÛ¼ºµÇ¾î ±× ÂüÁ¶°¡ À¯Àú ÀÎÅÍÆäÀ̽ºÀÇ Shockwave Flash ActiveX ÄÁÆ®·Ñ¿¡°Ô °Ç³×Áý´Ï´Ù (IntrovertIMApp). ´ÙÀ½¿¡, ÇÁ·Ï½ÃÀÇ ExternalInterfaceCall À̺¥Æ®¸¦ ¼ö½ÅÇϱâ À§ÇÑ proxy_ExternalInterfaceCall() ¸Þ¼Òµå°¡, ÄÚµå·Î µî·ÏµË´Ï´Ù. ÀÌ À̺¥Æ®´Â, Flash Player ·ÎºÎÅÍ ÇÔ¼ö È£ÃâÀÌ ÀÖ¾úÀ» ¶§¿¡ ExternalInterfaceProxy Ŭ·¡½º¿¡ ÀÇÇØ ¼ÛÃâ(Dispatch)µË´Ï´Ù. ÀÌ À̺¥Æ®¿¡ÀÇ ¿¹¾à(subscribe)´Â, C# Äڵ尡 ActionScript ·ÎºÎÅÍÀÇ ÇÔ¼ö È£ÃâÀ» ¼ö½ÅÇØ, ÀÀ´äÇÏ´Â ¹æ¹ýÀÌ µÇ¾î ÀÖ½À´Ï´Ù.

ActionScript ·ÎºÎÅÍ ÇÔ¼ö È£ÃâÀÌ ÀÖÀ¸¸é, ExternalInterfaceProxy ÀνºÅϽº (proxy)´Â ±× È£ÃâÀ» ¼ö½ÅÇØ, ±×°ÍÀ» XML Æ÷¸ËÀ¸·Î º¯È¯ÇÕ´Ï´Ù. ±×¸®°í, ÇÁ·Ï½ÃÀÇ ExternalInterfaceCall À̺¥Æ®ÀÇ Listener°¡ µÇ°í ÀÖ´Â ¿ÀºêÁ§Æ®¿¡ ÅëÁöÇÕ´Ï´Ù. AppForm Ŭ·¡½ºÀÇ °æ¿ì,proxy_ExternalInterfaceCall() ¸Þ¼Òµå¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ À̺¥Æ®°¡ 󸮵˴ϴÙ.

    /// <summary>
    /// SWF ·Î ActionScript ExternalInterface È£ÃâÀ» Çϸé,
    /// ÇÁ·Ï½Ã·ÎºÎÅÍ ºÒ·Á °£´Ù
    /// </summary>
    private object proxy_ExternalInterfaceCall(object sender, ExternalInterfaceCallEventArgs e)
    {
        switch (e.FunctionCall.FunctionName)
        {
            case "isReady":
                return isReady();
            case "setSWFIsReady":
                setSWFIsReady();
                return null;
            case "newMessage":
                newMessage((string) e.FunctionCall.Arguments[0]);
                return null;
            case "statusChange":
                statusChange();
                return null;
            default:
                return null;
        }
    }
    ...

ÀÌ ¸Þ¼Òµå´Â ExternalInterfaceCallEventArgs ÀνºÅϽº¿¡°Ô °Ç³×Áý´Ï´Ù. ÀÌ ¿¹¿¡¼­´Â ÀνºÅϽº¸íÀÌ e ÀÔ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ÀÌ ¿ÀºêÁ§Æ®°¡ ExternalInterfaceCall Ŭ·¡½ºÀÇ ÀνºÅϽºÀÎ FunctionCall properties ¸¦ ÃëµæÇÕ´Ï´Ù.

ExternalInterfaceCall ÀνºÅϽº°¡, 2 °³ÀÇ properties ¸¦ °¡Áö´Â ´Ü¼øÇÑ °ª¿ÀºêÁ§Æ®ÀÔ´Ï´Ù. FunctionName properties ¿¡´Â, ActionScript ExternalInterface.Call() ¸í·É¹®(statement)·Î ÁöÁ¤µÈ ÇÔ¼ö¸íÀÌ Æ÷ÇԵǰí ÀÖ½À´Ï´Ù. ActionScript ¿¡ ¾î¶°ÇÑ ÆÄ¶ó¹ÌÅͰ¡ Ãß°¡µÇ¸é, ±× ÆÄ¶ó¹ÌÅÍ´Â ExternalInterfaceCall ¿ÀºêÁ§Æ®ÀÇ Arguments properties ¿¡ Æ÷ÇԵ˴ϴÙ. ÀÌ °æ¿ì, À̺¥Æ®¸¦ ó¸®ÇÏ´Â ¸Þ¼Òµå´Â, Æ®·¡ÇÈ ¸Å´ÏÀú¿Í °°ÀÌ ±â´ÉÇÏ´Â switch ¸í·É¹®(statement)ÀÔ´Ï´Ù. FunctionName properties ÀÇ °ª (e.FunctionCall.FunctionName)¿¡ ÀÇÇØ, AppForm Ŭ·¡½ºÀÇ ¾î´À ¸Þ¼Òµå°¡ ºÒ·Á °¥Áö°¡ Á¤ÇØÁý´Ï´Ù.

Àü¼úÀÇ ÄÚµåÀÇ switch ¸í·É¹®(statement)ÀÇ ºê·£Ä¡(branch)´Â, ÀϹÝÀûÀÎ ¸Þ¼Òµå È£Ã⠽󪸮¿À¸¦ ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ¸ðµç ¸Þ¼Òµå´Â °ªÀ» ActionScript ¿¡ µ¹·ÁÁÙ±î (isReady() ¸Þ¼Òµå È£Ãâ µî),null ¸¦ µ¹·ÁÁÙ (´Ù¸¥ ¸Þ¼Òµå È£ÃâÀÇ °æ¿ì) Çʿ䰡 ÀÖ½À´Ï´Ù. ActionScript ·ÎºÎÅÍ °Ç³×¹ÞÀº ÆÄ¶ó¹ÌÅÍÀÇ ¾×¼¼½º´Â,newMessage() ¸Þ¼Òµå È£Ãâ¿¡ ³ªÅ¸³ª°í ÀÖ½À´Ï´Ù (Arguments ¹è¿­ÀÇ Á¦ 1 ¿¤¸®¸ÕÆ®ÀÎ ÆÄ¶ó¹ÌÅÍ e.FunctionCall.Arguments[0] À¸·Î °Ç³×¹Þ½À´Ï´Ù).

ExternalInterfaceProxy Ŭ·¡½º¸¦ »ç¿ëÇÑ C# ·ÎºÎÅÍÀÇ ActionScript ÇÔ¼öÀÇ È£ÃâÀº, ActionScript ·ÎºÎÅÍÀÇ ÇÔ¼ö È£ÃâÀÇ ¼ö½Åº¸´Ù ÈξÀ ´Ü¼øÇÕ´Ï´Ù. ActionScript ÇÔ¼ö¸¦ È£ÃâÇÏ·Á¸é , ´ÙÀ½°ú °°ÀÌ ExternalInterfaceProxy ÀνºÅϽºÀÇ Call() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.

    /// <summary>
    /// [¼Û½Å] ¹öưÀÌ ¹Ð¸®¸é ºÒ·Á °¡
    /// MessageText ÅØ½ºÆ® ÇʵåÀÇ °ªÀÌ ÆÄ¶ó¹ÌÅͷμ­ °Ç³×¹Þ´Â´Ù
    /// </summary>
    /// <param name="message">¼Û½ÅÇÏ´Â ¸Þ¼¼Áö </param>
    private void sendMessage(string message)
    {
        if (swfReady)
        {
            ...
            // ActionScript ÀÇ newMessage ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù
            proxy.Call("newMessage", message);
        }
    }
    ...
    /// <summary>
    /// ActionScript ÇÔ¼ö¸¦ È£ÃâÇØ ÇöÀçÀÇ "availability" ½ºÅ×ÀÌÅͽº¸¦
    /// ÃëµæÇØ, ±×°ÍÀ» ÅØ½ºÆ® Çʵ忡 ±âÀÔÇÑ´Ù
    /// </summary>
    private void updateStatus()
    {
        Status.Text = (string) proxy.Call("getStatus");
    }
    ...
}

ÀÌ ¿¹·Î ³ªÅ¸³ª°í ÀÖµµ·Ï(µíÀÌ), ExternalInterfaceProxy Ŭ·¡½ºÀÇ Call() ¸Þ¼Òµå´Â, ActionScript ·Î °Å±â¿¡ »ó´çÇÏ´Â ExternalInterface.Call() ¿¡ ¸Å¿ì ÀÚÁÖ(Àß) ´à¾Ò½À´Ï´Ù. Á¦ 1 ÆÄ¶ó¹ÌÅÍ´Â string·Î, È£ÃâÇÏ´Â ÇÔ¼öÀÇ À̸§ÀÌ µË´Ï´Ù. ±× ¿ÜÀÇ ÆÄ¶ó¹ÌÅÍ (¿©±â¿¡´Â ³ªÅ¸³ª°í ÀÖÁö ¾Ê½À´Ï´Ù)µµ ActionScript ÇÔ¼ö¿¡°Ô °Ç³×Áý´Ï´Ù. ActionScript ÇÔ¼ö·ÎºÎÅÍ °ªÀÌ µ¹·ÁÁÖ¾îÁ³À» °æ¿ì, ±× °ªÀº Call() ¸Þ¼Òµå·Î µ¹·ÁÁÖ¾îÁý´Ï´Ù (Àü¼úÀÇ ¿¹).

ExternalInterfaceProxy Ŭ·¡½ºÀÇ ³»ºÎ

ActiveX ÄÁÆ®·ÑÀÇ ÇÁ·Ï½Ã ·¡ÆÛ¸¦ »ç¿ëÇÏ´Â °ÍÀº ¹Ýµå½Ã Áß¿äÇÏÁö ¾Ê°í, µ¶ÀÚÀûÀÎ ÇÁ·Ï½Ã class (¿¹¸¦ µé¾î, ´Ù¸¥ ÇÁ·Î±×·¥ ¾ð¾î³ª ´Ù¸¥ Ç÷§Æû¿ë)¸¦ ÀÛ¼ºÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÇÁ·Ï½ÃÀÇ ÀÛ¼º¿¡ ´ëÇØ¼­´Â ¿©±â¼­ ÀÚ¼¼ÇÏ°Ô ¼³¸íÇÕ´Ï´Ù¸¸, ÀÌ ¿¹¿¡ À־ÀÇ ÇÁ·Ï½Ã Ŭ·¡½ºÀÇ ³»ºÎ 󸮸¦ ÀÌÇØÇÏ´Â °ÍÀº À¯ÀÍÇÕ´Ï´Ù.

Shockwave Flash ActiveX ÄÁÆ®·ÑÀÇ CallFunction() ¸Þ¼Òµå¸¦ »ç¿ëÇϸé, External API ¸¦ »ç¿ëÇØ ActiveX ÄÁÅ×À̳ʷκÎÅÍ ActionScript ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ´ÙÀ½ÀÇ ExternalInterfaceProxy Ŭ·¡½ºÀÇ Call() ¸Þ¼ÒµåÀÇ ÀϺδÂ, À̰ÍÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.

/* Shockwave Flash ActiveX ÄÁÆ®·ÑÀÇ "_flashControl" ·Î,
    SWF ÀÇ ActionScript ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù */
string response = _flashControl.CallFunction(request);

ÀÌ ÄÚµå ºÎºÐ¿¡¼­,_flashControl Àº Shockwave Flash ActiveX ÄÁÆ®·ÑÀÔ´Ï´Ù. ActionScript ÇÔ¼ö È£ÃâÀº,CallFunction() ¸Þ¼Òµå¸¦ »ç¿ëÇØ ÇàÇØÁý´Ï´Ù. ÀÌ ¸Þ¼Òµå¿¡´Â ÆÄ¶ó¹ÌÅͰ¡ 1 °³ ÀÖ¾î (ÀÌ ¿¹¿¡¼­´Â request), ÀÌ ÆÄ¶ó¹ÌÅÍ´Â XML Æ÷¸Ë µÈ ÀνºÆ®·°¼ÇÀÌ Æ÷ÇÔµÈ stringÀÔ´Ï´Ù. ºÒ·Á °¡´Â ActionScript ÇÔ¼öÀÇ À̸§ ¹× ÀÓÀÇÀÇ ÆÄ¶ó¹ÌÅͰ¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ActionScript ·ÎºÎÅÍ µ¹·ÁÁÖ¾îÁø ¸ðµç °ªÀº XML Æ÷¸Ë string¿¡ encode µÇ¾îCallFunction() È£ÃâÀÇ ¹Ýȯ°ªÀ¸·Î¼­ µ¹·Á º¸³»Áý´Ï´Ù. ÀÌ ¿¹¿¡¼­´Â, ÀÌ XML string°¡ response º¯¼ö¿¡ Æ÷ÇԵ˴ϴÙ.

ActionScript ·ÎºÎÅÍÀÇ ÇÔ¼ö È£ÃâÀÇ ¼ö½ÅÀº, ´Ü°èÀûÀÎ ¼ø¼­·Î ÇàÇØÁý´Ï´Ù. ActionScript ·ÎºÎÅÍ ÇÔ¼ö È£ÃâÀÌ ÀÖÀ¸¸é, Shockwave Flash ActiveX ÄÁÆ®·ÑÀº FlashCall À̺¥Æ®¸¦ ¼ÛÃâ(Dispatch)Çϱâ À§ÇØ(¶§¹®¿¡), SWF ÆÄÀϷκÎÅÍÀÇ È£ÃâÀ» ¼ö½ÅÇϱâ À§ÇÑ class (ExternalInterfaceProxy Ŭ·¡½ºµî)¿¡¼­´Â ±× À̺¥Æ®¿ëÀÇ Çڵ鷯¸¦ Á¤ÀÇÇØ µÑ Çʿ䰡 ÀÖ½À´Ï´Ù. ExternalInterfaceProxy Ŭ·¡½º¿¡¼­´Â, ÀÌ À̺¥Æ® Çڵ鷯 ÇÔ¼öÀÇ À̸§Àº _flashControl_FlashCall() ·Î, class constructor¡¡ ¡¡ ³»ÀÇ À̺¥Æ®¸¦ ±â´Ù¸®µµ·Ï(µíÀÌ) µî·ÏµÇ¾î ÀÖ½À´Ï´Ù.

private AxShockwaveFlash _flashControl;

public ExternalInterfaceProxy(AxShockwaveFlash flashControl)
{
    _flashControl = flashControl;
    _flashControl.FlashCall += new _IShockwaveFlashEvents_FlashCallEventHandler(_flashControl_FlashCall);
}
...
private void _flashControl_FlashCall(object sender, _IShockwaveFlashEvents_FlashCallEvent e)
{
    /* À̺¥Æ® ¿ÀºêÁ§Æ®ÀÇ request  properties  ("e.request")¸¦ »ç¿ëÇØ
        ¾×¼ÇÀ» ½ÇÇàÇÑ´Ù */
    ...
    /* °ªÀ» ActionScript ¿¡ µ¹·ÁÁØ´Ù
        µ¹·ÁÁÖ¾îÁø °ªÀº, XML Æ÷¸Ë string·Î¼­ encode ÇÒ Çʿ䰡 ÀÖ´Ù */
    _flashControl.SetReturnValue(encodedResponse);
}

À̺¥Æ® ¿ÀºêÁ§Æ® (e)¿¡´Â request properties (e.request)°¡ ÀÖ¾î, ÀÌ properties ´Â ÇÔ¼ö¸íÀ̳ª ÆÄ¶ó¹ÌÅÍ µî, ÇÔ¼ö È£ÃâÇØ¿¡ °üÇÑ Á¤º¸°¡ XML Æ÷¸ËÀ¸·Î Æ÷ÇÔµÈ Ä³¸¯ÅÍ ¶óÀÎÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ Á¤º¸¸¦ ÄÁÅ×À̳ʷΠ»ç¿ëÇϸé, ½ÇÇàÇÏ´Â Äڵ带 ÆÇº°ÇÒ ¼ö ÀÖ½À´Ï´Ù. ExternalInterfaceProxy Ŭ·¡½º¿¡¼­´Â, ¿ä±¸°¡ XML Æ÷¸ËÈ­µî ExternalInterfaceCall ¿ÀºêÁ§Æ®¿¡ º¯È¯µÇ¾î °°Àº Á¤º¸°¡ ¾×¼¼½º Çϱ⠽¬¿î Çü½Ä¿¡¼­ Á¦°øµË´Ï´Ù. ActiveX ÄÁÆ®·ÑÀÇ SetReturnValue() ¸Þ¼Òµå¸¦ »ç¿ëÇϸé, ÇÔ¼öÀÇ °á°ú¸¦ ActionScript ÀÇ È£Ãâ Ãø¿¡ µ¹·ÁÁÙ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ °æ¿ìµµ, ¾òÀ» ¼ö ÀÖ´ø ÆÄ¶ó¹ÌÅ͸¦ External API ·Î »ç¿ëµÇ´Â XML Æ÷¸Ë¿¡ encode ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

External API ÀÇ XML Æ÷¸Ë

Àü¼ú°ú °°ÀÌ, Shockwave Flash ActiveX ¸¦ È£½ºÆ® ÇÏ´Â ¾îÇø®ÄÉÀ̼ǰú ActionScript ¿ÍÀÇ »çÀÌÀÇ Åë½Å¿¡¼­´Â, ÇÔ¼ö È£Ãâ°ú °ªÀ» encode Çϱâ À§Çؼ­ Àü¿ëÀÇ XML Æ÷¸ËÀÌ »ç¿ëµË´Ï´Ù. »ùÇÃÀÇ Introvert IM C# ¿¡¼­´Â, ExternalInterfaceProxy Ŭ·¡½º¿¡ ÀÇÇØ, ¾îÇø®ÄÉÀÌ¼Ç Æû³»ÀÇ ÄÚµå·Î ÀÌ Æ÷¸ËÀ» ¹«½ÃÇØ, °ªÀ» Á÷Á¢ Á¶ÀÛÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù. À̰ÍÀ» ½ÇÇöÇϱâ (À§ÇØ)¶§¹®¿¡, ExternalInterfaceProxy Ŭ·¡½º¿¡¼­´Â ExternalInterfaceSerializer Ŭ·¡½ºÀÇ ¸Þ¼Òµå¸¦ »ç¿ëÇØ, ½ÇÁ¦·Î XML ¸Þ¼¼Áö¸¦ . NET ¿ÀºêÁ§Æ®·Î º¯È¯Çϰí ÀÖ½À´Ï´Ù. ExternalInterfaceSerializer Ŭ·¡½º¿¡´Â, ´ÙÀ½ÀÇ 4 °³ÀÇ public ¸Þ¼Òµå°¡ ÀÖ½À´Ï´Ù.

External API ·Î »ç¿ëµÇ´Â XML Æ÷¸Ë¿¡´Â 2 °³ÀÇ ºÎºÐÀÌ ÀÖ½À´Ï´Ù. 1 °³ÀÇ Æ÷¸ËÀº, ÇÔ¼ö È£ÃâÀ» ³ªÅ¸³»±â À§Çؼ­(¶§¹®¿¡) »ç¿ëµË´Ï´Ù. ÀÌÁ¦(¹ú½á) 1 °³ÀÇ Æ÷¸ËÀº °³°³ÀÇ °ªÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. ÀÌ Æ÷¸ËÀº, ÇÔ¼öÀÇ ÆÄ¶ó¹ÌÅÍ ¹× ÇÔ¼öÀÇ ¹Ýȯ°ª¿¡ »ç¿ëµË´Ï´Ù. ÇÔ¼ö È£Ãâ¿ëÀÇ XML Æ÷¸ËÀº, ActionScript ¿ÍÀÇ »çÀÌÀÇ È£Ãâ¿¡ »ç¿ëµË´Ï´Ù. ActionScript ·ÎºÎÅÍÀÇ ÇÔ¼ö È£Ãâ¿¡ ´ëÇØ¼­, Flash Player ´Â XML ¸¦ ÄÁÅ×À̳ʿ¡ °Ç³×ÁÝ´Ï´Ù. ÄÁÅ×À̳ʷκÎÅÍÀÇ È£Ãâ¿¡ ´ëÇØ¼­´Â, Flash Player ´Â ÀÌ Æ÷¸ËÀ¸·Î XML string¸¦ °Ç³×ÁÖ´Â ÄÁÅ×ÀÌ³Ê ¾îÇø®ÄÉÀ̼ÇÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù. ´ÙÀ½ÀÇ XML ´Â, XML Æ÷¸Ë µÈ ÇÔ¼ö È£ÃâÀÇ ¿¹¸¦ ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.

<invoke name="functionName" returntype="xml">
    <arguments>
        ... (individual argument values)
    </arguments>
</invoke>

·çÆ® ³ëµå´Â <invoke> ³ëµåÀÔ´Ï´Ù. ¿©±â¿¡´Â 2 °³ÀÇ ¼Ó¼ºÀÌ ÀÖ¾î,name ´Â ÇÔ¼ö È£ÃâÀÇ À̸§À» ³ªÅ¸³»,returntype ´Â Ç×»ó xml °¡ µË´Ï´Ù. ÇÔ¼ö È£Ãâ¿¡ ÆÄ¶ó¹ÌÅͰ¡ Æ÷ÇԵǾî ÀÖ´Â °æ¿ì,<invoke> ³ëµå¿¡´Â <arguments> ÀÚ ³ëµå°¡ »ý±é´Ï´Ù. ÇÑÃþ ´õ ±× ÀÚ½Ä (child) ³ëµå´Â, ´ÙÀ½¿¡ ¼³¸íÇÏ´Â °³º°ÀÇ °ªÆ÷¸ËÀ» »ç¿ëÇØ Æ÷¸Ë µÈ ÆÄ¶ó¹ÌÅͰ¡ µË´Ï´Ù.

ÇÔ¼öÀÇ ÆÄ¶ó¹ÌÅͳª ÇÔ¼öÀÇ ¹Ýȯ°ªµîÀÇ °³°³ÀÇ °ªÀ¸·Î´Â, ½ÇÁ¦ÀÇ °ª¿¡ °¡¼¼ÇØ µ¥ÀÌÅÍÇü Á¤º¸¸¦ Æ÷ÇÔÇÑ formatting ½ºÅ´ÀÌ »ç¿ëµË´Ï´Ù.

ActionScript ÀÇ class ¶Ç´Â °ª

C# ÀÇ class ¶Ç´Â °ª

Æ÷¸Ë

ÄÚ¸àÆ®

null

null

<null/>

 

Boolean true

bool true

<true/>

 

Boolean false

bool false

<false/>

 

String

string

<string>stringġ </string>

 

Number, int, uint

single, double, int, uint

<number>27. 5</number>
<number>-12</number>

 

Array (¿¤¸®¸ÕÆ®´Â ÇüÅÂÀÇ È¥Àç°¡´É)

ArrayList ³ª object[] µî, ¿¤¸®¸ÕÆ®ÀÇ ÇüÅÂÀÇ È¥Àç°¡ °¡´ÉÇÑ ÄÝ·º¼Ç

<array>
<property id="0">
<number>27. 5</number>
</property>
<property id="1">
<string>Hello there! </string>
</property>
...
</array>

<property> ³ëµå¿¡¼­´Â °³°³ÀÇ ¿¤¸®¸ÕÆ®°¡ Á¤ÀǵǾîid ¼Ó¼ºÀº 0 À¸·ÎºÎÅÍ ½ÃÀ۵Ǵ À妽ºÀÇ ¼öÄ¡ÀÔ´Ï´Ù.

Object

string Ű ÷ºÎÀÇ HashTable µî, string Ű¿Í ¿ÀºêÁ§Æ®Ä¡°¡ ÀÖ´Â »çÀü

<object>
<property id="name">
<string>John Doe</string>
</property>
<property id="age">
<string>33</string>
</property>
...
</object>

<property> ³ëµå¿¡¼­´Â °³°³ÀÇ properties °¡ Á¤ÀǵǾîid ¼Ó¼ºÀº properties ¸í (string)ÀÔ´Ï´Ù.

±× ¿ÜÀÇ ºôÆ®ÀÎ class ¶Ç´Â custom Ŭ·¡½º

 

<null/>
¶Ç´Â
<object></object>

ActionScript ¿¡¼­´Â ´Ù¸¥ ¿ÀºêÁ§Æ®°¡ null ¶Ç´Â emptyÀÇ ¿ÀºêÁ§Æ®·Î¼­ encode µË´Ï´Ù. ¾î´À °æ¿ìµµ, ¸ðµç properties Ä¡°¡ ¾ø¾îÁý´Ï´Ù.