<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>maliboo blog &#187; source</title>
	<atom:link href="http://maliboo.pl/blog/category/source/feed/" rel="self" type="application/rss+xml" />
	<link>http://maliboo.pl</link>
	<description>Po prostu kulsko!</description>
	<lastBuildDate>Fri, 30 Apr 2010 10:18:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>JSAMF: JavaScript AMF Library</title>
		<link>http://maliboo.pl/blog/2009/06/04/jsamf-javascript-amf-library/</link>
		<comments>http://maliboo.pl/blog/2009/06/04/jsamf-javascript-amf-library/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 15:36:49 +0000</pubDate>
		<dc:creator>maliboo</dc:creator>
				<category><![CDATA[flash]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[amf]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://maliboo.pl/?p=70</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->JSAMF to javascriptowa biblioteka obsługująca istniejące serwisy AMF. Stworzona głównie na potrzeby lekkich zastosowań pisanych głównie w amfphp, PyAMF, czy AmFast. Wersja pre-alpha obsługuje tylko zdalne wywoływanie metod i odbieranie rezultatów. Docelowo chcę dodać również trwałe połączenie z serwerem do obsługi server push, pseudo-mapowanie klas i jakąś przyzwoitą obsługę błędów po stronie JS. Po dość [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p><a href="http://code.google.com/p/jsamf/">JSAMF</a> to javascriptowa biblioteka obsługująca istniejące serwisy AMF. Stworzona głównie na potrzeby lekkich zastosowań pisanych głównie w <a href="http://www.amfphp.org/">amfphp</a>, <a href="http://pyamf.org/">PyAMF</a>, czy <a href="http://code.google.com/p/amfast/">AmFast</a>. Wersja pre-alpha obsługuje tylko zdalne wywoływanie metod i odbieranie rezultatów. Docelowo chcę dodać również trwałe połączenie z serwerem do obsługi <a href="http://en.wikipedia.org/wiki/Push_technology">server push</a>, pseudo-mapowanie klas i jakąś przyzwoitą obsługę błędów po stronie JS.</p>
<p>Po dość długich poszukiwaniach podobnego projektu okazało się, że dość podobne rozwiązanie istnieje już w <a href="http://livedocs.adobe.com/blazeds/1/blazeds_devguide/ajaxds_1.html">Blaze DS</a>. Jednak moim  celem jest utrzymanie względnie małego rozmiaru biblioteki i jak najbardziej generycznego podejścia do tematu.</p>
]]></content:encoded>
			<wfw:commentRss>http://maliboo.pl/blog/2009/06/04/jsamf-javascript-amf-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bezpieczeństwo aplikacji FMS</title>
		<link>http://maliboo.pl/blog/2007/06/22/bezpieczenstwo-aplikacji-fms/</link>
		<comments>http://maliboo.pl/blog/2007/06/22/bezpieczenstwo-aplikacji-fms/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 20:30:14 +0000</pubDate>
		<dc:creator>maliboo</dc:creator>
				<category><![CDATA[fms]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://maliboo.pl/blog/2007/06/22/bezpieczenstwo-aplikacji-fms/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Tekst jest skierowany do osób zajmujących się poważniej FMS i rozumiejących ideę frameworka server-side Flash Media Servera 2. Jak znajdę trochę czasu to może coś więcej o tym napiszę, bo widzę, że w naszym pięknym kraju mało kto lubi dzielić się wiedzą. A ci co się już decydują sa hackowani ;) Póki co polecam ten [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Tekst jest skierowany do osób zajmujących się poważniej <a href="http://www.adobe.com/products/flashmediaserver/">FMS</a> i rozumiejących ideę frameworka server-side Flash Media Servera 2. Jak znajdę trochę czasu to może coś więcej o tym napiszę, bo widzę, że w naszym pięknym kraju <a href="http://flashmediaserver.pl/blog/">mało kto</a> lubi dzielić się wiedzą. A ci co się już decydują sa hackowani ;) Póki co polecam <a href="http://www.adobe.com/devnet/flashcom/articles/framework.html">ten</a> artykuł. Jest stary jak <a href="http://pl.wikipedia.org/wiki/%C5%9Awiat_Dysku">świat</a>, ale też jak dobre wino. Bardziej to z racji samego FMS, który w wersji drugiej nadal oparty jest na <a href="http://www.mozilla.org/">mozillowym</a> <a href="http://www.mozilla.org/js/spidermonkey/">SpiderMonkey</a>. Adobiu! Czas na <a href="http://www.mozilla.org/projects/tamarin/">Tamarina</a> w <a href="/blog/2006/11/13/tamarin-inaczej/">FMS3</a>...</p>
<p>Przyszło mi rozszerzyć funkcjonalność wideoczata o moderację wypowiedzi. Moderowanie działa na zasadzie kolejkowania wiadomości w SharedObject. Moderator może się podłączyć do takiego obiektu i zarządzać listą wypowiedzi. Zawsze możemy sobie zhardkodować taki obiekt po stronie serwera i tylko ktoś posiadający wersję moderatorską czata będzie wiedział gdzie się podłączać. Ale po co cokolwiek hardkodować, jeśli można wszystko zrobić prostą metodą znaną chociażby z ciasteczek przeglądarki.</p>
<p>Jak wiadomo komponenty po stronie serwera mogą być dynamicznie tworzone. To dzięki temu najbardziej oporny z <strong>tfu</strong>rców będzie potrafił sklecić czata. Magia dzieje się z pomocą dynamicznej instancjacji (<a href="http://www.adobe.com/devnet/flashcom/articles/framework_4.0.html">facade.asc</a>). Zblokować to możemy łatwo ustawiając naszą klasę do zarządzania moderowaniem na niedynamiczną. Dzięki temu nikt niepowołany nie stworzy własnej instancji komponentu moderowania po stronie serwera. Ok, mamy już bezpieczeństwo, nie rezygnując z zalet jakie daje nam koncepcja frejmłorku. Teraz wypadałoby stworzyć obiekt. I tu przechodzimy do clue. Chat posiada publiczną metodę <code>turnOnModeration</code>, która zwraca nazwę obiektu "moderatora". Dzięki tej nazwie możemy dokonywać magii po stronie serwera. Oczywiście wąskim gardłem jest takie zabezpieczenie metody <code>turnOnModeration</code>, żeby nie zwracała tej nazwy niepożądanym użyszkodnikom. Ale to temat na inny wpis.</p>
<p>Teraz wystarczy tylko stworzyć obiekt o losowej nazwie i zwrócić ją <strong>uprawnionemu</strong> użytkownikowi. Pomysł jest podobny do tego w jaki sposób przechowuje profile <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Player</a>, czy <a href="http://www.thunderbird.pl/">Thunderbird</a>. Jeśli nie znam nazwy katalogu (tu: obiektu), to znając jego strukturę (tu: <a href="http://pl.wikipedia.org/wiki/API_%28informatyka%29">API</a>)  po stronie klienta, czy nawet serwera serwera nic nie wskóram. Tym sposobem możemy (chociaż nie musimy) załączyć API do moderowania w zwykłym, uniwersalnym kliencie. Teraz każdy domorosły chakier, nawet wyposażony w ostatnią wersję <a href="http://buraks.com/asv/">ASV</a>, może nam nafiukać.</p>
<div class="igBar"><span id="lactionscript-2"><a href="#" onclick="javascript:showPlainTxt('actionscript-2'); return false;">PLAIN TEXT</a></span></p>
</div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-2">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">function</span> NameGenerator <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">length</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">//Dlugosc podstawowej nazwy:</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">length</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">length</span> &amp;lt;= <span style="color: #cc66cc;color:#800000;">0</span> || <span style="color: #0066CC;">length</span> == <span style="color: #0066CC;">undefined</span> || length&amp;gt; <span style="color: #cc66cc;color:#800000;">31</span><span style="color: #66cc66;">&#41;</span>? <span style="color: #cc66cc;color:#800000;">8</span> : <span style="color: #0066CC;">length</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> now = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0066CC;">this</span>.<span style="color: #006600;">weeks</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span>now.<span style="color: #0066CC;">getYear</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>+<span style="color: #cc66cc;color:#800000;">1900</span>, now.<span style="color: #0066CC;">getMonth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, now.<span style="color: #0066CC;">getDate</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, now.<span style="color: #0066CC;">getHours</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">//Podstawowe, dozwolone znaki w nazwie:</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">NameGenerator.<span style="color: #006600;">CHARS</span> = <span style="color: #ff0000;">"ABCDEFGHIJLMNOPQRSTUVWXYZabcdefghjklmnopqrstuvwxz"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">NameGenerator.<span style="color: #0066CC;">prototype</span>.<span style="color: #006600;">getName</span> = <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">name</span> = <span style="color: #ff0000;">""</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> i = <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">length</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> rl = NameGenerator.<span style="color: #006600;">CHARS</span>.<span style="color: #0066CC;">length</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span>i--<span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0066CC;">name</span> += NameGenerator.<span style="color: #006600;">CHARS</span>.<span style="color: #0066CC;">charAt</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">floor</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>*rl<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">//Zwracamy nazwe z malym timestampem pomniejszanym o losowa wartosc:</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #b1b100;">return</span> <span style="color: #0066CC;">name</span>+<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">floor</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>*1e4<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #0066CC;">this</span>.<span style="color: #006600;">weeks</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>NameGeneratora używam do tradycyjnego tworzenia komponentów po stronie serwera, a następnie informuję klienta-moderatora "gdzie" jest instancja. Potem zabawa wygląda tak jak przy każdym innym komponencie. Tworzymy po stronie klienta obiekt tej klasy z otrzymaną nazwą i hasanko! Zatem <a href="http://pl.wikipedia.org/wiki/Krzywa_zapominania" title=";-)">krzywa uczenia się</a> dla rozumiejących temat jest prawie płaska. Oczywiście, jeśli ktoś w trakcie sesji przechwyci tę nazwę to amba. Ale jeśli komuś się to uda, to znaczy, że może przechwycić dużo więcej niemiłych rzeczy. A nazwa obiektu moderatora to będzie wtedy pikuś.</p>
]]></content:encoded>
			<wfw:commentRss>http://maliboo.pl/blog/2007/06/22/bezpieczenstwo-aplikacji-fms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apollo FTP update</title>
		<link>http://maliboo.pl/blog/2007/05/10/apollo-ftp-update/</link>
		<comments>http://maliboo.pl/blog/2007/05/10/apollo-ftp-update/#comments</comments>
		<pubDate>Thu, 10 May 2007 18:43:53 +0000</pubDate>
		<dc:creator>maliboo</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://maliboo.pl/blog/2007/05/10/apollo-ftp-update/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Wyczyściłem i lekko zrefaktoryzowałem kod biblioteki FTP pod Apollo, zacząłem dodawać komentarze. Wczoraj mnie naszło na przerobienie tego na coś cairngormową modłę. Niby mamy model: w postaci klienta FTP, niby mamy komendy, a wręcz ich sekwencje, nawet część odpowiedzi można by sprowadzić do value objectów... Ale jakoś nie pasuje mi upychanie w ramy tego frejmłorku. [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p><a href="http://projects.maliboo.pl/FlexFTP/">Wyczyściłem i lekko zrefaktoryzowałem</a> kod <a href="/blog/2007/04/25/flexftp-apolloimpl/">biblioteki FTP</a> pod <a href="http://www.adobe.com/go/apollo">Apollo</a>, zacząłem dodawać komentarze. Wczoraj mnie naszło na przerobienie tego na coś <a href="http://www.adobe.com/go/cairngorm/">cairngormową</a> modłę. Niby mamy model: w postaci klienta FTP, niby mamy komendy, a wręcz ich sekwencje, nawet część odpowiedzi można by sprowadzić do <a href="http://wiki.moredesignpatterns.com/space/Value+Object">value objectów</a>... Ale jakoś nie pasuje mi upychanie w ramy tego frejmłorku.</p>
