- notice 스킨변경~
[플렉스(Flex)]검색결과, 56건
- [Flex] Flash Socket 이용 시 소켓 보안문제인 <policy-file-request/> 문제 해결방법-_- 2010/07/25
- [Flash] 와~ Flash Professional CS5와 Flash Builder의 연동된다 조타조타~ 2010/05/05 (8)
- [Flex4] Flash Builder4 Beta 2를 이용해 Flex4에서 기능이 향상(?)된 View State 기능체험-_- 2009/11/16 (2)
- [Flex/책] 비주얼 플렉스 UX 디자인 후기 - 플렉스어플에 날개를...-_- 2009/10/30 (2)
- [Flex] Flash Builder 4 Beta2에 포함된 FlexUnit 4 사용하기 2009/10/30
[Flex] Flash Socket 이용 시 소켓 보안문제인 <policy-file-request/> 문제 해결방법-_-
Posted in 플렉스(Flex) // Posted at 2010/07/25 23:04일단, Flash에서 CrossDomain에 걸리는 데이터를 요청할 때 Plicy File인 crossdomain.xml 파일을 root에 정의해둬서 해당 도메인이면 데이터를 허용하게 할 수 있습니다.
소켓도 마찬가지입니다. 해당 도메인에서 해당 포트로 들어온 요청은 받겠다는 정책파일을 작성할 수 있습니다.
최초 소켓이 정책파일을 요청하게 되는 포트는 843포트입니다. 만약 이포트가 열러있지 않다면 현재 연결하려고 하는 포트로 <policy-file-request/>를 날려서 정책파일을 요청하게 됩니다.
그러면 843이든, 해당포트든 간에 정책파일만 날려주면 됩니다.
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" to-ports="10000-10001" />
</cross-domain-policy>소켓에 대한 정책파일을 정의한 것인데, domain에는 허용할 도메인을 쓰고, to-ports에는 허용할 포트를 쓰면 됩니다.
이걸 날려주면 이제 연결할 포트로부터 데이터를 주고 받을 수 있습니다.
초간단 에코예제!
일단 서버는 자바로...(그나마 자신있는 언어라서ㅠㅠ)
일단 PlicyFileServer를 하나 돌릴 쓰레드를 만듭니다.
PlicyFileServer.java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class PolicyFileServer extends Thread{
private ServerSocket serverSocket;
private String policyFile = "<?xml version='1.0'?>" +
"<!DOCTYPE cross-domain-policy SYSTEM '/xml/dtds/cross-domain-policy.dtd'>" +
"<cross-domain-policy>" +
"<allow-access-from domain='*' to-ports='10000' />" +
"</cross-domain-policy>";
@Override
public void run() {
try {
serverSocket = new ServerSocket(843);
while (true) {
final Socket socket = serverSocket.accept();
new Runnable() {
@Override
public void run() {
try {
socket.setSoTimeout(10000);
InputStream in = socket.getInputStream();
byte[] buffer = new byte[23];
if ( in.read(buffer) != -1 && (new String(buffer)).startsWith("<policy-file-request/>") ) {
OutputStream out = socket.getOutputStream();
out.write(policyFile.getBytes());
out.write(0x00);
out.flush();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try { socket.close();} catch(Exception ex){}
}
}
}.run();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
내용을 보면 그냥 서버소켓하나 만들어서 요청이 들어오면 그 소켓으로 policy file을 전송하는 형태입니다. 파일은 만들기 귀찮아서-_- 그냥 String으로 선언-_- 보면 모든도메인에 한해서 10000포트를 열어주는 겁니다.
이제 메인서버!
SocketTest.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketTest {
private ServerSocket server;
public SocketTest() {
try{
server = new ServerSocket(10000);
System.out.println("접속을 기다립니다.");
while (true){
final Socket socket = server.accept();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println("수신데이터 : " + line);
pw.println("Hello! " + line);
pw.flush();
}
} catch (Exception e) {
try { if(socket != null) socket.close(); } catch (Exception ex) {}
}
}
});
t.start();
}
} catch(Exception e){
System.out.println("Error!");
}
}
public static void main(String[] args) {
new PolicyFileServer().start();
new SocketTest();
}
}데이터를 받으면 다시 Hello!를 붙여서 다시 전송해주는 echo서버를 하나 만듭니다.
그리고 main함수에서는 PolicyFileServer쓰레드를 하나 시작하고, EchoServer를 돌립니다.
이제 Flex!
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
applicationComplete="application1_applicationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import spark.components.mediaClasses.VolumeBar;
private var socket:Socket;
protected function application1_applicationCompleteHandler(event:FlexEvent):void
{
socket = new Socket("127.0.0.1", 10000);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
socket.addEventListener(Event.CONNECT, connectHandler);
}
protected function btnSend_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
socket.writeUTFBytes(inputMessage.text + "\n");
socket.flush();
}
private function connectHandler(event:Event):void
{
trace("접속완료!");
hbox.visible = true;
}
private function socketDataHandler(event:ProgressEvent):void
{
var message:String = socket.readUTFBytes(socket.bytesAvailable);
trace("수신메세지 : " + message);
textResult.text = message;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:layout>
<s:VerticalLayout />
</s:layout>
<mx:HBox id="hbox" visible="false" width="100%" horizontalAlign="center">
<s:TextInput id="inputMessage" />
<s:Button id="btnSend" label="송신하기" click="btnSend_clickHandler(event)"/>
</mx:HBox>
<mx:Text id="textResult" width="100%" textAlign="center"/>
</s:Application>
Socket만들어서 10000포트로 연결합니다. 그러면 도메인이 다르게 되면 swf가 843포트로 "<policy-file-request/>"를 날려서 정책파일을 달라고하는데, 서버에서 만들어놓은 PolicyFileServer가 정책파일을 내려주면 받게되면 10000포트로 다시 연결해 연결을 시작하게 됩니다.
몬가 별거 없는데 장황하게 설명해놨네.
그리고, 이런식으로 PolicyFileServer를 서버어플에 통합하면 안되겠죠? 나중에 서버어플이 늘어난다면 계속 새로 추가해야하니, PolicyfileServer를 따로 만들어서 띄워놓으면 되겠죠?^^
일단, 여러 폴리시서버 예제는 구글링하면 많이 나와요~
여기 아래주소는 Java, PHP, C#, VB.NET, Python 등등 예제가 있어요.
http://code.google.com/p/assql/wiki/SecurityInformation
이건 c로 만든거!
http://panzergruppe.hp.infoseek.co.jp/fspfd.html
No Comment
[Flash] 와~ Flash Professional CS5와 Flash Builder의 연동된다 조타조타~
Posted in 플렉스(Flex) // Posted at 2010/05/05 23:56최근 스티브잡스횽이 까고 있는 플래시-_-
CS5 한글판이 나와서 한번 깔아봤는데, 역시 전 한글이 편하네요-_- 어설픈 한글로 되어있어도 그냥 영어로 된 것 보단 낫다고 생각하는 1人...
일단 Flash랑 Flash Builder를 둘 다 깔아야해요~
안깔면 안깔려있다고 뭐라그래요~
일단 Flash에서 액션스크립트 편집기가 좋아졌다고 하는데(전 잘 안써봐서-_-), 여전히 안좋은 것 같은 느낌이 드는....
액션스크립트 클래스 편집은 그냥 Flash Builder에서 하면 맘 편하네요~
둘이서 연동이 되어서 빌더에서 에러 수정 및 편집이 매우 용이해요~
일단 플래시화면!
일단 Flash Builder도 같이 띄워놓아야 합니다. 안그러면 선택하라는 거 안나오는 것 같음.
여기서 ActionScript3프로젝트로 새로 만든다음에, ActionScript 3.0 클래스를 새로 만들면
"어떤 응용 프로그램에서 ActionScript3.0 클래스를 만들어야 합니까?"라는 말로 물어보고, Flash Professional인지 Flash Builder인지 선택할 수 있어요.
그러면 Flash Builder에서 해당 Flash프로젝트 파일인 fla파일을 선택하면 되는데요. 그러면 자동으로 프로젝트도 만들고, ActionScript Class만드는 창도 떠서 만들어지게 됩니다.
사각형을 그리고~ flash에서 불러올 때 자동으로 DrawRect라는 클래스가 코드힌트로 나옴!

잼있는 건 Flash Builder에서도 Control + Enter눌러도 된다는......
일단....여전이 Flash에서 ActionScript편집은 불편합니다. 그래서 얘네들이 Flash Builder 연동을 해서 하는 것 같은데, 정말 괜찮은 기능인 듯 합니다.
일단 플래시화면!
여기서 ActionScript3프로젝트로 새로 만든다음에, ActionScript 3.0 클래스를 새로 만들면
"어떤 응용 프로그램에서 ActionScript3.0 클래스를 만들어야 합니까?"라는 말로 물어보고, Flash Professional인지 Flash Builder인지 선택할 수 있어요.
그러면 Flash Builder에서 해당 Flash프로젝트 파일인 fla파일을 선택하면 되는데요. 그러면 자동으로 프로젝트도 만들고, ActionScript Class만드는 창도 떠서 만들어지게 됩니다.
package
{
import flash.display.Sprite;
public class DrawRect extends Sprite
{
public function DrawRect()
{
this.graphics.beginFill(0x000000);
this.graphics.drawRect(0, 0, 100, 100);
this.graphics.endFill();
}
}
}사각형을 그리고~ flash에서 불러올 때 자동으로 DrawRect라는 클래스가 코드힌트로 나옴!

var drawRect:DrawRect = new DrawRect();
this.addChild(drawRect);
일단....여전이 Flash에서 ActionScript편집은 불편합니다. 그래서 얘네들이 Flash Builder 연동을 해서 하는 것 같은데, 정말 괜찮은 기능인 듯 합니다.
-
길땡
플렉스 그래프가 이쁜것 같아서. . .
DB의 값을 받아와서 그래프로 만들어주려고 했는데. . .
아직 그렇다할 자료가 ㅋㅋㅋㅋㅋ ㅠㅠㅠㅠㅠ
그래도 여기와서 많은 정보 얻고 갑니다. . .ㅎㅎ-
머드초보
아...일단 직접 다 구현하기 힘드시면 flex에서 제공하는 많은 차트가 있거든요. 그걸 사용하시는게^^
이쁘고 좋습니다^^
-
-
-
-
성주
알아냈어요!!
Flash Builder에서 프로젝트 만들때 Flash Professional Project로 해서 fla 파일 연결하면 빌더에서 ctrl+enter로도 테스트무비를 할 수 있더라고요 -
-
머드초보
헉-_-
뭐지.....-_-
내가 아닌 사람이 글을 쓴건가 ㅠㅠ
그...그렇네요. 저 요즘 좀 오락가락해서 ㅠㅠ
죄....죄송합니다 ㅠㅠ
-
[Flex4] Flash Builder4 Beta 2를 이용해 Flex4에서 기능이 향상(?)된 View State 기능체험-_-
Posted in 플렉스(Flex) // Posted at 2009/11/16 17:50예전에 어도비에서 RIA CAMP할 때 STATE기능의 향상이 있을 것이라고 해서 찾아보니 완전히 바뀌었네요.
우선 Flash Builder 4 Beta 2를 다운로드 해서 설치를.....ㅠㅠ
기존 Flex3 방식은 <mx:states> 태그안에 <mx:State>태그가 있는데, 이 안에서 AddChild나 SetProperty태그를 이용해서 해당 state로 변경이 되면 컴포넌트를 삭제하고 추가하거나 값을 변경하는 코드가 들어갔었죠.
Flex4 방식은 위와 같은 방식에서 완전히 바뀌었습니다(사실..flex4로 오면서 거의다 바뀌었다는....).
<s:states>태그안에 <s:State>태그가 들어가는 것은 같지만, 여기서 컴포넌트를 추가하거나 변경하는 코드는 들어가지 않습니다. 그냥 다음에 xml코드에서 해당 컴포넌트들에게 적용을 하게 됩니다. 컴포넌트 태그에 해당 state값에 맞는 코드를 중복으로 선언할 수 있습니다.
해당 State의 Name들이 default, register라면 <s:Panel title="제목" title.register="등록제목" /> 이런형태로 써버리면 currentState가 register로 바뀌면 자동으로 Panel의 title이 title.register값으로 변경이 되게 됩니다.
상세한 기능 및 설명은 Flex 4문서를 보시는 게 더 빠를 듯 합니다.
http://help.adobe.com/en_US/Flex/4.0/UsingSDK/WS2db454920e96a9e51e63e3d11c0bf69084-7fb4.html
http://www.artima.com/articles/flex_4_states.html
1. 디자인모드에서 state설정
그럼 Flash Builder를 실행해서 여기서 State를 설정해봅시다.
Flex로 프로젝트를 하나 만듭니다.
Design모드로 전환!
오른쪽 States View가 있는데, 거기에서 New State를 선택해서 추가합니다.
addbutton이라는 state를 추가합니다. 그리고 기존에 있던 State1은 default로 변경합니다.
그럼 states를 addbutton으로 맞춰놓고, 버튼을 드래그해서 놓습니다.
그리고 Source뷰로 바꾸면 이런 코드가 완성이 되네요^^
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768">
<s:states>
<s:State name="default"/>
<s:State name="addbutton"/>
</s:states>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Button includeIn="addbutton" x="308" y="231" label="Button"/>
</s:Application>Button에 includeIn이라는 attribute값이 들어가있고 거기에 state값이 있네요. 이 버튼은 addbutton일 때만 보이겠다는 것이죠. 아마 이 새로 바뀐 state형태는 기존 ui를 구성하는 mxml코드를 최대한 방해받지 않게 하려고 만든 것 같습니다.
그리고 재미있는 것은 편집 상단에 Show state: 부분이 있는데, state를 default로 바꾸면 button태그부분이 회색으로 dim처리가 되어버립니다-_- 와 멋지네요. UI작성에 방해받지 않게 하려는 배려인 듯.
dim처리...-_-
state별 이벤트 뿐만 아니라 뭐 다양하게 추가할 수 있어요.
Design모드에서 그냥 addbutton state선택하고, 아까 추가한 버튼을 누르면 Properties를 설정할 수 있는데 In states를 클릭해서 All States로 바꿔줍시다^^
그러면 default에서도 나오는데, 버튼선택해서 오른쪽버튼 누르면 generate Service Call이라는 것이 있는데, 그걸 누르면 자동으로 click이벤트 함수를 만들어줍니다.
두개의 state에서 동시에 만들어버리면 이렇게 나오는군요.

신기함-_- 다른 state함수만 dim처리됨-_-
빌더는 여기서 다운로드를...ㅠㅠ
우선 Flex어플은 그냥 기본으로 제공하는 스킨이 있는데요. 대부분이 그대로 쓰지 않습니다-_- 고객들이 싫어해요-_- 어쨌든 디자....
아놔....갑자기 회의 불려갔다왔네....
암튼, 디자인을 해서 입히고 그러는 작업이 추가적으로 들어가는데, 이거 해보면 해볼수록 스트레스가 만빵이에요. 왠지 디자인대로 안입혀지고-_- 어떻게 입히는지 모르겠고 그런 것이 많은데, 플렉스에 디자인을 입히는 방법을 알려주는 책입니다.
게다가 타 애플리케이션(플래시, 포토샵, 일러스트레이터, 파이어웍스 등)과 쉽게 협업을 할 수 있는 내용도 잠깐 나오구요.

음....왠지 이 디자인패턴책이랑 색감이 좀 맞는데?-_-
이 책의 구조는 조쿰 특이합니다. 앞에 이론이 나오고, 뒤에 실습예제가 나오는....
즉 책의 앞부분서부터 절반은 이런식으로 하면 바꿀 수 있다가 나오고, 절반부터 뒷부분은 약간의 실습예제가 나옵니다. 왜 이런 구조를 택했는지 모르겠지만, 전 이 방식이 적응이 되지 않는군요. 왠지 이론을 설명하고 예제가 바로 뒷바쳐줘야 내용을 그나마 이해를 하는 스타일이라-_- 앞에서 이론을 다 읽고, 뒷부분 예제를 읽으려니 왠지 앞부분이 생각이 안나는군요 ^^
그리고, 뒷부분에 나오는 부록도 참 맘에 드네요. 각각 컴포넌트에 대해서 style속성에 대해서 그림을 통해 잘 나타내어주었구요. 그리고, 필터속성이나 유용한 사이트들도 잘 나왔구요^^

마지막으로 디자이너와 보면 참 좋을 듯 한데...디자이너들이 보기엔 Flex를 좀 알아야할 듯. 디자이너들과 함께 협업하는 그날까지~^^
다운로드는 여기서....-_-
Java에서는 Junit이라는 것이 있는데, 4버전에서는 Annotation(@)을 이용해서 쉽게 테스트를 만들곤 했는데요. Flex에서도 비슷한 기법을 이용합니다. 메타데이터를 위에다가 붙여서-_- 손쉽게 테스트를 만들 수 있습니다.
[Test]
public function testMyTest():void
{
}와....Flash Builder를 보면 Java를 많이 따라한 것을 볼 수 있습니다. 예전엔 폴더생성으로만 만들 수 있었던 패키지가 직접적인 패키지 생성메뉴를 만들어서 Package Explorer에서 패키지형태로 볼 수 있습니다.
암튼, 자바와 닮아가는 듯-_-
1. 간단한 프로젝트 생성
Flex Project하나 생성.
2. 서비스 클래스 생성
덧셈 뺄셈 클래스하나 작성
com.mudchobo.test패키지의 Calc클래스 생성
Calc.as
package com.mudchobo.test
{
public class Calc
{
public function Calc()
{
}
public function addition(a:Number, b:Number):Number
{
return a + b;
}
public function subtraction(a:Number, b:Number):Number
{
return a - b;
}
}
}3. 테스트 생성
New -> Test Case Class -> New FlexUnit 4 test선택. Name은 CalcTest로하고 Finish.
CalcTest.as
package flexUnitTests
{
import com.mudchobo.test.Calc;
import flexunit.framework.Assert;
public class CalcTest
{
private var calc:Calc;
public function CalcTest()
{
}
[Before]
public function before():void
{
calc = new Calc();
}
[Test]
public function testAddition():void
{
var result:Number = calc.addition(50, 50);
Assert.assertEquals(result, 100);
}
[Test]
public function testSubtraction():void
{
var result:Number = calc.subtraction(50, 50);
Assert.assertEquals(result, 0);
}
}
}여기까지 작성하면 FlexUnitCompiler.mxml이라는 파일이 자동으로 생겼을겁니다. 이건 건드리지 않습니다. 검색해보니 이전방식으로 core생성해서 UIListener를 넣어서 하려고했는데, 이거 그렇게 하는게 아니더군요-_-
심지어 UIListener클래스는 없습니다-_-
4. 테스트 실행
테스트 실행은 package explorer에서 테스트클래스의 오른쪽 마우스버튼을 누르면 "Execute FlexUnit Tests"라는 메뉴가 있습니다. 그걸 선택하면 테스트가 됩니다. FlexUnitApplication.mxml파일도 같이 생기는군요.
테스트단축키는 Alt + Shift + E, F입니다....-_- 해당 편집파일에서 누르면 됩니다.

5. 테스트 Suite 생성
이건 테스트를 다 모아서 실행하는 건데, 통합테스트를 할 때 사용하는 듯-_-
New -> Test Suite Class -> New FlesxxUnit4 test 하면 include할 테스트를 패키지에서 선택할 수 있습니다. 선택 후 Finish.
SuiteTest.as
package flexUnitTests
{
import flexUnitTests.CalcSecondTest;
import flexUnitTests.CalcTest;
[Suite]
[RunWith("org.flexunit.runners.Suite")]
public class SuiteTest
{
public var test1:flexUnitTests.CalcSecondTest;
public var test2:flexUnitTests.CalcTest;
}
}그냥 저렇게 선언해두고, 오른쪽버튼 눌러서 "Execute FlexUnit Tests" or 알트 + 쉬프트 + E, F하면 통합테스트를 합니다.
6. 그외의 기능
저도 더 써봐야 알 것 같은데, Flex는 이벤트기반이다보니 Async와 UI구조가 많은데요. Async구조도 손쉽게 테스트를 할 수 있습니다.
[Test(async,ui)]이런식으로 하면 될 듯 한데, 안해봐서 잘 모르겠네요-_-
참고자료
http://www.insideria.com/2009/05/flashbuilder4-will-support-fle.html
http://balajisridhar.wordpress.com/2009/10/05/flexunit-integration-in-flash-builders-new-awatar-in-beta2/

