Diğer Flash Player ve AIR örneklerine bağlanma

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

LocalConnection sınıfı, Adobe® AIR® uygulamalarının yanı sıra tarayıcıda çalışan SWF içeriği arasındaki iletişimi sağlar. LocalConnection sınıfını tarayıcıda çalışan AIR uygulaması ve SWF içeriği arasında iletişim kurmak için de kullanabilirsiniz. LocalConnection sınıfı Flash Player ve AIR örnekleri arasında veri paylaşabilen çok yönlü uygulamalar oluşturmanızı sağlar.

LocalConnection sınıfı hakkında

LocalConnection sınıfı, fscommand() yöntemini veya JavaScript uygulamasını kullanmadan diğer SWF dosyalarına talimatlar gönderebilen SWF dosyaları geliştirmenize olanak sağlar. LocalConnection nesneleri yalnızca aynı istemci bilgisayarında çalışan SWF dosyaları arasında iletişim kurabilir ancak bunlar farklı uygulamalarda çalışabilir. Örneğin, yerel bilgileri barındıran projektör ile tarayıcı tabanlı SWF uzaktan bağlanarak, bir tarayıcıda çalışan SWF dosyası ile bir projektörde çalışan SWF dosyası bilgi paylaşabilir. (Projektör, bağımsız bir uygulama olarak çalışabilecek formatta kaydedilmiş bir SWF dosyasıdır—başka bir deyişle, projektör çalıştırılabilir dosyanın içinde gömülü olduğundan Flash Player uygulamasının yüklenmesini gerektirmez.)

Farklı ActionScript sürümlerini kullanan SWF'ler arasında iletişim kurmak için LocalConnection nesneleri kullanılabilir:

  • ActionScript 3.0 LocalConnection nesneleri, ActionScript 1.0 veya 2.0'da oluşturulmuş LocalConnection nesneleriyle iletişim kurabilir.

  • ActionScript 1.0 veya 2.0 LocalConnection nesneleri, ActionScript 3.0'da oluşturulmuş LocalConnection nesneleriyle iletişim kurabilir.

Flash Player, farklı sürümlerdeki LocalConnection nesneleri arasındaki bu iletişim otomatik olarak işler.

LocalConnection nesnesini kullanmanın en basit yolu, yalnızca aynı etki alanında veya aynı AIR uygulamasında bulunan LocalConnection nesneleri arasındaki iletişime izin vermektir. Böylece, güvenlik meseleleriyle ilgili endişe duymanıza gerek kalmaz. Ancak, etki alanları arasındaki iletişime izin vermeniz gerekiyorsa, güvenlik önlemleri uygulamanın çeşitli yolları vardır. Daha fazla bilgi için, http://help.adobe.com/tr_TR/FlashPlatform/reference/actionscript/3/flash/net/LocalConnection.html Adobe Flash Platformu için ActionScript 3.0 Başvurusu 'nda listelenen LocalConnection sınıfındaki allowDomain() ile domain girişleri ve yönteminin connectionName parametresi hakkındaki tartışmaya bakın.

Tek bir SWF dosyası içinde veri alıp vermek için LocalConnection nesneleri kullanılabilir ancak Adobe bunu önermez. Bunun yerine, paylaşılan nesneleri kullanın.

LocalConnection nesnelerinize geri çağrı yöntemleri eklemenin üç yolu vardır:

  • LocalConnection sınıfını alt sınıfa ayırın ve yöntemler ekleyin.

  • LocalConnection.client özelliğini, yöntemleri uygulayan bir nesneye ayarlayın.

  • LocalConnection öğesini genişleten ve dinamik olarak yöntemler ekleyen bir dinamik sınıf oluşturun.

Geri çağrı yöntemleri eklemenin birinci yolu, LocalConnection sınıfının genişletilmesidir. Yöntemleri LocalConnection örneğine dinamik olarak eklemek yerine, özel sınıf içinde tanımlarsınız. Aşağıdaki kodda bu yaklaşık gösterilmektedir:

