عبور از دروازه زمان، یا طریقه ارتباط با AS2 از درون ActionScript 3

اگر از برنامه‌نویسان باسابقه ActionScript 3 بوده باشید، ممکن است گاهی نیاز پیدا کرده باشید که از یک فایل طراحی شده در ActionScript 2 در یک پروژه مبتی بر AS3 استفاده نمایید.

ممکن است تصور کنید که هیچ دلیل موجهی برای انجام این کار وجود ندارد!؟ یا چرا با داشتن یک تکنولوژی جدید و پیشرفته، همچنان باید از نسل گذشته آن استفاده نمود؟

اما یکی از دلایل مهمی که ممکن است استفاده از یک فایل طراحی شده در AS2 را در AS3 توجیه کند، وجود برخی کامپوننتها و ابزارهای مهمی است که نسخه معادل آنها هنوز در AS3 طراحی نشده است. و یا اینکه ممکن است به استفاده مجدد از یک پروژه قدیمی نیاز داشته باشید که source آن در دسترس نیست.

در هر صورت امکانات مورد نیاز برای عبور از بحران در چنین شرایطی، در شئ ویژه‌ای به نام LocalConnection موجود در کتابخانه flash.net قرار داده شده است.

با استفاده از این شئ و ایجاد یک ارتباط محلی (Local Connection) امکان ارسال و دریافت فرامین و دستورات مورد نیاز، بین هر دو فایل SWF در حال اجرا فراهم می‌گردد.
این دو فایل SWF که به نوعی همان Client و Server در یک ارتباط محلی محسوب می‌گردند، می‌توانند شرایط متفاوتی داشته باشند، که به عنوان مثال:

  1. یک فایل SWF و یک فایل EXE-Projector باشند.
  2. یکی در مرورگر وب و دیگری در فلش پلیر باز شده باشد.
  3. در دو فایل در یک پروژه بارگذاری شوند.
  4. دو فایل در دو وبسایت و دامنه متفاوت باشند.
  5. یک فایل آنلاین و یک فایل محلی باشند.
  6. هر کدام در نسخه متفاوتی از ActionScript طراحی شده باشند.
  7. و هر حالت دیگری که می‌توان دو فایل swf در حال اجرا داشت.

در هر صورت ایجاد یک چنین ارتباطی (عبور از دروازه زمان) در دو مرحله انجام می‌شود.

مرحله اول: ایجاد Server و ساخت LocalConnection در ActionScript 2

با استفاده از کلاس LocalConnection یک ارتباط محلی ایجاد کرده و نامی برای آن تعیین می‌نماییم. سپس دستورات مورد نیاز برای استفاده از کامپوننت یا فایل قدیمی را طراحی نموده و به صورت توابعی در ارتباط محلی قرار می‌دهیم:

var bridge:LocalConnection = new LocalConnection();
bridge.connect("ConnectionMutex");

bridge.command1 = function( param1, param2 ) {
// Receive parameters from AS3
// Send parameters to AS2
}

bridge.command2 = function( param1, param2 ) {
// Receive parameters from AS3
// Send parameters to AS2
}

مرحله دوم: ایجاد Client و فراخوانی دستورات در ActionScript 3

از آنجا که هدف ما از ایجاد این ارتباط، طراحی یک پروژه واحد بود، بهترین کار این است که ابتدا، فایل تولید شده در مرحله قبل را بارگذاری نموده و سپس به ایجاد ارتباط بپردازیم.

var bridgeLoader:Loader = new Loader();
var ready:Boolean = false;

bridgeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);

function completeHandler(e:Event) {
trace("Loaded. ");
    ready = true;
}
برای ایجاد ارتباط نیز از شئ LocalConnection و دستور Send استفاده می‌نماییم:
if (ready) {

var bridge:LocalConnection=new LocalConnection();

    bridge.addEventListener(StatusEvent.STATUS, errHandler);

    function errHandler(e:StatusEvent) {
trace(e.level);
}

    bridge.send("ConnectionMutex", "command1 ", param1Value, param2Value);
    bridge.send("ConnectionMutex", "command2 ", param1Value, param2Value);
}
آیا می‌توانید مواردی از سوء استفاده از امکانات ارائه شده در کلاس LocalConnection را حدس بزنید.

About محمد شمس

برنامه‌نویس، طراح انیمیشن و علاقمند به هوش مصنوعی

7 Comments

  1. سواستفاده: این‌که نسخه آنلاین نسخه محلی رو اجرا کنه، یا نسخه swf فایل projector رو (که دسترسی‌های بیشتری داره)؟ ولی اینا خیلی تابلواند!
    ممنون. مطمئنا مفید واقع خواهد شد.

  2. نقل قول: “این‌که نسخه آنلاین نسخه محلی رو اجرا کنه، یا نسخه swf فایل projector”

    نه این کار شدنی نیست.
    بحث در مورد اجرای یک فایل دیگر نیست، بلکه موضوع ایجاد ارتباط و انتقال فرامین از دو دامنه غیر یکسان، محوریت دارد.

  3. این‌که قبلاً هم فلش قادر به این‌کار بود و سو استفاده محسوب نمی‌شه. 😉 تا جایی که یادمه یه فایل crossdomain.xml یا یه همچین چیزی هم لازمه.

  4. درسته ولی با امکانات LocalConnection کارهای زیادی ممکن میشود. (کلا فلش کارها آدمهای خلاقی هستند حتی در مباحث illegal)

  5. سلام،

    شما به بازی وبلاگی «نیازهای نیروی انسانی» دعوت شده‌اید. لینک: http://afsharm.blogspot.com/2010/07/what-hr-needs.html

  6. جالب بود ، موفق و پیروز باشید

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


3 × = 12