转自http://gregoire.org/2008/09/12/using-custom-objects-in-amf3-with-red5/
I created a post about this subject almost a year ago, but there were a couple minor issues with the examples. Here I will show what eight additional months of experience can provide. The example provided here uses a custom object in Flex to pass information to and from the server, which in this case will be Red5. If one of you has an example which uses FMS on the server-side, I would be glad to include it here.
First create an object to hold your data:
AS3
package mypackage {
import flash.utils.IDataInput;
import flash.utils.IDataOutput;
import flash.utils.IExternalizable;
import mx.utils.*;
[Bindable]
[RemoteClass(alias="mypackage.MyObject")]
public class MyObject implements IExternalizable {
private var l:Number;
private var x:int;
private var b:int;
private var bool:Boolean;
private var str:String;
public function getL():Number {
return l;
}
public function setL(l:Number):void {
this.l = l;
}
public function getX():int {
return x;
}
public function setX(x:int):void {
this.x = x;
}
public function getB():int {
return b;
}
public function setB(b:int):void {
this.b = b;
}
public function getBool():Boolean {
return bool;
}
public function isBool():Boolean {
return bool;
}
public function setBool(bool:Boolean):void {
this.bool = bool;
}
public function getStr():String {
return this.str;
}
public function setStr(str:String):void {
this.str = str;
}
public function readExternal(input:IDataInput):void {
l = input.readUnsignedInt();
x = input.readInt();
b = input.readByte();
bool = input.readBoolean();
str = input.readUTF();
}
public function writeExternal(out:IDataOutput):void {
out.writeUnsignedInt(l);
out.writeInt(x);
out.writeByte(b);
out.writeBoolean(bool);
out.writeUTF(str);
}
}
Now create the server-side version of the object:
Java
package mypackage;
import org.red5.io.amf3.IDataInput;
import org.red5.io.amf3.IDataOutput;
import org.red5.io.amf3.IExternalizable;
/**
* Sample class
*/
public class MyObject implements IExternalizable {
private static final long serialVersionUID = 11520080920;
private Long l;
private Integer x;
private Byte b;
private Boolean bool;
private String str;
public Long getL() {
return l;
}
public void setL(Long l) {
this.l = l;
}
public Integer getX() {
return x;
}
public void setX(Integer x) {
this.x = x;
}
public Byte getB() {
return b;
}
public void setB(Byte b) {
this.b = b;
}
public Boolean getBool() {
return bool;
}
public Boolean isBool() {
return bool;
}
public void setBool(Boolean bool) {
this.bool = bool;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
/**
* Deserializes the client state of an instance.
*/
@Override
public void readExternal(IDataInput in) {
l = (Long) in.readObject();
x = in.readInt();
b = in.readByte();
bool = in.readBoolean();
str = in.readUTF();
}
/**
* Serializes the server state of an instance.
*/
@Override
public void writeExternal(IDataOutput out) {
out.writeObject(l);
out.writeInt(x);
out.writeByte(b);
out.writeBoolean(bool);
out.writeUTF(str);
}
}
Now that we have the client-side and server-side objects, lets request one from the server. The example assumes that you have a NetConnection present.
AS3
// call server-side method
public function getMyObject():void {
// create a responder set to callback
var resp:Responder = new Responder(handleResp, null);
// call the server side method
nc.call("getMyObject", resp, null);
}
//callback handler
public function handleResp(o:Object):void {
myObj = o as MyObject;
}
Create a request handler on the server-side. This assumes that you have Red5 set up and have created an Application.
Java
public MyObject getMyObject(String param) {
MyObject myObj = new MyObject();
myObj.setL(1L);
myObj.setX(42);
myObj.setB((byte) 1);
myObj.setBool(true);
myObj.setStr("The quick brown fox");
return myObj;
}
Thats all folks, seems simple now that I've done it a bazillion times...
分享到:
相关推荐
5. **MFC_Tree**:文件名Amf3_Tree可能指的是一个使用了MFC Tree控件的C++源代码文件,这个文件包含了实现AMF3解析和树化显示的代码。你可能需要阅读并理解这个文件中的函数和类,以学习如何将AMF3数据转换为易于...
AMF3(Action Message Format version 3)是Adobe公司开发的一种二进制数据序列化格式,主要用于Flash Player和Flex应用程序与服务器之间的数据交换。在C++编程环境中,AMF3库可以帮助开发者高效地处理这种数据格式...
在标题“amf3_spec_05_05_08.zip_AMF3_above flash player_player”中,我们可以理解这是关于AMF3规范的一个版本,发布日期可能是2005年5月8日,主要针对Flash Player 9及以上版本。描述进一步说明了这是用于Flash ...
5. **错误处理与兼容性**:修改版的源码可能包含对原版AMF3实现的错误修复和改进,以及与其他AMF3实现(如Adobe的Flash Player)的兼容性优化。 6. **代码结构与API设计**:AMF3.cpp和AMF3.h文件分别包含了AMF3处理...
AMF3 协议中文版定义 AMF(Action Message Format,动作信息格式)是一种压缩的二进制格式,用于序列化 ActionScript 对象图。序列化后的 AMF 编码对象图可以用来持久化,并在不同的会话中获得应用的公共状态,或者...
AMF3(Action Message Format version 3)是Adobe公司开发的一种二进制数据序列化格式,主要用于Flash Player与服务器之间的数据交换。它提高了数据传输效率,支持多种数据类型,包括基本类型、对象、数组、日期等。...
### AMF3 格式详解 #### 一、引言 **AMF3**(Action Message Format 3)是 Adobe 公司推出的一种紧凑的二进制格式,用于序列化 ActionScript 对象图。一旦对象图被序列化为 AMF 编码,就可以在不同的会话之间持久...
Red5是一个开源的Java编写的Flash流媒体服务器,支持将视频/音频文件转化为流媒体播放格式(如FLV和MP3),录制客户端播放流(仅限FLV格式),共享对象,现场直播流发布以及远程调用(AMF)。Red5的技术特点和应用...
Java Socket AMF3 Flash Game Framework 是一个专门为Flash游戏设计的后端框架,它结合了Java技术和AMF3编码,使得游戏开发者能够构建交互性强、安全可靠的Web游戏。在这个框架中,Java作为服务器端语言,提供了稳定...
Socket编程与AMF3在IT领域是两个重要的概念,它们分别代表了网络通信的基础和一种高效的数据序列化机制。在本文中,我们将深入探讨这两个技术,并结合提供的资源,即一篇名为“socket+AMF3”的博客文章,来理解它们...
### AMF3 Specification详解 #### 一、简介 ##### 1.1 目的 Action Message Format (AMF) 是一种紧凑的二进制格式,用于序列化 ActionScript 对象图。一旦序列化,AMF 编码的对象图可用于跨会话持久存储和检索应用...
5. **AMF3.Server**:这部分可能是一个实现AMF3协议的服务端组件,负责处理AMF3格式的请求和响应,可能包含AMF3数据的解析、业务逻辑处理和结果返回等功能。 6. **AMF3**:这个文件可能包含了AMF3协议的相关代码或...
### AMF3 Specification详解 #### 1. 引言 ##### 1.1 目的 Action Message Format (AMF) 是一种紧凑的二进制格式,用于序列化 ActionScript 对象图。一旦序列化,AMF 编码的对象图可以用于在不同会话之间持久化和...
AMF0是早期版本,主要应用于Flash Player 8及更早版本,而AMF3则在Flash Player 9及以后版本中广泛使用,提供了更高效的数据编码和解码。 使用AMF.NET进行开发时,开发者可以创建服务端的方法,这些方法会被Flash或...
3. **red5Server**:这个文件可能是Java源代码或者Red5服务器的应用程序目录,包含了运行DEMO所需的服务器端逻辑。Red5基于Java,所以服务器端代码通常会用Java编写,实现接收和处理客户端请求,提供流媒体服务。 ...
5. **优化机制**:AMF0还包括一些优化机制,如引用表,用于存储已经编码过的对象,当再次遇到相同的对象时,只需引用其在表中的位置,而不是重新编码整个对象,从而节省空间和时间。 6. **兼容性**:AMF0是Adobe ...
虽然AMF1.0相比AMF0增加了对XML和XMLList的支持,但在后来的AMF3版本中,这些功能得到了更全面的优化,因此AMF1.0现在较少被使用。 在"AMF1.0(AMP).zip"这个压缩包中,我们可以推测包含的是与AMF1.0相关的源代码...
Lua-Amf 是一个专为 Lua 语言设计的AMF(Action Message Format)解析库,它使得在 Lua 环境中处理AMF3格式的数据变得简单高效。AMF是一种二进制序列化格式,常用于Flash与服务器之间的数据交换,如Adobe的Flex和...
Red5是一款开源的流媒体服务器,它支持实时流传输协议(RTMP)、HLS、RTSP等协议,常用于视频直播、视频点播和互动应用。"setup-Red5-1.0.5(windows安装版 for jdk8)" 是Red5的一个特定版本,专为Windows操作系统...
- AMF有AMF0和AMF3两个版本,AMF3提供了更好的压缩和效率。 - AMF数据类型包括Number、Boolean、String、Object、Array、Date、Null、Undefined和Mixed Array等。 - AMF数据是二进制的,因此需要解码才能读取和...