package 
{ 
    import flash.net.LocalConnection; 
    public class CustomLocalConnection extends LocalConnection 
    { 
        public function CustomLocalConnection(connectionName:String) 
        { 
            try 
            { 
                connect(connectionName); 
            } 
            catch (error:ArgumentError) 
            { 
                // server already created/connected 
            } 
        } 
        public function onMethod(timeString:String):void 
        { 
            trace("onMethod called at: " + timeString); 
        } 
    } 
}

CustomLocalConnection sınıfının yeni bir örneğini oluşturmak için, şu kodu kullanabilirsiniz:

var serverLC:CustomLocalConnection; 
serverLC = new CustomLocalConnection("serverName");

Geri çağrı yöntemleri eklemenin ikinci yolu, LocalConnection.client özelliğinin kullanılmasıdır. Bu işlem kapsamında, aşağıdaki kodun gösterdiği gibi, özel bir sınıf oluşturulur ve client özelliğine yeni bir örnek atanır:

var lc:LocalConnection = new LocalConnection(); 
lc.client = new CustomClient();

LocalConnection.client özelliği, çağrılması gereken nesne geri çağrı yöntemlerini belirtir. Önceki kodda client özelliği, özel sınıfın yeni bir örneğine (CustomClient) ayarlanmıştı. client özelliğinin varsayılan değeri, geçerli LocalConnection örneğidir. Aynı yöntem kümesine sahip olan ancak farklı şekilde hareket eden iki veri işleyiciniz varsa (örneğin, bir penceredeki düğmenin ikinci bir penceredeki görünümü değiştirdiği bir uygulamada), client özelliğini kullanabilirsiniz.

CustomClient sınıfını oluşturmak için şu kodu kullanabilirsiniz:

package 
{ 
    public class CustomClient extends Object 
    { 
        public function onMethod(timeString:String):void 
        { 
            trace("onMethod called at: " + timeString); 
        } 
    } 
}

Geri çağrı yöntemleri eklemenin üçüncü yolu olarak dinamik bir sınıf oluşturulması ve yöntemlerin dinamik olarak eklenmesi, aşağıdaki kodun gösterdiği gibi, önceki ActionScript sürümlerinde LocalConnection sınıfının kullanılmasına çok benzer:

import flash.net.LocalConnection; 
dynamic class DynamicLocalConnection extends LocalConnection {}

Geri çağrı yöntemleri, aşağıdaki kod kullanılarak bu sınıfa dinamik olarak eklenebilir:

var connection:DynamicLocalConnection = new DynamicLocalConnection(); 
connection.onMethod = this.onMethod; 
// Add your code here. 
public function onMethod(timeString:String):void 
{ 
    trace("onMethod called at: " + timeString); 
}

Kod çok taşınabilir bir öğe olmadığından, geri çağrı yöntemleri eklemenin bir önceki yolu önerilmez. Ayrıca, dinamik özelliklere erişim, mühürlenmiş özelliklere erişimden çok daha yavaş olduğundan, bu yerel bağlantı oluşturma yönteminin kullanılması performansla ilgili sorunlara yol açabilir.

isPerUser özelliği

isPerUser özelliği Flash Player (10.0.32) ve AIR (1.5.2) uygulamalarına, bir Mac bilgisayarda birden fazla kullanıcı oturum açtığında ortaya çıkan çakışmayı çözmek için eklenmiştir. Diğer işletim sistemlerinde, yerel bağlantı her zaman ayrı kullanıcılarla sınırlı olduğu için bu özellik yok sayılır. isPerUser özelliği yeni kodda true olarak ayarlanmalıdır. Ancak, varsayılan değer geriye dönük uyumluluk için geçerli olarak false şeklindedir. Varsayılan değer, çalışma zamanlarının gelecekteki sürümlerinde değiştirilebilir.

İki uygulama arasında mesaj gönderme