<p>Ale jakoś do roboty zniechęca mnie temat <a href="/blog/2007/04/22/flashnetsocketflush/">socketów</a>. Ponoć nic z tym nie zrobią, zatem wysyłanie plików będzie <a href="http://www.urbandictionary.com/define.php?term=sucks">ssało</a> niemiłosiernie, z racji braku informacji o postępie. Oczywiście mogę i będę to <a href="http://www.define.pl/termin,sciema,254.html">fake'ował</a> paskiem postępu (nieokreślonego), ale co to za zabawa? Obejścia w stylu wysyłania niedużego pliku i szacowania prędkości <a href="http://en.wikipedia.org/wiki/Upstream_%28computer_science%29">upstreamu</a> też mnie jakoś nie zachęcają.</p>
<p>Idę popłakać sobie w kącie.</p>
]]></content:encoded>
			<wfw:commentRss>http://maliboo.pl/blog/2007/05/10/apollo-ftp-update/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>FlexFTP: ApolloImpl ;-)</title>
		<link>http://maliboo.pl/blog/2007/04/25/flexftp-apolloimpl/</link>
		<comments>http://maliboo.pl/blog/2007/04/25/flexftp-apolloimpl/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 19:59:10 +0000</pubDate>
		<dc:creator>maliboo</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://maliboo.pl/blog/2007/04/25/flexftp-apolloimpl/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->FlexFTP (draft) Wiadomo, że sockety ssą. Dotknęło mnie to właśnie przy pisaniu biblioteki FTP do Apollo. Póki co traktuję to bardziej jako pilot project, niż coś do używania. Na początku pomyślałem sobie, że najłatwiej będzie wzorować się na jakiejś jawowej implementacji. Jednak wszystko co znalazłem było... Jawowe. Znaczy obsługa socketu/bufora sprowadzała się zwykle do: PLAIN [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p><a href="/projects/FlexFTP">FlexFTP</a> (draft)</p>
