2008-01-16

OpenAMF - Custom Class Mapping

关键字: openamf custom class mapping

要看这篇文章,先要对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

  1. class idv.swl.remoting.myClass {
  2.  var count:Number;
  3.  var log:String;
  4.  function myClass() {
  5.  }
  6.  function doTrace() {
  7.   trace("count : "+count);
  8.   trace("log : "+log);
  9.  }
  10. }

3.撰写Server Java Class

Java Class要依循JavaBean的撰写规范
才能进行序列化、反序列化的动作

myClass.java

  1. package idv.swl.remoting;
  2. public class myClass implements java.io.Serializable {
  3.     
  4.     public int count;
  5.     public String log;
  6.     public myClass() {
  7.     }
  8.     
  9.     public void setCount(int count) {
  10.         this.count = count;
  11.     }
  12.     public int getCount() {
  13.         return count;
  14.     }
  15.     
  16.     public void setLog(String log) {
  17.         this.log = log;
  18.     }
  19.     public String getLog() {
  20.         return log;
  21.     }
  22.     
  23.     public void doTrace() {
  24.         System.out.println("count : " + count);
  25.         System.out.println("log : " + log);
  26.     }
  27. }

 

4.撰写测试程序

以下的测试程序是将自订类别(myClass)对象在Client-Server之间互丢
并执行myClass for Java and ASfunction 直到myClass.count计数器累加到3Server Class
  1. package idv.swl.remoting;
  2. public class server {
  3.     
  4.     public static myClass process(myClass obj) {
  5.         obj.count++;
  6.         obj.log += "java processing at " + new Date() + "n";
  7.         obj.doTrace();
  8.         return obj;
  9.     }
  10.     
  11. }

 Flash AS in Frame 1:

  1. //==================================================
  2. import idv.swl.remoting.myClass;
  3. Object.registerClass("idv.swl.remoting.myClass", idv.swl.remoting.myClass);
  4. //==================================================
  5. var nc:NetConnection = new NetConnection();
  6. nc.onResult = function(data) {
  7.  trace("onResult : ");
  8.  data.doTrace();
  9.  if (data.count<3) {
  10.   data.log += "Flash processing at "+new Date()+"n";
  11.   nc.call("idv.swl.remoting.server.process", nc, data);
  12.  }
  13. };
  14. nc.onStatus = function(data) {
  15.  trace("onStatus : ");
  16.  for (var i in data) {
  17.   trace(i+" : "+data[i]);
  18.  }
  19. };
  20. nc.connect("http://localhost:8084/RemotingTest/gateway");
  21. //==================================================
  22. var obj:myClass = new myClass();
  23. obj.log = "";
  24. obj.count = 0;
  25. 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

 

 

此文章收藏自Ticore's blog:http://ticore.blogspot.com/2005/09/openamf.html

评论
发表评论

您还没有登录,请登录后发表评论

wenson
搜索本博客
我的相册
2b022472-f115-33a8-b6ba-cde7f0e18e2b-thumb
wenson
共 1 张
存档
最新评论