Farklı AIR uygulamaları arasında ve bir tarayıcıda çalıştırılan farklı Adobe® Flash® Player (SWF) arasındaki iletişimi sağlamak için LocalConnection sınıfını kullanırsınız. LocalConnection sınıfını tarayıcıda çalışan AIR uygulaması ve SWF içeriği arasında iletişim kurmak için de kullanabilirsiniz.

Örneğin, bir web sayfasında birden çok Flash Player örneğiniz olabilir veya bir Flash Player örneğinin, bir açılır penceredeki Flash Player örneğinden veriler almasını sağlayabilirsiniz.

Aşağıdaki kod, sunucu olarak görev yapan ve diğer uygulamalardan gelen LocalConnection çağrılarını kabul eden bir LocalConnection nesnesi tanımlar:
package 
{ 
    import flash.net.LocalConnection; 
    import flash.display.Sprite; 
    public class ServerLC extends Sprite 
    { 
        public function ServerLC() 
        { 
            var lc:LocalConnection = new LocalConnection(); 
            lc.client = new CustomClient1(); 
            try 
            { 
                lc.connect("conn1"); 
            } 
            catch (error:Error) 
            { 
                trace("error:: already connected"); 
            } 
        } 
    } 
}

Bu kod, önce lc adlı bir LocalConnection nesnesi oluşturur ve client özelliğini clientObject nesnesine ayarlar. Başka bir uygulama bu LocalConnection örneğinde bir yöntem çağırdığında, çalışma zamanı clientObject nesnesinde bu yöntemi arar.

Belirtilen ada sahip bir bağlantınız zaten varsa, bağlantı girişiminin nesne zaten bağlı olduğu için başarısız olduğunu belirten bir Argument Error istisnası atılır.

Bir Flash Player örneği bu SWF dosyasına her bağlandığında ve belirtilen yerel bağlantı için herhangi bir yöntemi çağırmayı denediğinde, istek, client özelliği tarafından belirtilen ve CustomClient1 sınıfı olarak ayarlanan sınıfa gönderilir:

package 
{ 
    import flash.events.*; 
    import flash.system.fscommand; 
    import flash.utils.Timer; 
    public class CustomClient1 extends Object 
    { 
        public function doMessage(value:String = ""):void 
        { 
            trace(value); 
        } 
        public function doQuit():void 
        { 
            trace("quitting in 5 seconds"); 
            this.close(); 
            var quitTimer:Timer = new Timer(5000, 1); 
            quitTimer.addEventListener(TimerEvent.TIMER, closeHandler); 
        } 
        public function closeHandler(event:TimerEvent):void 
        { 
            fscommand("quit"); 
        } 
    } 
}

LocalConnection sunucusu oluşturmak için, LocalConnection.connect() yöntemini çağırın ve benzersiz bir bağlantı adı sağlayın. Belirtilen adla önceden bağlantınız varsa bir ArgumentError hatası oluşturulur ve bu hata, nesne zaten bağlanmış olduğundan bağlantı girişiminin başarısız olduğunu belirtir.

Aşağıdaki parçacık conn1 adına sahip bir LocalConnection öğesinin nasıl oluşturulacağını gösterir:
try 
{ 
    connection.connect("conn1"); 
} 
catch (error:ArgumentError) 
{ 
    trace("Error! Server already exists\n"); 
}
İkincil uygulamadan birincil uygulamaya bağlanmak için ilk olarak, gönderen LocalConnection nesnesinde bir LocalConnection nesnesi oluşturmanız, daha sonra bağlantı adı ve yürütülecek yöntem adıyla birlikte LocalConnection.send() yöntemini çağırmanız gerekir. Örneğin, doQuit yöntemini önceden oluşturduğunuz LocalConnection nesnesine göndermek için aşağıdaki kodu kullanın:
sendingConnection.send("conn1", "doQuit");

