Saf as3 projelerinde webservis kullanımı

Webservisleri yapıları gereği iletişimlerini xml  mesajları üzerinden gerçekleştirmekte, gerek veri yollarken gerek veri alırken bütün bu veri yığınını soap protokolleri dahilinde encode etmektedir.Her ne kadar mutlak bir gereksinim olmasada webservislerin clientlarına sunduğu operasyon tanımlamaları WSDL ile sağlanmaktadır.Biz ise basitçe kullandığımız yazılım alt yapısı ile wsdl tanımlamalarından operasyonları öğreniyor ve tercih ettiğimiz operasyonu başka bir adımda başlatmaya karar veriyoruz. HTTP protokolu üzerinden asenkron olarak gerçekleşen bir webservis operasyonu gönderilen xml paketine benzer cevap paketiyle geri dönmektedir.

Eğer sizde benim gibi pure as3 projeleri geliştiriyorsanız muhtemelen webservislerle veri alışverişinin bazen ne kadar da can sıkıcı olabileceğini görmüşsünüzdür.Ben yukarda tanımladığım süreçleri  bir süre welconsidered webservice component yardımıyla sürdürmüştüm.Nitekim welconsidered componenti suya sabuna dokunmadan sizin operasyon parametrelerini sunucuya iletmekte sürecin sonunda ise kocaman bir xml dönütüyle sizi başbaşa bırakmakta.Günün sonunda ise kendinizi namespaceler ile boğuşmaktan canı çıkmış, istediğiniz veriye ulaşmak için ağzıyla kuş tutmuş olarak buluyorsunuz  : )

Webserviste tanımlanmış bir methodu tetiklediğinizde size dönen yapılandırılmış xml verisi muhtemelen aşağıdaki örneğe benzer bir şey olacaktır.

1
2
3
4
5
6
7
8
9
10
11
12
?xml version="1.0" encoding="utf-8"?>
<ServiceResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://away4m.com/">
  <ResponseMessage>İşlem Başarılı.</ResponseMessage>
  <ResponseCode>0</ResponseCode>
  <ResponseObject xsi:type="NewsFeedList">
    <Data>
      <NewsFeed Title="NTVMSNBC.com: Hava Yol" Url="http://www.ntvmsnbc.com/id/24927997/device/rss/rss.xml" />
      <NewsFeed Title="NTVMSNBC.com: Bilişim Teknolojileri" Url="http://www.ntvmsnbc.com/id/24927541/device/rss/rss.xml" />
    </Data>
 
  </ResponseObject>
</ServiceResponse>

Flex ile gelen soap yardımıcı sınıfları pure as3 projelerinde ihtiyaç duyulan temel webservis iletişimini fazlasıyla sağlamakta.Bunun için harici developerların geliştirdiği webservise sınıflarını aramamıza gerek kalmamaktadır.

Nitekim flash cs4 kullandığınızda dahi flex framework dizininde bulabileceğiniz “rpc.swc” dosyasını flash ide proje ayarları panelinden çalışmanıza entegre edebiliyorsunuz.Ben as3 projelerimi flashdevelop üzerinden gerçekleştirdiğim için swc dosyalarını istediğim anda projeye ekleyip çıkarmada herhangi bir zorlukla karşılaşmıyorum.

flash ide swc embed flashdevelop swc import

as3 projelerinizde flex altyapısını kullandığınızda bir webservice operasyon çağrısı aşağıdakine benzer yapıda olmaktadır.

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.utils.describeType;
	import hr.binaria.asx3m.Asx3mer;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.soap.LoadEvent;
	import mx.rpc.soap.Operation;
	import mx.rpc.soap.WebService;
	import nl.demonsters.debugger.MonsterDebugger;
 
	/**
	 * ...
	 * @author away4m
	 */
	public class Main extends Sprite
	{
 
		private var ws:WebService = new WebService();
		private var myOperation:Operation;
 
		public function Main():void
		{
 
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private  function init(e:Event = null):void
		{
			trace(this + ".init");
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			ws.addEventListener("load", finishedLoading);
			ws.loadWSDL("http://www.deeptraining.com/webservices/weather.asmx?WSDL");
		}
 
		private function finishedLoading(evt:LoadEvent = null):void
		{
			trace(this + ".finishedLoading");
			myOperation = Operation(ws.getOperation("GetWeather"));
 
			myOperation.addEventListener("fault", wsdlFault);
			myOperation.addEventListener("result", wsdlResult);
			myOperation.send("California");
		}
 
		private function wsdlFault(evt:FaultEvent):void
		{
			trace(evt.fault);
		}
 
		private function wsdlResult(evt:ResultEvent):void
		{
			trace(evt.result);
		}
 
	}
 
}

Kodda basitçe WebService sınıfı tanımlanıp bu sınıfın hangi operasyonlarını gerçekleştirebileceğini öğrenebilmesi için webservisin operasyon tanımlamalarınınyeraldığı wsdl yolunu sağlamaktayız.Bu örnekte bu http://www.deeptraining.com/webservices/weather.asmx?WSDL.WSDL yüklenemesi gerçekleştikten sonra artık istediğimiz operasyon çağrısını başlatabiliriz.Herhangi bir operasyon çağrısında muhtemel başarı ya da başarısızlık durumunu takip edebileceğimiz iki adet asenkron event handler bulunmaktadır.

kaynak dosyaları

