OpenAMF - 自訂類別轉換對照

本文介绍如何使用OpenAMF实现Flash与Java之间的自定义类转换,包括设置类对照、编写客户端与服务器端代码,以及通过示例演示数据在客户端和服务端间的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要看這篇文章,先要對Remoting有些概念
Remoting是可以讓Flash AS程式與異質(heterogeneric)程式語言直接溝通的介面
也就是讓AS可以直接與其他程式語言進行溝通、呼叫、傳遞物件
可以省去大量的資料解析的動作

由於不同程式語言的基礎型別都不太一樣
所以會有一個物件對照表
方便資料在不同程式中傳遞時進行轉換的動作
預設的物件對照僅包含基礎型別的物件與常用的容器型別

傳遞其他類別物件的時候
仍然必須自行作少量的資料解析動作
自訂類別轉換可以補足此一缺憾

因為OpanAMF是開放原始碼的計畫
而且又是連結Java平台介面
功能遠比其他版本的Remoting來得強大

以下就用OpenAMF介紹自訂類別轉換的功能

1.設定類別對照

找出OpenAMF設定檔

[WebApp]/WEB-INF/openamf-config.xml 在config結點內加入以下XML設定:  
<custom-class-mapping>
<java-class>idv.swl.remoting.myClass</java-class>
<custom-class>idv.swl.remoting.myClass</custom-class>
</custom-class-mapping>

這樣就可以將Server端的Java Class: idv.swl.remoting.myClass
與Flash端的AS Class:idv.swl.remoting.myClass完成對照

2.撰寫Flash AS Class

myClass.as: 

 
class idv.swl.remoting.myClass {
var count:Number;
var log:String;
function myClass() {
}
function doTrace() {
trace("count : "+count);
trace("log : "+log);
}
}

  3.撰寫Server Java Class

Java Class要依循JavaBean的撰寫規範
才能進行序列化、反序列化的動作

myClass.java: 

 
package idv.swl.remoting;

public class myClass implements java.io.Serializable {

public int count;
public String log;

public myClass() {
}

public void setCount(int count) {
this.count = count;
}
public int getCount() {
return count;
}

public void setLog(String log) {
this.log = log;
}
public String getLog() {
return log;
}

public void doTrace() {
System.out.println("count : " + count);
System.out.println("log : " + log);
}
}


  4.撰寫測試程式

以下的測試程式是將自訂類別(myClass)物件在Client-Server之間互丟
並執行myClass for Java and AS的function 直到myClass.count計數器累加到3

Server Class: 

 
package idv.swl.remoting;
public class server {

public static myClass process(myClass obj) {
obj.count++;
obj.log += "java processing at " + new Date() + "n";
obj.doTrace();
return obj;
}

}


Flash AS in Frame 1: 
//==================================================
import idv.swl.remoting.myClass;
Object.registerClass("idv.swl.remoting.myClass", idv.swl.remoting.myClass);
//==================================================
var nc:NetConnection = new NetConnection();
nc.onResult = function(data) {
trace("onResult : ");
data.doTrace();
if (data.count<3) {
data.log += "Flash processing at "+new Date()+"n";
nc.call("idv.swl.remoting.server.process", nc, data);
}
};
nc.onStatus = function(data) {
trace("onStatus : ");
for (var i in data) {
trace(i+" : "+data[i]);
}
};
nc.connect("http://localhost:8084/RemotingTest/gateway");
//==================================================
var obj:myClass = new myClass();
obj.log = "";
obj.count = 0;
nc.call("idv.swl.remoting.server.process", nc, obj);


Flash Output: 
onResult : 
count : 1
log : java processing at Mon Apr 04 14:55:03 CST 2005

onResult :
count : 2
log : java processing at Mon Apr 04 14:55:03 CST 2005
Flash processing at Mon Apr 4 14:55:03 GMT+0800 2005
java processing at Mon Apr 04 14:55:03 CST 2005

onResult :
count : 3
log : java processing at Mon Apr 04 14:55:03 CST 2005
Flash processing at Mon Apr 4 14:55:03 GMT+0800 2005
java processing at Mon Apr 04 14:55:03 CST 2005
Flash processing at Mon Apr 4 14:55:03 GMT+0800 2005
java processing at Mon Apr 04 14:55:03 CST 2005

 
内容概要:本书《Deep Reinforcement Learning with Guaranteed Performance》探讨了基于李雅普诺夫方法的深度强化学习及其在非线性系统最优控制中的应用。书中提出了一种近似最优自适应控制方法,结合泰勒展开、神经网络、估计器设计及滑模控制思想,解决了不同场景下的跟踪控制问题。该方法不仅保证了性能指标的渐近收敛,还确保了跟踪误差的渐近收敛至零。此外,书中还涉及了执行器饱和、冗余解析等问题,并提出了新的冗余解析方法,验证了所提方法的有效性和优越性。 适合人群:研究生及以上学历的研究人员,特别是从事自适应/最优控制、机器人学和动态神经网络领域的学术界和工业界研究人员。 使用场景及目标:①研究非线性系统的最优控制问题,特别是在存在输入约束和系统动力学的情况下;②解决带有参数不确定性的线性和非线性系统的跟踪控制问题;③探索基于李雅普诺夫方法的深度强化学习在非线性系统控制中的应用;④设计和验证针对冗余机械臂的新型冗余解析方法。 其他说明:本书分为七章,每章内容相对独立,便于读者理解。书中不仅提供了理论分析,还通过实际应用(如欠驱动船舶、冗余机械臂)验证了所提方法的有效性。此外,作者鼓励读者通过仿真和实验进一步验证书中提出的理论和技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值