Bu kod, var olan LocalConnection nesnesini conn1 adlı bağlantıyla bağlar ve uzak uygulamadaki doMessage() yöntemini çağırır. Uzak uygulamaya parametre göndermek istiyorsanız, aşağıdaki parçacığın gösterdiği şekilde, send() yöntemindeki yöntem adından sonra ek argümanlar belirlersiniz:

sendingConnection.send("conn1", "doMessage", "Hello world");

Farklı etki alanlarında ve diğer AIR uygulamalarındaki içeriğe bağlanma

Yalnızca belirli etki alanlarından iletişime izin vermek için, LocalConnection sınıfının allowDomain() veya allowInsecureDomain() yöntemlerini çağırın ve izin verilecek bir veya daha çok etki alanı adını onaylayarak, bu LocalConnection nesnesine erişme izni olan bir veya daha çok etki alanının listesini iletin.

Önceki ActionScript sürümlerinde LocalConnection.allowDomain() ve LocalConnection.allowInsecureDomain() öğeleri, geliştiriciler tarafından uygulanması ve bir Boolean değeri döndürmesi gereken geri çağrı yöntemleriydi. ActionScript 3.0'da LocalConnection.allowDomain() ve LocalConnection.allowInsecureDomain() öğesinin ikisi de, geliştiricilerin Security.allowDomain() ve Security.allowInsecureDomain() gibi çağırarak, izin verilecek bir veya daha fazla etki alanını iletebildiği yerleşik yöntemlerdir.

Flash Player 8, yerel SWF dosyaları üzerinde güvenlik kısıtlamaları getirmiştir. İnternet'e erişmesine izin verilen bir SWF dosyası aynı zamanda yerel dosya sistemine erişime sahip olamaz. localhost öğesini belirtirseniz, herhangi bir yerel SWF dosyası SWF dosyasına erişebilir. LocalConnection.send() yöntemi, çağıran kodun erişiminin olmadığı bir güvenlik sanal alanındaki SWF dosyasıyla iletişim kurmayı denerse, bir securityError olayı( SecurityErrorEvent.SECURITY_ERROR ) gönderilir. Bu hatayı gidermek için, alıcının LocalConnection.allowDomain() yönteminde çağıranın etki alanını belirtebilirsiniz.

LocalConnection.allowDomain() ve LocalConnection.allowInsecureDomain() yönemlerine iletebileceğiniz iki özel değer vardır: * ve localhost . Yıldız değeri (*) tüm etki alanlarından erişime izin verir. localhost dizesi, yerel olarak yüklenen, ancak uygulama kaynak dizininin dışında bulunan içerikten uygulamaya yapılan çağrılara olanak verir.

LocalConnection.send() yöntemi, kodun erişime sahip olmadığı bir güvenlik sanal alanından bir uygulamayla iletişim kurma girişiminde bulunursa, securityError olayı( SecurityErrorEvent.SECURITY_ERROR ) gönderilir. Bu hatayı gidermek için, alıcının LocalConnection.allowDomain() yönteminde çağıranın etki alanını belirtebilirsiniz.

Yalnızca aynı etki alanında bulunan içerik arasında iletişim uygulamak istiyorsanız, alt çizgiyle ( _ ) başlamayan ve etki alanı adı belirtmeyen (örneğin, myDomain:connectionName ) bir connectionName parametresi belirleyebilirsiniz. LocalConnection.connect(connectionName) komutundaki dizenin aynısını kullanın.

