服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

实例讲解移动qq在线平台(一)


snap的概念

snap,即scalable network application package,翻译为可缩放的网络应用解决方案

snap mobile apisnokia公司和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)

 

实例讲解移动qq在线平台(一)(图一)

点击查看大图
 

也就是说,你可根据你的项目特点有选择地进行开发。

商业应用示范

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是什么?

对于移动游戏开发者来说,它其实就是多人在线游戏的开发工具。通过它你可以实现手机注册、登陆、进入游戏大厅或者游戏房间进行多种模式的游戏对战。

 

它的构架是这样的:

 

实例讲解移动qq在线平台(一)(图二)

点击查看大图
 

对于客户端移动游戏开发者来说,只要实现了客户端访问到服务器,能发出请求,完成登陆、接收信息以及其他的一些社区功能而后登出服务器的话,基本就完成客户端的开发。

实例讲解移动qq在线平台(一)(图三)

nokia的产业链中,整个开发运作流程是这样的:

 

实例讲解移动qq在线平台(一)(图四) 

可以看到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的选项,都打上勾

实例讲解移动qq在线平台(一)(图五) 

然后在安装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

 

    实例讲解移动qq在线平台(一)(图六)

 

在安装snapmobile的目录下找到 lib 文件夹,把 sm-api.jar复制到wtk2.3/apps/snaptest/lib目录下。然后编译生成。

 

启动安装snapmobile的目录下snapmobile/tools/serveremulator的服务器端模拟器 emu.bat,会出现一个dos运行框,里面有发布信息,然后再运行客户端的模拟器,就会出现欢迎信息,完成登陆。

 

实例讲解移动qq在线平台(一)(图七) 

可能看完这个示例后,你对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,impsweb 服务器(用户名,密码,游戏类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);