Diğer Flash Player ve AIR örneklerine bağlanmaFlash 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ındaLocalConnection 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:
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.htmlAdobe 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:
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ğiisPerUser ö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öndermeFarklı 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ğlanmaYalnı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:
Adobe AIRAIR 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.) |
|