4つのAS 3とバックグラウンドの通信の方法
52503 ワード
[AS 3]Flashとバックグラウンドデータ交換方法整理1-URLLoader(URLStream)編PS.Flash Player 9の普及に伴い、AS 3プログラミングも多くなってきたので、今回はバックグラウンドデータ交換方法をいくつか整理し直します.1.URLLoader(URLStream)2.FlashRemoting3.XMLSocket(Socket) 4.FMS/FCS
一、URLLoader(URLStream)篇URLStreamとURLLoader中のURLLoader Data Format.BINARYは同様に、ダウンロードURLへの低レベルアクセスを提供しています.私はここで繰り返しません.興味があるのは、FlashヘルプのURLStreamクラスを見ることができます.Flashエンド
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class TestURLLoader extends Sprite {
private var _loader:URLLoader;
public function TestURLLoader() {
// URLLoader ;
_loader = new URLLoader();
// ( 、 、URL );
_loader.dataFormat = URLLoaderDataFormat.VARIABLES;
//
configureListeners(_loader);
// ;
var params:URLVariables = new URLVariables();
params.username = "kinglong";
params.password = "king";
// Request ;
var request:URLRequest = new URLRequest("http://www.klstudio.com/none.jsp");
// ;
request.data = params;
// (POST,GET);
request.method = URLRequestMethod.POST;
try {
loader.load(request);
} catch (error:Error) {
trace(error);
}
}
private function configureListeners(dispatcher:IEventDispatcher):void {
// ;
dispatcher.addEventListener(Event.COMPLETE, loaderHandler);
// ;
dispatcher.addEventListener(Event.OPEN, loaderHandler);
// ;
dispatcher.addEventListener(ProgressEvent.PROGRESS, loaderHandler);
// ;
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);
//Http ;
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, loaderHandler);
// ;
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
}
private function loaderHandler(event:*):void {
switch(event.type) {
case Event.COMPLETE:
trace(_loader.data.result);
break;
case Event.OPEN:
trace("open: " + event);
break;
case ProgressEvent.PROGRESS:
trace("progress: " + event);
break;
case SecurityErrorEvent.SECURITY_ERROR:
trace("securityError: " + event);
break;
case HTTPStatusEvent.HTTP_STATUS:
trace("httpStatus: " + event);
break;
case IOErrorEvent.IO_ERROR:
trace("ioError: " + event);
break;
}
}
}
}
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class TestURLLoader extends Sprite {
private var _loader:URLLoader;
public function TestURLLoader() {
// URLLoader ;
_loader = new URLLoader();
// ( 、 、URL );
_loader.dataFormat = URLLoaderDataFormat.VARIABLES;
//
configureListeners(_loader);
// ;
var params:URLVariables = new URLVariables();
params.username = "kinglong";
params.password = "king";
// Request ;
var request:URLRequest = new URLRequest("http://www.klstudio.com/none.jsp");
// ;
request.data = params;
// (POST,GET);
request.method = URLRequestMethod.POST;
try {
loader.load(request);
} catch (error:Error) {
trace(error);
}
}
private function configureListeners(dispatcher:IEventDispatcher):void {
// ;
dispatcher.addEventListener(Event.COMPLETE, loaderHandler);
// ;
dispatcher.addEventListener(Event.OPEN, loaderHandler);
// ;
dispatcher.addEventListener(ProgressEvent.PROGRESS, loaderHandler);
// ;
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);
//Http ;
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, loaderHandler);
// ;
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
}
private function loaderHandler(event:*):void {
switch(event.type) {
case Event.COMPLETE:
trace(_loader.data.result);
break;
case Event.OPEN:
trace("open: " + event);
break;
case ProgressEvent.PROGRESS:
trace("progress: " + event);
break;
case SecurityErrorEvent.SECURITY_ERROR:
trace("securityError: " + event);
break;
case HTTPStatusEvent.HTTP_STATUS:
trace("httpStatus: " + event);
break;
case IOErrorEvent.IO_ERROR:
trace("ioError: " + event);
break;
}
}
}
}
サービス側(jsp)
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
boolean result = false;
// ...;
out.println("result="+result+"&_");
%>
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
boolean result = false;
// ...;
out.println("result="+result+"&_");
%>
の利点:1、flashコードは実現が簡単で、便利です.2、サービス側の受信ページは1つのフォームからのデータを受信するのと同じように処理し、専門的な技術を必要とせず、すべてのサービス側のプログラムを実現することができる.3、文字列変数を送信してもよいし、ファイルストリーム([AS 3]URLLoader+URLRequest+JPGEncoderでBitmapDataピクチャデータ保存を実現)を送信してもよい.4、AMF 3と組み合わせてより豊富なデータ型を受信することができる([AS 3]AMF 3+JAVAの呼び出し例).欠点:1、伝達する変数は多すぎるべきではありません.2、変数伝達の値は長すぎるべきではない.注意:受信データ型がURLLoaderDataFormatに設定されている場合.VARABLESの後、最初の文字は&で始まることができなくて、最後の部分は&_で提案します終わりにしたほうがいいです.
[AS 3]Flashとバックグラウンドデータ交換方法整理2-FlashRemoting編Submitted by kinglong on 2008-9-3 11:16:47[AS 3]Flashとバックグラウンドデータ交換方法整理2-FlashRemoting編1.URLLoader(URLStream)2.FlashRemoting3.XMLSocket(Socket) 4.FMS/FCS
二、FlashRemoting編はAS版FlashRemotingに比べて、クライアントコードが簡単になり、伝達されたデータが豊富になった.クライアントRemotingServiceクラス
view plaincopy to clipboardprint?
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package com.klstudio.remoting{
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
public class RemotingService extends NetConnection{
function RemotingService(url:String,amf:uint=ObjectEncoding.AMF0){
this.objectEncoding = amf;
this.connect(url);
}
}
}
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package com.klstudio.remoting{
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
public class RemotingService extends NetConnection{
function RemotingService(url:String,amf:uint=ObjectEncoding.AMF0){
this.objectEncoding = amf;
this.connect(url);
}
}
}
TestFlashRemoting
view plaincopy to clipboardprint?
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import com.klstudio.remoting.RemotingService;
public class TestFlashRemoting extends Sprite {
private var _service:RemotingService;
public function TestFlashRemoting() {
//
_service = new RemotingService("http://localhost:8500/flashservices/gateway");
// FlashRemoting
/*
* RemotingService.call([ ],[ ],[ ]...);
*/
_service.call("myservice.getString",new Responder(onResult, onFault),"kinglong");
}
// ;
private function onResult(result:Object):void {
trace("result:"+result);
}
//
private function onFault(fault:Object):void {
trace("fault:"+fault.details);
}
}
}
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import com.klstudio.remoting.RemotingService;
public class TestFlashRemoting extends Sprite {
private var _service:RemotingService;
public function TestFlashRemoting() {
//
_service = new RemotingService("http://localhost:8500/flashservices/gateway");
// FlashRemoting
/*
* RemotingService.call([ ],[ ],[ ]...);
*/
_service.call("myservice.getString",new Responder(onResult, onFault),"kinglong");
}
// ;
private function onResult(result:Object):void {
trace("result:"+result);
}
//
private function onFault(fault:Object):void {
trace("fault:"+fault.details);
}
}
}
サービスこちらはColdfusion Componentを例に挙げます
<cfcomponent displayname=" ">
<!--- getString , access remote, Flash remoting --->
<cffunction name="getString" access="remote" returntype="string">
<cfargument name="name" type="string" required="true">
<cfset myResult = arguments.name & ", !">
<cfreturn myResult>
</cffunction>
</cfcomponent>
<!--- myservice.cfc--->
<cfcomponent displayname=" ">
<!--- getString , access remote, Flash remoting --->
<cffunction name="getString" access="remote" returntype="string">
<cfargument name="name" type="string" required="true">
<cfset myResult = arguments.name & ", !">
<cfreturn myResult>
</cffunction>
</cfcomponent>
の利点:1.転送データの種類が豊富です.2.AMF 0、AMF 3の2種類のデータパッケージタイプをサポートすることができ、AMF 3はFlash Player 9以上でサポートすることができ、AMF 3があれば、バイナリファイルストリームデータを直接転送することができる.3.伝送効率が比較的高い.4.様々なバックグラウンドへのサポートも良い.FDS(LCDS)-AdobeがメインプッシュするFlashRemotingサービス側で、機能が強く(もちろんAMF 0、AMF 3フォーマット、java、netプラットフォームもサポート)、品質も悪くないが、残念ながらこれは銀が必要だ.Blazeds-はAdobeのもう一つのオープンソースのFlashRemotingプロジェクトであり、Javaプラットフォームベース、AMF 0、AMF 3フォーマットAmfphpをサポートする-PHPベースのRPCツールであり、FlashRemotingにおけるAMF 0とAMF 3の2つのフォーマット、オープンソースプロジェクトをサポートする.Openmf-JavaベースのFlashRemotingオープンソースプロジェクトで、現在はAMF 0形式のみサポートされています.GDS(Granite Data Services)-AMF 3をサポートするJavaプラットフォームベースのFlashRemotingプロジェクトでもあります.WebORB-サポートNet、java、php、rubyなどの開発プラットフォームのFlashRemotingプロジェクトは、AMF 0とAMF 3もサポートしています.FluorineFx-サポートNet開発プラットフォームのFlashRemotingオープンソースプロジェクト、AMF 0、AMF 3、RTMP、RTMPT.欠点:1.バックグラウンドサービス側に対応するバージョンのFlash Remotingモジュールが必要です.2.仮想ホストを使用する場合は構成が面倒です.Flashとバックグラウンドのデータ交換方法整理3-WebService編Submitted by kinglong on 2006-3-8 14:29:33三、WebService個人はRemotingに次ぐデータアクセス速度だと思いますが、WebServiceは汎用的なインタフェースであり、一般的にサービス側技術がサポートされています!WebServiceのメリット:1.WebServiceのインタフェースは広くサポートされています(Java、ASP.Net、PHP、Coldfusion-私は以下の例を挙げます). 2.WebServiceは汎用的なインタフェースなので、サービス側が書くインタフェースは、Flashの使用に限らず、他のプログラムも呼び出すことができ、「一挙両得」! 3.WebServiceはRemotingと同様に、さまざまなデータ型をサポートしています. 4.今日またFMSがRemotingインタフェースをサポートする以外に、WebServiceインタフェースもサポートすることを発見しました:)WebServiceの欠点:Flashクライアントは何の問題もなく、Flashの開発ツールは(WebServiceConnectorコンポーネント)を持っていますが、サービス側はこのインタフェース技術をサポートしていることが多いとはいえ、ColdfusionがWebServiceを生成するのが便利であるほか、その他の実現は複雑です!
//=======================================;
// Flash ;
// WebServiceConnector , 。
// WebService 。
// WebServiceConnector , 。
//=======================================;
stop();
// WebService ;
import mx.services.WebService;
// WebService ;
var ws_url:String = http://localhost:8500/klstudio/myservice.cfc?wsdl;
// WebService ;
var ws:WebService = new WebService(ws_url);
// WebService ;
var callObject = ws.getString("kinglong");
// ;
callObject.onResult = function(result){
trace("result:"+result);
}
// ( );
callObject.onFault = function(fault){
trace("fault:"+fault.faultstring);
}
注意:結果がデータセットである場合、サービス側が大文字であるかどうかにかかわらず、各フィールド名は大文字でなければなりません.================================================================
( Coldfusion Component , )
================================================================
<!--- myservice.cfc--->
<cfcomponent displayname=" ">
<!--- getString , access remote, WebService --->
<cffunction name="getString" access="remote" returntype="string">
<cfargument name="name" type="string" required="true">
<cfset myResult = arguments.name & ", !">
<cfreturn myResult>
</cffunction>
</cfcomponent>
で呼び出す場合は、cfcパスの後ろに「?wsdl」を付けるだけでいいので便利でしょう!:) 1.LoadVars(XML) 2.Flash Remoting 3.Webservice 4.XMLSocket 4、XMLSocketこれはLoadVars(XML)、Flash Remoting、Webservice、XMLSocketの4つの方法で整理された最後の1編です.皆さんお待たせいたしました前の文章がネット上でとても人気があることを思い付かなかって、その中にもう1人は私にメールを送って、私のこの最后の1篇を见て、ははは、やはりとてもうれしいです.転载に対して私は声明を要して、まずこのいくつかの文章は転载することを歓迎して、しかし文章の作者を说明して、文章の元の所在地に着くようにしましょう、私はいくつかのウェブサイトが転载することを発见して、作者さえ书かないであるいは书くのが间违っています.の、ここで説明します!これから本題に移ります!XMLSocketは主にサービス側とのインスタント通信に用いられ、現在の応用分野は主にFlashテキストチャットやFlashオンラインゲームなどである.XMLSocketの利点:1、サービス側とのインスタント通信が可能;2、Flash Player 5.0以上のバージョンにはクラスが内蔵されており、コンポーネントやプラグインを別途インストールする必要はありません.3、XMLSocketは1つのSocketクライアントに相当するため、一般的なミドルウェアがサポートする(java,.Netなど)XMLSocketの欠点:1、XMLSocketは文字列やxml形式のテキストしか伝送できず、データ型が単一である;2、XMLSocketサービス側が自ら開発する場合、Socket技術を比較して理解する必要がある.幸い、ネット上には既成のサービス側ソフトウェア(商業のXMLSocketサーバーにはUnity、Fortressがあり、オープンソースのXMLSocketサーバーにはOregano Multiuserサーバーがある)がある.3、XMLSocketの80ポートとflashセキュリティポリシーの問題もあります.(ネット上で解決方法がありますが、できるかどうかは自分で検証してください)//=======================================;
// Flash ( Flash );
//=======================================;
var paramObj:Object = new Object();
// ;
paramObj.CommandDelimiters = "-@@##@@-";
// ;
paramObj.PeopleDelimiters = "-@#@-";
// XMLSocket ;
var socket:XMLSocket = new XMLSocket();
// ;
socket.onConnect = function(success) {
trace("socket.onConnect:"+success);
if (!success) {
trace(" , !");
}
};
// ;
socket.onClose = function() {
trace(" !");
logoutChat();
};
// ;
socket.onData = function(src) {
//trace("socket.onData:"+src);
doCommand(getCmdArrayByMsg(trim(src)));
};
// ;
function loginChat():Void {
// Socket ;
socket.connect(“localhost”, “8888”);
sendSocket("INFO"+paramObj.CommandDelimiters+msg);
}
// ;
function logoutChat(b:Boolean):Void {
sendSocket("QUIT");
}
// ;
function showChat(msg:String):Void {
trace(“ :”+msg);
}
// ;
function sendChat(msg:String):Void{
sendSocket("MSG"+paramObj.CommandDelimiters+msg+paramObj.CommandDelimiters+msg);
}
// ;
function sendSocket(msg:String):Void {
socket.send(msg+"\r");
}
// ;
function getCmdArrayByMsg(msg:String):Array {
if (msg.charCodeAt(0) == 13 && msg.charCodeAt(1) == 10) {
msg = msg.substr(2);
}
return msg.split(paramObj.CommandDelimiters);
}
function doCommand(arr:Array):Void {
switch (arr[0]) {
case "MSG" :
showChat(arr[1]);
break;
case "TAKEN" :
trace(" , !");
break;
case "PEOPLE" :
doPeople(arr[1]);
break;
}
}
// ;
function doPeople(msg:String):Void {
var people_arr:Array = msg.split(paramObj.PeopleDelimiters);
trace(people_arr);
}
//XMLSocketに関する主なコードは、自分で関連コンポーネントを追加すればいいことを示しています.// , flash “\r”, ( Java )
//=======================================;
// ( java , );
// ChatServer.java
//=======================================;
package com.klstudio.socket.chat;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
//import com.klstudio.util.Logger;
/**
* @author kinglong
*
* TODO , - - Java - -
*/
public class ChatServer {
//private Logger logger;
private static Vector clients = new Vector();
private static ServerSocket server = null;
private static Socket socket = null;
public static String CommandDelimiters = "-@@##@@-";
public static String PeopleDelimiters = "-@#@-";
public ChatServer() {
}
public static void notifyRoom() {
StringBuffer people = new StringBuffer("PEOPLE"+CommandDelimiters+" ");
for (int i = 0; i < clients.size(); i++) {
Client client = (Client) clients.elementAt(i);
people.append(PeopleDelimiters+client.getClientName());
}
sendClients(people);
}
public staticboolean checkName(Client newClient){
for(int i=0;i<clients.size();i++){
Client client = (Client) clients.elementAt(i);
if(client != newClient && client.getClientName().equals(newClient.getClientName())){
return false;
}
}
return true;
}
public static void closeAll(){
while(clients.size()>0){
Client client = (Client) clients.firstElement();
try {
client.getClientSocket().close();
} catch (IOException e) {
// TODO catch
//Logger logger = new Logger(System.out);
//logger.log(" -" + e.toString());
} finally {
clients.removeElement(client);
}
}
}
public static synchronized void disconnect(Client client) {
client.send(new StringBuffer("QUIT"));
try {
client.getClientSocket().close();
} catch (IOException e) {
// TODO catch
//Logger logger = new Logger(System.out);
//logger.log(" -" + e.toString());
} finally{
clients.removeElement(client);
}
}
public static synchronized void sendClients(StringBuffer sb) {
for(int i=0;i<clients.size();i++){
Client client = (Client) clients.elementAt(i);
client.send(sb);
}
}
public static synchronized void sendClients(StringBuffer sb,String ownerName,String toName) {
for(int i=0;i<clients.size();i++){
Client client = (Client) clients.elementAt(i);
if(toName.equals(client.getClientName()) || toName.equals(" ") || ownerName.equals(client.getClientName())){
client.send(sb);
}
}
}
public static synchronized void sendClients(Client ownerClient) {
for(int i=0;i<clients.size();i++){
Client client = (Client) clients.elementAt(i);
if(client.getClientName().equals(ownerClient.getClientName())){
client.send(new StringBuffer("MSG"+CommandDelimiters+" > !"));
}else{
client.send(new StringBuffer("MSG"+CommandDelimiters+" >["+ownerClient.getClientName()+"] !"));
}
}
}
public static void main(String[] args) {
int port = 8888;
if(args.length>0){
port = Integer.parseInt(args[0]);
}
//Logger logger = new Logger(System.out);
//logger.log(" -ChatServer["+port+"] ...");
try {
server = new ServerSocket(port);
} catch (IOException e) {
// TODO catch
//logger.log(" -"+e.toString());
}
while(true){
if(clients.size()<5){
try {
socket = server.accept();
if(socket != null){
//logger.log(" -"+socket.toString()+" ");
}
} catch (IOException e) {
// TODO catch
//logger.log(" -"+e.toString());
}
int i=0;
do{
Client client = new Client(socket);
if(client.getClientName() != null){
clients.addElement(client);
if(checkName(client)){
//logger.log(" -"+" ["+clients.size()+"] ");
sendClients(client);
client.start();
notifyRoom();
}else{
client.send(new StringBuffer("TAKEN"));
disconnect(client);
}
i++;
}
break;
}while(i<clients.size());
}else{
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO catch
//logger.log(" -"+e.toString());
}
}
}
}
}
回転kinglong
http://blog.csdn.net/hili2006/archive/2008/09/21/2957797.aspx
[AS3]Flash 1-URLLoader(URLStream)
PS.
Flash Player 9 ,AS3 , AS3 。
1.URLLoader(URLStream)
2.FlashRemoting
3.XMLSocket(Socket)
4.FMS/FCS
、URLLoader(URLStream)
URLStream URLLoader URLLoaderDataFormat.BINARY , URL , , , Flash URLStream 。
Flash
view plaincopy to clipboardprint?
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class TestURLLoader extends Sprite {
private var _loader:URLLoader;
public function TestURLLoader() {
// URLLoader ;
_loader = new URLLoader();
// ( 、 、URL );
_loader.dataFormat = URLLoaderDataFormat.VARIABLES;
//
configureListeners(_loader);
// ;
var params:URLVariables = new URLVariables();
params.username = "kinglong";
params.password = "king";
// Request ;
var request:URLRequest = new URLRequest("http://www.klstudio.com/none.jsp");
// ;
request.data = params;
// (POST,GET);
request.method = URLRequestMethod.POST;
try {
loader.load(request);
} catch (error:Error) {
trace(error);
}
}
private function configureListeners(dispatcher:IEventDispatcher):void {
// ;
dispatcher.addEventListener(Event.COMPLETE, loaderHandler);
// ;
dispatcher.addEventListener(Event.OPEN, loaderHandler);
// ;
dispatcher.addEventListener(ProgressEvent.PROGRESS, loaderHandler);
// ;
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);
//Http ;
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, loaderHandler);
// ;
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
}
private function loaderHandler(event:*):void {
switch(event.type) {
case Event.COMPLETE:
trace(_loader.data.result);
break;
case Event.OPEN:
trace("open: " + event);
break;
case ProgressEvent.PROGRESS:
trace("progress: " + event);
break;
case SecurityErrorEvent.SECURITY_ERROR:
trace("securityError: " + event);
break;
case HTTPStatusEvent.HTTP_STATUS:
trace("httpStatus: " + event);
break;
case IOErrorEvent.IO_ERROR:
trace("ioError: " + event);
break;
}
}
}
}
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class TestURLLoader extends Sprite {
private var _loader:URLLoader;
public function TestURLLoader() {
// URLLoader ;
_loader = new URLLoader();
// ( 、 、URL );
_loader.dataFormat = URLLoaderDataFormat.VARIABLES;
//
configureListeners(_loader);
// ;
var params:URLVariables = new URLVariables();
params.username = "kinglong";
params.password = "king";
// Request ;
var request:URLRequest = new URLRequest("http://www.klstudio.com/none.jsp");
// ;
request.data = params;
// (POST,GET);
request.method = URLRequestMethod.POST;
try {
loader.load(request);
} catch (error:Error) {
trace(error);
}
}
private function configureListeners(dispatcher:IEventDispatcher):void {
// ;
dispatcher.addEventListener(Event.COMPLETE, loaderHandler);
// ;
dispatcher.addEventListener(Event.OPEN, loaderHandler);
// ;
dispatcher.addEventListener(ProgressEvent.PROGRESS, loaderHandler);
// ;
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);
//Http ;
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, loaderHandler);
// ;
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
}
private function loaderHandler(event:*):void {
switch(event.type) {
case Event.COMPLETE:
trace(_loader.data.result);
break;
case Event.OPEN:
trace("open: " + event);
break;
case ProgressEvent.PROGRESS:
trace("progress: " + event);
break;
case SecurityErrorEvent.SECURITY_ERROR:
trace("securityError: " + event);
break;
case HTTPStatusEvent.HTTP_STATUS:
trace("httpStatus: " + event);
break;
case IOErrorEvent.IO_ERROR:
trace("ioError: " + event);
break;
}
}
}
}
(jsp)
view plaincopy to clipboardprint?
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
boolean result = false;
// ...;
out.println("result="+result+"&_");
%>
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
boolean result = false;
// ...;
out.println("result="+result+"&_");
%>
:
1、flash , 。
2、 , , !
3、 , ([AS3]URLLoader+URLRequest+JPGEncoder BitmapData )。
4、 AMF3 ([AS3]AMF3+JAVA )。
:
1、 。
2、 。
:
URLLoaderDataFormat.VARIABLES , & , &_ 。
[AS3]Flash 2-FlashRemoting
Submitted by kinglong on 2008-9-3 11:16:47
[AS3]Flash 2-FlashRemoting
1.URLLoader(URLStream)
2.FlashRemoting
3.XMLSocket(Socket)
4.FMS/FCS
、FlashRemoting
AS FlashRemoting, , 。
RemotingService
view plaincopy to clipboardprint?
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package com.klstudio.remoting{
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
public class RemotingService extends NetConnection{
function RemotingService(url:String,amf:uint=ObjectEncoding.AMF0){
this.objectEncoding = amf;
this.connect(url);
}
}
}
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package com.klstudio.remoting{
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
public class RemotingService extends NetConnection{
function RemotingService(url:String,amf:uint=ObjectEncoding.AMF0){
this.objectEncoding = amf;
this.connect(url);
}
}
}
TestFlashRemoting
view plaincopy to clipboardprint?
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import com.klstudio.remoting.RemotingService;
public class TestFlashRemoting extends Sprite {
private var _service:RemotingService;
public function TestFlashRemoting() {
//
_service = new RemotingService("http://localhost:8500/flashservices/gateway");
// FlashRemoting
/*
* RemotingService.call([ ],[ ],[ ]...);
*/
_service.call("myservice.getString",new Responder(onResult, onFault),"kinglong");
}
// ;
private function onResult(result:Object):void {
trace("result:"+result);
}
//
private function onFault(fault:Object):void {
trace("fault:"+fault.details);
}
}
}
/**
* @author Kinglong
* @link http://www.klstudio.com
* @mail [email protected]
* @version 0.1
*/
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import com.klstudio.remoting.RemotingService;
public class TestFlashRemoting extends Sprite {
private var _service:RemotingService;
public function TestFlashRemoting() {
//
_service = new RemotingService("http://localhost:8500/flashservices/gateway");
// FlashRemoting
/*
* RemotingService.call([ ],[ ],[ ]...);
*/
_service.call("myservice.getString",new Responder(onResult, onFault),"kinglong");
}
// ;
private function onResult(result:Object):void {
trace("result:"+result);
}
//
private function onFault(fault:Object):void {
trace("fault:"+fault.details);
}
}
}
Coldfusion Component
view plaincopy to clipboardprint?
<!--- myservice.cfc--->
<cfcomponent displayname=" ">
<!--- getString , access remote, Flash remoting --->
<cffunction name="getString" access="remote" returntype="string">
<cfargument name="name" type="string" required="true">
<cfset myResult = arguments.name & ", !">
<cfreturn myResult>
</cffunction>
</cfcomponent>
<!--- myservice.cfc--->
<cfcomponent displayname=" ">
<!--- getString , access remote, Flash remoting --->
<cffunction name="getString" access="remote" returntype="string">
<cfargument name="name" type="string" required="true">
<cfset myResult = arguments.name & ", !">
<cfreturn myResult>
</cffunction>
</cfcomponent>
:
1. 。
2. AMF0,AMF3 ,AMF3 Flash Player 9 , AMF3, 。
3. 。
4. 。
FDS(LCDS) - Adobe FlashRemoting , ( AMF0,AMF3 ,java net ), , 。
Blazeds - Adobe FlashRemoting , Java , AMF0,AMF3
Amfphp - PHP RPC , FlashRemoting AMF0 AMF3 , 。
Openamf - Java FlashRemoting , AMF0 。
GDS(Granite Data Services) - Java FlashRemoting , AMF3 。
WebORB - .net,java,php,ruby FlashRemoting , AMF0 AMF3。
FluorineFx - .net FlashRemoting , AMF0, AMF3 ,RTMP, RTMPT 。
:
1. Flash Remoting 。
2. 。
flash 3-WebService
Submitted by kinglong on 2006-3-8 14:29:33
、WebService
WebService , Remoting, WebService , !
WebService :
1.WebService (Java,ASP.Net,PHP,Coldfusion- );
2.WebService , , Flash , ," "!
3.WebService Remoting , !
4. FMS Remoting , WebService :)
WebService :
Flash ,Flash (WebServiceConnector ), , Coldfusion WebService , !
//=======================================;
// Flash ;
// WebServiceConnector , 。
// WebService 。
// WebServiceConnector , 。
//=======================================;
stop();
// WebService ;
import mx.services.WebService;
// WebService ;
var ws_url:String = http://localhost:8500/klstudio/myservice.cfc?wsdl;
// WebService ;
var ws:WebService = new WebService(ws_url);
// WebService ;
var callObject = ws.getString("kinglong");
// ;
callObject.onResult = function(result){
trace("result:"+result);
}
// ( );
callObject.onFault = function(fault){
trace("fault:"+fault.faultstring);
}
: , , !
================================================================
( Coldfusion Component , )
================================================================
<!--- myservice.cfc--->
<cfcomponent displayname=" ">
<!--- getString , access remote, WebService --->
<cffunction name="getString" access="remote" returntype="string">
<cfargument name="name" type="string" required="true">
<cfset myResult = arguments.name & ", !">
<cfreturn myResult>
</cffunction>
</cfcomponent>
, cfc "?wsdl" , ! :)
1.LoadVars(XML)
2.Flash Remoting
3.Webservice
4.XMLSocket
、XMLSocket
LoadVars(XML)、Flash Remoting、Webservice、XMLSocket , ( , , , , 。 , , , , , 。 , !)。 !
XMLSocket , Flash Flash 。
XMLSocket :
1、 ;
2、Flash Player 5.0 , ;
3、 XMLSocket Socket , ( java,.Net )
XMLSocket :
1、XMLSocket xml , ;
2、XMLSocket , Socket , ( XMLSocket Server Unity、Fortress; XMLSocket Server Oregano Multiuser Server);
3、 XMLSocket 80 flash 。( , , )
//=======================================;
// Flash ( Flash );
//=======================================;
var paramObj:Object = new Object();
// ;
paramObj.CommandDelimiters = "-@@##@@-";
// ;
paramObj.PeopleDelimiters = "-@#@-";
// XMLSocket ;
var socket:XMLSocket = new XMLSocket();
// ;
socket.onConnect = function(success) {
trace("socket.onConnect:"+success);
if (!success) {
trace(" , !");
}
};
// ;
socket.onClose = function() {
trace(" !");
logoutChat();
};
// ;
socket.onData = function(src) {
//trace("socket.onData:"+src);
doCommand(getCmdArrayByMsg(trim(src)));
};
// ;
function loginChat():Void {
// Socket ;
socket.connect(“localhost”, “8888”);
sendSocket("INFO"+paramObj.CommandDelimiters+msg);
}
// ;
function logoutChat(b:Boolean):Void {
sendSocket("QUIT");
}
// ;
function showChat(msg:String):Void {
trace(“ :”+msg);
}
// ;
function sendChat(msg:String):Void{
sendSocket("MSG"+paramObj.CommandDelimiters+msg+paramObj.CommandDelimiters+msg);
}
// ;
function sendSocket(msg:String):Void {
socket.send(msg+"\r");
}
// ;
function getCmdArrayByMsg(msg:String):Array {
if (msg.charCodeAt(0) == 13 && msg.charCodeAt(1) == 10) {
msg = msg.substr(2);
}
return msg.split(paramObj.CommandDelimiters);
}
function doCommand(arr:Array):Void {
switch (arr[0]) {
case "MSG" :
showChat(arr[1]);
break;
case "TAKEN" :
trace(" , !");
break;
case "PEOPLE" :
doPeople(arr[1]);
break;
}
}
// ;
function doPeople(msg:String):Void {
var people_arr:Array = msg.split(paramObj.PeopleDelimiters);
trace(people_arr);
}
// XMLSocket , !
// , flash “\r”, ( Java )
//=======================================;
// ( java , );
// ChatServer.java
//=======================================;
package com.klstudio.socket.chat;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
//import com.klstudio.util.Logger;
/**
* @author kinglong
*
* TODO , - - Java - -
*/
public class ChatServer {
//private Logger logger;
private static Vector clients = new Vector();
private static ServerSocket server = null;
private static Socket socket = null;
public static String CommandDelimiters = "-@@##@@-";
public static String PeopleDelimiters = "-@#@-";
public ChatServer() {
}
public static void notifyRoom() {
StringBuffer people = new StringBuffer("PEOPLE"+CommandDelimiters+" ");
for (int i = 0; i < clients.size(); i++) {
Client client = (Client) clients.elementAt(i);
people.append(PeopleDelimiters+client.getClientName());
}
sendClients(people);
}
public staticboolean checkName(Client newClient){
for(int i=0;i<clients.size();i++){
Client client = (Client) clients.elementAt(i);
if(client != newClient && client.getClientName().equals(newClient.getClientName())){
return false;
}
}
return true;
}
public static void closeAll(){
while(clients.size()>0){
Client client = (Client) clients.firstElement();
try {
client.getClientSocket().close();
} catch (IOException e) {
// TODO catch
//Logger logger = new Logger(System.out);
//logger.log(" -" + e.toString());
} finally {
clients.removeElement(client);
}
}
}
public static synchronized void disconnect(Client client) {
client.send(new StringBuffer("QUIT"));
try {
client.getClientSocket().close();
} catch (IOException e) {
// TODO catch
//Logger logger = new Logger(System.out);
//logger.log(" -" + e.toString());
} finally{
clients.removeElement(client);
}
}
public static synchronized void sendClients(StringBuffer sb) {
for(int i=0;i<clients.size();i++){
Client client = (Client) clients.elementAt(i);
client.send(sb);
}
}
public static synchronized void sendClients(StringBuffer sb,String ownerName,String toName) {
for(int i=0;i<clients.size();i++){
Client client = (Client) clients.elementAt(i);
if(toName.equals(client.getClientName()) || toName.equals(" ") || ownerName.equals(client.getClientName())){
client.send(sb);
}
}
}
public static synchronized void sendClients(Client ownerClient) {
for(int i=0;i<clients.size();i++){
Client client = (Client) clients.elementAt(i);
if(client.getClientName().equals(ownerClient.getClientName())){
client.send(new StringBuffer("MSG"+CommandDelimiters+" > !"));
}else{
client.send(new StringBuffer("MSG"+CommandDelimiters+" >["+ownerClient.getClientName()+"] !"));
}
}
}
public static void main(String[] args) {
int port = 8888;
if(args.length>0){
port = Integer.parseInt(args[0]);
}
//Logger logger = new Logger(System.out);
//logger.log(" -ChatServer["+port+"] ...");
try {
server = new ServerSocket(port);
} catch (IOException e) {
// TODO catch
//logger.log(" -"+e.toString());
}
while(true){
if(clients.size()<5){
try {
socket = server.accept();
if(socket != null){
//logger.log(" -"+socket.toString()+" ");
}
} catch (IOException e) {
// TODO catch
//logger.log(" -"+e.toString());
}
int i=0;
do{
Client client = new Client(socket);
if(client.getClientName() != null){
clients.addElement(client);
if(checkName(client)){
//logger.log(" -"+" ["+clients.size()+"] ");
sendClients(client);
client.start();
notifyRoom();
}else{
client.send(new StringBuffer("TAKEN"));
disconnect(client);
}
i++;
}
break;
}while(i<clients.size());
}else{
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO catch
//logger.log(" -"+e.toString());
}
}
}
}
}
//=======================================;
// Client.java
//=======================================;
/*
* 2005-10-10
*
* TODO ,
* - - Java - -
*/
package com.klstudio.socket.chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
//import com.klstudio.util.Logger;
/**
* @author kinglong
*
* TODO , - - Java - -
*/
public class Client extends Thread {
private Socket clientSocket;
private String clientName;
private String clientIp;
private BufferedReader br;
private PrintStream ps;
//private Logger logger;
private ChatServer server;
public Client(Socket socket) {
//this.logger = new Logger(System.out);
this.clientSocket = socket;
try {
this.br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));
this.ps = new PrintStream(socket.getOutputStream(),true,"utf-8");
String info = this.br.readLine();
if(info!=null){
String[] info_arr = info.split(ChatServer.CommandDelimiters);
if(info_arr.length>1){
this.clientName = info_arr[1];
}
this.clientIp = socket.getRemoteSocketAddress().toString();
}else{
socket.close();
}
} catch (IOException e) {
// TODO catch
//this.logger.log(" -" + e.toString());
}
}
/**
* @return ip。
*/
public String getClientIp() {
return clientIp;
}
/**
* @return name。
*/
public String getClientName() {
return clientName;
}
/**
* @return socket。
*/
public Socket getClientSocket() {
return clientSocket;
}
public void send(StringBuffer msg){
this.ps.println(msg.toString()+"\0");
//this.ps.flush();
}
public void run() {
while (true) {
String line = null;
try {
line = this.br.readLine();
} catch (IOException e) {
// TODO catch
//this.logger.log(" -" + e.toString());
ChatServer.disconnect(this);
ChatServer.notifyRoom();
return;
}
if (line == null) {
//this.logger.log(" -[" + this.clientName + this.clientIp + "] !");
ChatServer.disconnect(this);
ChatServer.notifyRoom();
if(this.clientName != null){
ChatServer.sendClients(new StringBuffer("MSG"+ChatServer.CommandDelimiters+" >[" + this.clientName + "] !"));
}
return;
}
//this.logger.log(" -"+line);
String[] cmd_arr = line.split(ChatServer.CommandDelimiters);
String keyword = cmd_arr[0];
keyword = keyword.substring(1);
if(keyword.equals("MSG")){
StringBuffer msg = new StringBuffer("MSG"+ChatServer.CommandDelimiters);
msg.append(this.clientName+">");
msg.append(cmd_arr[1]);
ChatServer.sendClients(msg,this.clientName,cmd_arr[2]);
}else if(keyword.equals("QUIT")){
//this.logger.log(" -[" + this.clientName + this.clientIp + "] !");
ChatServer.disconnect(this);
ChatServer.notifyRoom();
ChatServer.sendClients(new StringBuffer("MSG"+ChatServer.CommandDelimiters+" >[" + this.clientName + "] !"));
this.stop();
return;
}
}
}
}