Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7587096 建立时间:2006年5月29日 |

| |
[J2ME][SNAP]实例讲解移动QQ在线平台 软件技术, 电脑与网络
lhwork 发表于 2006/5/31 14:54:57 |
[SNAP]实例讲解移动QQ在线平台
简单介绍SNAP Mobile的架构
编写者
日期
关键词
陈曦@exce4
2006- 4-15
SNAP Mobile API Http TCP J2ME
SNAP的概念
SNAP,即Scalable Network Application Package,翻译为可缩放的网络应用解决方案。
SNAP Mobile APIs是Nokia公司和SUN公司提供给全球众多移动游戏开发者的基于Nokia SNAP 移动平台(像N-Gage™ Arena.)和Sun Java Wireless Toolkit (version2.3)的一个功能强大的J2ME客户端的API开发包。在SNAP APIs中提供了基于可高效拓展服务的手机多人在线游戏的开发环境,可以使开发者很方便的为程序添加网络特性,比如注册、登陆、即时通信、多人在线游戏、认证、好友列表、聊天、游戏积分排行、用户帐户和个人信息等游戏特性,大大地简化进行手机多人在线游戏J2ME程序的开发工作。
SNAP Mobile具有三大特点:
l 具有游戏社区功能(IMPS services)
l 具有在线游戏功能(SNAP Game services)
l 具有交流社区功能(Web services)
500)this.width=500'>
也就是说,你可根据你的项目特点有选择地进行开发。
商业应用示范
snapmobile给出了一些与nokia合作的手机游戏开发商的展示:
http://snapmobile.nokia.com/n-gage/web/en/snapmobile/games.jsp
Octopi Game Development Studio也有很好的示范,你可以浏览
wapapps0.163.com/wap/OTASetting.jsp?type=all">http://www.octopi.com/snap.htm
从那里你能得到一个很好的概念。
到底SNAP Mobile是什么?
对于移动游戏开发者来说,它其实就是多人在线游戏的开发工具。通过它你可以实现手机注册、登陆、进入游戏大厅或者游戏房间进行多种模式的游戏对战。
它的构架是这样的:
500)this.width=500'>
对于客户端移动游戏开发者来说,只要实现了客户端访问到服务器,能发出请求,完成登陆、接收信息以及其他的一些社区功能而后登出服务器的话,基本就完成客户端的开发。
500)this.width=500'>
在Nokia的产业链中,整个开发运作流程是这样的:
500)this.width=500'>
可以看到Nokia有一整套规范的操作流程和成熟的商业运作模式。想了解得更多的话,可以自己仔细查询:
http://snapmobile.nokia.com/n-gage/web/en/snapmobile/process.jsp
只要与Nokia提供的服务器端模拟器完成上述功能,就可以进行SNAP Mobile开发,而不需要在真实的通讯网络里完成。这就大大节约了开发成本,提高效率,也使开发者能回到核心业务,集中精力在游戏开发上,而不需要再费过多的资源关注通讯的细节。
我们下面具体讲解一下SNAP客户端登陆模拟服务器的示例。
简单的登陆示例
下载开发工具:
1。下载SNAP Mobile Client SDK:
http://www.forum.nokia.com/main/0,6566,034-1021,00.html
2。下载Sun Java Wireless Toolkit 2.3 Beta:
http://java.sun.com/products/sjwtoolkit/download-2_3.html
(注意,必须要求用Sun Java Wireless Toolkit 2.3。安装它时候,虽然出现的还是WTK2.2版本字样,但不要怀疑。启动时它的界面不再是黄、红、蓝的强势界面,而且友好的浅蓝界面。)
安装完成后,接着就是启动WTK2.3,新建一个项目。例如:
新建 SNAPTest 项目,Midlet的类名为 test.HelloWorld。保持原来的默认设置,其他的可选包都不用选择。
在设置的外部api包 External APIs里面会看到一个 sm-ui-api.jar的选项,还有一个Bundle的选项,都打上勾。
500)this.width=500'>
然后在安装SNAPMobile的目录下找到 samples文件夹,把samples\HelloWorld\src 目录下的 test 文件复制到WTK2.3的文件夹 WTK2.3\apps\SNAPTest\src目录下
然后打开设置在权限许可 Permission的地方添加访问权限的API:
MIDlet-Permissions: javax.microedition.io.Connector.socket
MIDlet-Permissions:javax.microedition.io.Connector.http
接着是设置用户自定义 User Defined ,在里面添加连接信息:
SNAP-Mobile-Host: localhost
SNAP-Mobile-Port: 8080
SNAP-Mobile-Protocol: http
username: test1
password: test
500)this.width=500'>
在安装SNAPMobile的目录下找到 lib 文件夹,把 sm-api.jar复制到WTK2.3\apps\SNAPTest\lib目录下。然后编译生成。
启动安装SNAPMobile的目录下SNAPMobile\tools\ServerEmulator的服务器端模拟器 emu.bat,会出现一个DOS运行框,里面有发布信息,然后再运行客户端的模拟器,就会出现欢迎信息,完成登陆。
500)this.width=500'>
可能看完这个示例后,你对SNAP Mobile 有了一个初步的概念。下面我们再深入一点地介绍整个SNAP Moile的构架和实现。
通过以下HelloWorld.java的主要部分代码:
HelloWorld.java
public class HelloWorld extends MIDlet implements Runnable, SnapEventListener {
/***开始运行***/
public void startApp() {
/***初始化获取访问权限***/
protocol = getAppProperty("SNAP-Mobile-Protocol");
hostname = getAppProperty("SNAP-Mobile-Host");
port = Integer.parseInt(getAppProperty("SNAP-Mobile-Port"));
username = getAppProperty("username");
password = getAppProperty("password");
gameClassID = 49152;
thread = new Thread(this);
thread.start();
}
/***线程运行***/
public void run() {
try { /***创建服务器连接对象(主机名,端口号,协议)***/
comm = new ServerComm(hostname, port, protocol);
/***添加snap事件监听器到该对象***/
comm.addSnapEventListener(this);
/***统一登陆SNAP,IMPS和Web 服务器(用户名,密码,游戏类ID,显示属性)***/
comm.extendedLogin(username, password, gameClassID, null);
/***发送信息***/
comm.sendBuddyMessage(username, "Hello World!");
} catch (Exception e) { }
/***该对象移除snap事件监听器***/
comm.removeSnapEventListener(this);
/***统一登出服务器***/
comm.unifiedLogout();
}
/***处理事件***/
public void processEvents(Vector list) {
ItemList il;
for (int i=0; i<list.size(); i++) {
/***获取所有来自服务器的信息***/
il = (ItemList)list.elementAt(i);
switch(il.getInteger("id")) {
case ItemList.IMPS_IM_MESSAGE:
console.println("- IMPS_IM_MESSAGE EVENT", Console.YELLOW);
console.println(" from id: " + il.getString("fromID"), Console.WHITE);
console.println(" from name: " + il.getString("fromName"), Console.WHITE);
console.println(" location: " + il.getString("location"), Console.WHITE);
console.println(" message: " + il.getString("message"), Console.WHITE);
if (username.equals( il.getString("fromName"))) {
done = true;
console.println("Message from ourself, done!", Console.WHITE);
} else {
console.println("Message from someone else, not done.", Console.WHITE);
}
break;
}
}
}
}
我们可以清楚地看到,Nokia已经在SNAPMobile里面已经封装好了连接接口和连接框架。让我们登陆SNAPMobile服务器成为一件很简单的事情。
(具体细节可以参考《SNAP_Mobile_HelloWorld_Tutorial_v1_0_en.pdf》的章节)
说到连接接口和连接框架咱们就不能跳过实现SNAP Mobile的通信协议。
Http和TCP
SNAP Mobile规范里面明确写着支持Http和TCP协议:
l Http 使用 8080 端口;
l TCP 使用 8976 端口;
Nokia的服务器端模拟器提供了修改相关协议、端口的命令。
说到这里不得不向各位说明一点,目前(从2006年3月20日至4月19止)Nokia官方论坛和snapmobile.nokia.com总共提供了两个性能不同的服务器端模拟器,各自针对的Demo。
SNAP Mobile SDK自带工具包里的ServerEmulator主要是针对samples\HelloWorld的演示,开发指南和 |
|
|