Farklı etki alanlarında bulunan içerik arasında iletişim uygularsanız, alt çizgiyle başlayan bir connectionName parametresi belirlersiniz. Alt çizginin belirtilmesi, alıcı LocalConnection nesnesine sahip içeriği etki alanları arasında daha iyi taşınabilir duruma getirir. İki olası durum şöyledir:

  • connectionName için dize alt çizgiyle başlamıyorsa, çalışma zamanı üst etki alanı adını ve iki nokta karakterini içeren bir önek ekler (örneğin, myDomain:connectionName ). Bu bağlantınızın diğer etki alanlarından aynı ada sahip bağlantılarla çakışmamasını sağlasa da, her gönderen LocalConnection nesnesi bu üst etki alanını belirtmelidir (örneğin, myDomain:connectionName ). Alıcı LocalConnection nesnesini içeren HTML veya SWF dosyasını başka bir etki alanına taşıdığınızda, çalışma zamanı yeni üst etki alanını yansıtmak için öneki değiştirir (örneğin, anotherDomain:connectionName ). Tüm gönderen LocalConnection nesneleri yeni üst etki alanını gösterecek biçimde elle düzenlenmelidir.

  • connectionName için dize alt çizgiyle başlıyorsa (örneğin, _connectionName ), çalışma zamanı dizeye önek eklemez. Bu, alıcı ve gönderen LocalConnection nesnelerinin connectionName için aynı dizeyi kullandığı anlamına gelir. Alıcı nesne tüm etki alanlarından bağlantıların kabul edileceğini belirtmek için LocalConnection.allowDomain() öğesini kullanıyorsa, alıcı LocalConnection nesnesini içeren HTML veya SWF dosyasını herhangi bir gönderen LocalConnection nesnesini değiştirmeden başka bir etki alanına taşıyabilirsiniz.

    connectionName kısmında alt çizgili adlar kullanmanın dezavantajı, örneğin iki uygulama aynı connectionName öğesini kullanarak bağlanmaya çalıştığında olduğu gibi çatışmaların ortaya çıkması olasılığıdır. Bununla ilgili ikinci dezavantaj da güvenlikle ilgilidir. Alt çizgi sözdizimini kullanan bağlantı adları, listeleme uygulamasının etki alanını tanımlamaz. Bu nedenlerle, etki alanıyla nitelenen adlar tercih edilir.

Adobe AIR

AIR uygulamasının güvenlik sanal alanında çalışan içerikle (AIR uygulamasıyla yüklenen içerik) bağlantı kurmak için bağlantı adının önüne AIR uygulamasını tanımlayan bir üst etki alanı adı eklemelisiniz. Üst etki alanı adı app# ile başlar ve uygulama adı, bir nokta (.) karakteri ve yayıncı kimliğiyle (tanımlandıysa) devam eder. Örneğin, uygulama kimliğine sahip bir connectionName parametresiyle kullanılacak uygun üst etki alanı adı com.example.air.MyApp şeklindeyken, yayıncı kimliği olmayan parametreyle kullanılacak olan ad şu şekildedir: "app#com.example.air.MyApp" Bu nedenle, temel bağlantı adı “appConnection” ise, connectionName parametresinde kullanılacak tüm dize şu şekildedir: "app#com.example.air.MyApp:appConnection" Uygulamanın yayıncı kimliği varsa, üst etki alanı adı dizesine bu kimlik de dahil edilmelidir: "app#com.example.air.MyApp.B146A943FBD637B68C334022D304CEA226D129B4.1" .

Başka bir AIR uygulamasının yerel bağlantı üzerinden uygulamanızla iletişim kurmasına izin verdiğinizde, yerel bağlantı etki alanı adında iletilen LocalConnection nesnesinin allowDomain() yöntemini çağırmalısınız. AIR uygulaması için, bu etki alanı adı, bağlantı dizesinde olduğu gibi uygulama ve yayıncı kimliklerinden oluşturulur. Örneğin, gönderen AIR uygulaması com.example.air.FriendlyApp uygulama kimliği ve 214649436BD677B62C33D02233043EA236D13934.1 yayıncı kimliğine sahipse, bu uygulamanın bağlanmasına izin vermek için kullanacağınız etki alanı dizesi şudur: app#com.example.air.FriendlyApp.214649436BD677B62C33D02233043EA236D13934.1 . (AIR 1.5.3'ten itibaren, tüm AIR uygulamaları yayıncı kimliğine sahip değildir.)