Basitçe as3 projelerinde webservis kullanımını tanıtmaya çalıştığım bu yazının devamında başarılı webservis kodlama pratikleri (puremvc proxy’ nin webservis ile kardeşliği ), webservisler ne yer ne yemez durumları ve ayriyeten .NET mimarisinin DTO dediği data transfer objectlerin bizdeki VO value objectlerle nasıl kardeşlik kurabileceği üzerinde duracağım.

 

Swfprofiler ile proje performansına hükmedin

Bir tür deterjan reklamının girişini andıran bir başlık ile aslında Lost in Actionscript blogunun yazarı olan Shane McCartney bir çalışmasını paylaşmak istedim.SwfProfiler proje development sırasında gözümüzden kaçan performans detaylarını can sıkmadan sizlere sunma kaygısında.Nitekim sağ tıklama menusune Show Profiler / Hide Profiler ile yeleşen bu yardımcı uygulama ile anlık fps, otalama fps ve bellek kullanımı gibi uygulama performansı hakkında bilgi verebilecek detaylar hem grafiksel hem text halinde uygulamanızda çalışır hale geliyor.Gereğinden fazla iş yapmayıp uygulamınızı şişirmeye gayret eden bu oyuncak ile eğlenebileceğinizi umuyorum.

Geliştiricinin bu çalışmasını proje svn klasöründen çekebilirsiniz.

The Flash plugin is required to view this object.

proje dosyaları

 

Avatar filmini Adobe Air ile takip edin

 

5940_1665501476

Yakın zamanda yayına girecek olan 20th Century Fox yapımı Avatar filmin tanıtımı için Adobe air platformundan faydalanmış.Uygulamada mevcut video trailerin zaman çizelgesine belirli hotpointler eklenip kullanıcının video röportajlarını da izleyebilme imkanı sağlanmış.

avatar air

İstenildiği anda ana video akışına geri dönülebilen bu air uygulmasında kullanıcı ayriyeten film ile ilgili haber akışını flicker,twitter ve youtube servisleri üzerinden takip edebiliyor.

avatar air 2

Kısa süreli masaüstü uygulamaları kullanımı hakkında ilginç bir kullanım örneği oluşturan avatar air uygulaması ilerde air uygulamalarının haber okuyucuları dışında da gayet başarılı kullanılabileceğini bizlere gösteriyor

air uygulamasının kurulmasını sağlayacak badget için buraya avatar resmi sitesi içinse şuraya uğrayabilirsiniz

 

As3 mousewheel olaylarının tarayıcı sayfasını da etkimesi sorunu

Liam O’Donnell blog yazılarını okurken karşılaştığım ilginç bir yazıyı paylaşmak isterim.Yazıda as3 ile beraber yüzleşmemiz gereken gayet can sıkıcı bir sorun irdelenip çözüm bulunmuş.Çoğumuzun gerçekte farkında olup es geçtiğimiz bu sorun ise as3 ile hazırlanmış gömülü flash movielerinde mousewheel tuşunu kullanırken flash ile birlikte tarayıcı sayfasının da scroll ediyor olması.Bu sorunu test etmek için buradan iki ayrı flash uygulamayı tarayıcınızda çalıştırabilirsiniz.

Daha önceki as2 kodlarımızda bu sıkıntıyla karşılaşmama nedenimiz as2 flash movieleri focus durumundayken mousewheel olaylarını tarayıcıya bildirmemesiydi.İnternet tarayıcılarıma yaptığım denemeler sonucunda firefox 3.5.5 ve internet explorer 7,8 tarayıcılarında çözüm gayet başarılı çalışıyor. Opera 10.20 Alpha ve Safari 4.04 sürümlerinde maalesef değişen bir şey yok.

As3 ile beraber gelen en can sıkıcı sorunlar listelense popup blocker ve wmode transparant sorunlarının ardısıra muhtemelen bu sorun gelecektir.Neyseki bu sorun için de artık gayet basit bir çözüm yolu var.Liam sorunu çözerken popup blocker ve wmode transparant sorunlarındaki çözüm yoluna benzer bir yol takip etmiş.Çözüm yolu ExternalInterface sınıfı üzerinden tarayıcı sayfasına dinamik javascript kodları ekleyip bu javascript kodları yardımıyla istenmedik tarayıcı davranışını ortaadan kaldırmayı denemiş.
Adobe resmi olarak henüz çözüm üretmediği bu soruna geçici bir çözüm üretmek için Liam’ın MouseWheelTrap adını verdiği classı uygulamamız başlarken bir kez yürütmemiz yeterli.

?View Code ACTIONSCRIPT
1
2
import com.spikything.utils.MouseWheelTrap;
MouseWheelTrap.setup(stage);

Tarayıcıya eklenen javascript kodu ise :

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var browserScrolling;
function allowBrowserScroll(value) {
   browserScrolling = value;
   }
function handle(delta) {
   if(!browserScrolling) {
      return false;
      }
   return true;
   }
function wheel(event) {
   var delta = 0;
   if(!event) {
      event = window.event;
      }
   if(event.wheelDelta) {
      delta = event.wheelDelta / 120;
      if(window.opera) {
         delta =- delta;
         }
      }
   else if(event.detail) {
      delta =- event.detail / 3;
      }
   if(delta) {
      handle(delta);
      }
   if(!browserScrolling) {
      if(event.preventDefault) {
         event.preventDefault();
         }
      event.returnValue = false;
      }
   }
if(window.addEventListener) {
   window.addEventListener('DOMMouseScroll', wheel, false);
   }
window.onmousewheel = document.onmousewheel = wheel;
allowBrowserScroll(true);
 
Get Adobe Flash playerPlugin by wpburn.com wordpress themes