`

Flex和Red5的交互 及对象参数传递

 
阅读更多

1. 客户端(Flex)与server端(Red5)建立连接
《客户端》
《server端》

2. 客户端(Flex)呼叫server端(Red5)的函数并获得return值
《客户端》

3. server端(Red5)呼叫客户端(Flex)的函数并获得return值
《客户端》
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.events.NetStatusEvent;
private var nc:NetConnection;
private function onConnectClicked(evt:Event):void {
// new netconnection
nc = new NetConnection( );
// set encoding to old amf
nc.objectEncoding = ObjectEncoding.AMF0;
// netstatus event listening
nc.addEventListener( NetStatusEvent.NET_STATUS , netStatus );
nc.connect( "rtmp://xxx.xxx.xxx.xxx/xxx");
nc.client = this;
}
//接下来,可以加上服务端要调用的方法,必须是 public
public function receiveMsg(msg:String):void {
//代码
}
《server端》
import org.redserver.api.IConnection;
import org.redserver.api.service.IServiceCapableConnection;
//呼叫客户端函数,conn為对应客户端的连接,msg為参数
//如果是多个参数应為:new Object[]{参数1, 参数2, ...},数量要和客户端的函数的参数一致
callClient(conn, "receiveMsg", new Object[]{msg});
//client為对应客户端的连接,method_name為函数名,obj為传递的参数
private boolean callClient(
IConnection client, String method_name, Object[] obj) {
if (client instanceof IServiceCapableConnection) {
IServiceCapableConnection sc = (IServiceCapableConnection) client;
sc.invoke(method_name, obj);
} else {
return false;
}
return true;
}
如果想要获得传回值,必须提供一个继承IPendingServiceCallback接口的类别
Import org.redserver.api.service.IPendingService;
Import org.redserver.api.IPendingServiceCallback;
Class MyCallback implements IPendingServiceCallback{
Public void resultReceived(IPendingServiceCall call){
//...
}
}
sc.invoke("receiveMsg", new Object[]{msg}, new MyCallback());
flex和java及red5参数可直接传递对象,如java端有如下这样一个类

flex端应该这样写:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics