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)
也就是说,你可根据你的项目特点有选择地进行开发。
商业应用示范
snapmobile给出了一些与nokia合作的手机游戏开发商的展示:
http://snapmobile.nokia.com/n-gage/web/en/snapmobile/games.jsp
octopi game development studio也有很好的示范,你可以浏览
http://www.octopi.com/snap.htm
从那里你能得到一个很好的概念。
到底snap mobile是什么?
对于移动游戏开发者来说,它其实就是多人在线游戏的开发工具。通过它你可以实现手机注册、登陆、进入游戏大厅或者游戏房间进行多种模式的游戏对战。
它的构架是这样的:
对于客户端移动游戏开发者来说,只要实现了客户端访问到服务器,能发出请求,完成登陆、接收信息以及其他的一些社区功能而后登出服务器的话,基本就完成客户端的开发。

在nokia的产业链中,整个开发运作流程是这样的:
可以看到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的选项,都打上勾。
然后在安装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

在安装snapmobile的目录下找到 lib 文件夹,把 sm-api.jar复制到wtk2.3/apps/snaptest/lib目录下。然后编译生成。
启动安装snapmobile的目录下snapmobile/tools/serveremulator的服务器端模拟器 emu.bat,会出现一个dos运行框,里面有发布信息,然后再运行客户端的模拟器,就会出现欢迎信息,完成登陆。
可能看完这个示例后,你对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 /***获取所有来自服务器的信息***/ 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);
扫描关注微信公众号 |
闽公网安备 35060202000074号