<p>Wiadomo, że <a href="/blog/2007/04/22/flashnetsocketflush/">sockety ssą</a>. Dotknęło mnie to właśnie przy pisaniu biblioteki FTP do Apollo. Póki co traktuję to bardziej jako <a href="http://en.wikipedia.org/wiki/Proof_of_concept#In_Software_Development">pilot project</a>, niż coś do używania. Na początku pomyślałem sobie, że najłatwiej będzie wzorować się na jakiejś jawowej implementacji. Jednak wszystko co znalazłem było... Jawowe. Znaczy obsługa socketu/bufora sprowadzała się zwykle do:</p>
<div class="igBar"><span id="ljava-4"><a href="#" onclick="javascript:showPlainTxt('java-4'); return false;">PLAIN TEXT</a></span></p>
</div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-4">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>bytesRead = input.<span style="color: #006600;">read</span><span style="color: #66cc66;">&#40;</span>buffer<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> != -<span style="color: #cc66cc;color:#800000;">1</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">output.<span style="color: #006600;">write</span><span style="color: #66cc66;">&#40;</span>buffer, <span style="color: #cc66cc;color:#800000;">0</span>, bytesRead<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">output.<span style="color: #006600;">flush</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
co w przypadku flashowego modelu zdarzeń się nie sprawdzi.</p>
<p>Aktualnie wygląda to tak, że mamy klienta <code>FTPClient</code> i komendy <code>FTPCommand</code> i odpowiedzi serwera <code>FTPResponse</code>. Klient wysyła podstawowe zdarzenia <code>FTPEvent.CONNECTED</code> po podłączeniu, <code>COMMAND</code> po wysłaniu komendy i <code>RESPONSE</code> po otrzymaniu odpowiedzi. Na czas wysłania komendy, czy raczej serii operacji komenda-odpowiedź klient jest blokowany, żeby nie wbić się w kolejkę akcji. Wiadomo taki jest FTP. Wszystkie akcje powinny dziedziczyć po klasie FTPInvoker. Jej interfejs zapewnia początek wywołania <code>execute()</code>, obsługę odpowiedzi <code>responseReceived()</code> i sfinalizowanie bieżącej transakcji <code>finalize()</code>.</p>
<p>Nie wykluczone, czy może na pewno ostatecznie wyglądać to będzie zupełnie inaczej. Bo już na dzień dzisiejszy nie podoba mi sie sposób tworzenia pasywnego połączenia i implementacja eftepowych akcji. Aktualnie klient podłącza się do serwera, listuje katalogi i zwraca ich zawartość jako tablicę obiektów <code>FTPFile</code>, ściąga pliki na lokalny dysk i wysyła. Z wysyłaniem wiadomo jak jest. Postępu poznać w stanie nie jesteśmy. Bo Adobe se odpuścił na socketach... Więc jeśli ktoś ma wolne łącze, lub wgrywa duuuży plik będzie sobie musiał poczekać na <code>FTPEvent.UPLOAD</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://maliboo.pl/blog/2007/04/25/flexftp-apolloimpl/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>

