准备工具有:SmartFoxServerPro1.6.6,Eclipse 3.5,Adobe Flash CS4.
在写第一个Java扩展之前,你要确定自己的SmartFoxServer已经能正常工作。并且下面所说的所有路径都是从安装SmartFoxServer目录开始的。
大致有三步:
1. 修改SFS自带的Flash文件,让它为我们向Java扩展发送请求;
2. 自己写一个Java扩展,用来处理Flash的请求;
3. 配置SFS服务器,让Flash的请求能找到我们的Java扩展。
第一步Flash修改:
我们将导入Server/webserver/webapps/root/Examples/AS2/01_simpleConnect下的simpleConnect.fla例子。
首先在“属性”下的“配置文件:Flash MX Settings”中点击“编辑”按钮,然后在“Flash”下的“脚本”列点击“设置”,最后点击“+”号添加Flash API/Actionscript 2.0 和 3.0两个文件夹。
接着我们开打动作面板,选中“Layer 1”后把里面的代码替换成:
/**
* SFS客户端访问服务器端的四个步骤:
* 1. smartfoxclient.connect(ip, port) // 连接服务器。
* 2. smartfoxclient.login(zone, name) // 加入服务器中的Zone。
* 3. this.autoJoin() // 加入到Room中。
* 4. smartfoxclient.sendXtMessage("", "", arguments) // 向服务器发送请求。
*/ import it.gotoandplay.smartfoxserver.*
stop()
var ip:String = "127.0.0.1"
var port:Number = 9339
var zone:String = "simpleChat"
var s:SmartFoxClient = new SmartFoxClient(true)
// 试图连接服务器。
s.connect(ip, port)
// 当connect()函数执行后被触发。
s.onConnection = function(status)
{
if (status) {
status_txt.text = "connection is successful."
s.login(zone, "zhangchen")
} else {
status_txt.text = "Can't connect!"
}
}
// 当进入一个zone时该事件被触发(通常是访问login()函数期间)。
s.onRoomListUpdate = function(roomList:Object) {
this.autoJoin()
}
// 当一个房间成功地被加入时触发。
s.onJoinRoom = function(roomObj)
{
var info:Object = new Object()
info.a = "abc"
info.b = "cba"
// helloworld决定调用哪个扩展,对应的是config.xml配置中<extension />中的name参数。
// cmd传递给handleRequest()方法中的第一个参数(String cmd)。
// info传递给handleRequest()方法中的第二个参数(ActionSrcriptObject aso)。
s.sendXtMessage("helloworld","cmd",info)
}
Java扩展步骤:
那现在我们就开始吧,给你的Java项目添加这几个类库:
SFS version 1.6.x 是Server/lib/目录下的jysfs.jar, json.jar, json-lib-2.1-jdk15.jar三个类库。
SFS version 1.5.x 是Server/lib/目录下的jysfs.jar, json.jar 两个类库。
SFS version 1.4.x是Server/目录下的smartfoxserver.jar
让我们来写第一个Java扩展,需要做的就是让自己的类必须去继承AbstractExtension类,这是一个抽象类,需要实现未实现的方法,有:init(), destroy(), handleRequest(), handleInternalEvent()。我们目前所关心的就是handleRequest方法,它就是用来处理客户端的请求。
HelloWorld.java
package test;
import it.gotoandplay.smartfoxserver.data.User;
import it.gotoandplay.smartfoxserver.events.InternalEventObject;
import it.gotoandplay.smartfoxserver.extensions.AbstractExtension;
import it.gotoandplay.smartfoxserver.lib.ActionscriptObject;
public class HelloWorld extends AbstractExtension {
@Override
public void handleRequest(String cmd, ActionscriptObject aso, User user,
int arg3) {
System.out.println(aso.getString("a")); // 通过sendXtMessage()传递来的信息
System.out.println(aso.getString("b"));
}
@Override
public void handleRequest(String cmd, String[] arg1, User user, int arg3) {
// 我们暂时不需要在这里做什么。
}
@Override
public void handleInternalEvent(InternalEventObject arg0) {
// 我们暂时不需要在这里做什么。
}
}
配置SFS服务器:
配置文件在Server/目录下,我们去找一个<Zone /> name=” simpleChat”。我们在<Extensions />中加入:<extension name="helloworld" className="test.HelloWorld" type="java" /> 。
将eclipse编译的HelloWorld.class复制到Server/javaExtensions/目录下,注意在javaExtensions目录下还要创建自己创建HelloWorld.java时的路径。
最后来试试看吧!
先启动你的服务器,然后输入网址:http://127.0.0.1:8080 后点击Browse Examples 在选择Simple Connect。在启动后的dos界面里看看输出结果吧。