您的位置:首页 > 其它

蓝牙休闲娱乐平台(毕业设计)第三部份

2008-03-08 22:09 453 查看
 




/** *//**


 * Copyright@scholar_ii 


 * @author 梧州学院 04计本2班 罗功武


 * date 08/02/27


 */


package flat;




import javax.microedition.lcdui.Alert;


import javax.microedition.lcdui.AlertType;




/** *//**


 * HelpWindow 类


 * 简单的介绍平台的功能与游戏帮助


 */




public class HelpWindow extends Alert ...{


    




    public HelpWindow( )...{


        super("平台介绍与帮助 ", null,null,AlertType.INFO);


        setString("平台的娱乐功能 " +


                "进行聊天与游戏 " + 


                "游戏规则介绍 " + 


                "五子棋的变种 " + 


                "玩家只能在棋盘的下方左右移动,且所下的棋于向上填充空的棋格为原则" +


                "当玩家所填的棋在四个方向为四个的时候方为输 " +


                "本娱乐平台有很多不足之处,请见谅 " + 


                "编者:罗功武  " +


                "联系方式:scholar_ii@163.com");


        setTimeout(Alert.FOREVER);


        


    }


}



 

 一下步我将在介绍的是common包中的类,里边的两个类对于整个系统来说是非常重要的。
同时它俩所涉及到JSR82API的应用。所以这个包的这两个类功能实现是一个技术点。先介绍ServiceSearcher类,这个类我是这样设计的。ServiceSearcher类实现两个接口,第一个接口是Runnable,这样做的目的是使其成为一个线程类,其它类调用它的时候就是会再后台产生一个任务线程。第二个接口就是DiscoveryListener,这个目的当然是为要利用JSR82中的API,有关与蓝牙收搜设备与服务的模式与方法并是不很难理解的,具体的实现大家可以看代码的,我想提的是代码里边我利用到了线程同步的机制,还有就是如何获取用户服务记录属性的值方法,(如何设置用户服务记录属性的值,大家可能****Server这些类中看到)
代码如下

 

 




/** *//**


 * Copyright@scholar_ii 


 * @author 梧州学院 04计本2班 罗功武


 * date 08/02/27


 */


package common;




import java.util.Vector;


import javax.bluetooth.BluetoothStateException;


import javax.bluetooth.DeviceClass;


import javax.bluetooth.DiscoveryAgent;


import javax.bluetooth.DiscoveryListener;


import javax.bluetooth.LocalDevice;


import javax.bluetooth.RemoteDevice;


import javax.bluetooth.ServiceRecord;


import javax.bluetooth.UUID;




/** *//**


 * ServiceSearcher类


 * 用于搜索三种服务


 * UUID-11111111111111111111111111111111


 * 两个聊天室


 * UUID-22222222222222222222222222222222


 * 多个聊天室


 * UUID-33333333333333333333333333333333


 * 双人互动游戏


 */




public class ServiceSearcher implements Runnable, DiscoveryListener ...{




    /**//*服务类型名*/


    private String serviceName = null;




    /**//*聊天室列表类*/


    private RoomList chatRoomList = null;




    /**//*本地设备*/


    private LocalDevice localDevice = null;




    /**//*服务代理*/


    private DiscoveryAgent agent = null;




    /**//*发现的设备*/


    private Vector deviceFound = null;




    /**//*发现的服务*/


    private Vector serviceFound  = null;


    


    public ServiceSearcher(String serviceName,RoomList roomList)




    ...{


        this.serviceName = serviceName;


        this.chatRoomList = roomList;




        /**//*开始搜索线程*/


        new Thread(this).start();


    }




    /** *//**


     * 开始搜索


     */




    public void run() ...{


        


        doSearchDevices();




    }




    /** *//**


     * 服务记录搜索的方法


     */




    public void doSearchDevices()...{


        




        try ...{


            localDevice = LocalDevice.getLocalDevice();




        } catch (BluetoothStateException e) ...{


            


            e.printStackTrace();


        }


        agent = localDevice.getDiscoveryAgent();


        deviceFound = new Vector();


        serviceFound = new Vector();




        try ...{


            if(!agent.startInquiry(DiscoveryAgent.GIAC, this))




            ...{


                return;


            }




        } catch (BluetoothStateException e) ...{


            


            


        }


    }




    /** *//**


     * 服务搜索的方法


     * @param remoteDevice


     * @return void 


     */




    public void doServiceSearch(RemoteDevice remoteDevice)...{


    




        /**//*服务记录属性值的ID,用户自定义的属性值*/




        int attributes[] = ...{0x1234,0x1235};




        /**//*服务记录的UUID*/


        UUID uuids[] = new UUID[2];


        uuids[0] = new UUID(serviceName, false);


        uuids[1] = new UUID(0x1101);


    




        try ...{


            agent.searchServices(attributes, uuids, remoteDevice, this);




        }catch (BluetoothStateException e) ...{




        /**//*服务搜索失败的处理*/


        return;


    }




}   /** *//**


     * 服务器设备发现的处理


     * @param remoteDevice, deviceClasss


     * @return void 


     */




    public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass deviceClass) ...{




        /**//*加入搜索到的服务器设备*/


        deviceFound.addElement(remoteDevice);




    }




    /** *//**


     * 服务器设备搜索到服务设备的处理


     * @param disType


     * @return void


     */




    public void inquiryCompleted(int disType) ...{


        


        switch(disType)




        ...{   




            /**//*成功完成搜索的处理*/


            case DiscoveryListener.INQUIRY_COMPLETED:




                for(int i= 0; i<deviceFound.size(); i++)...{


                    doServiceSearch((RemoteDevice)deviceFound.elementAt(i));




                    /**//*实现一次搜一个服务器设备的服务记录的同步*/




                    synchronized(this)...{




                        try ...{


                            this.wait();




                        } catch (InterruptedException e) ...{


                            e.printStackTrace();


                        }


                    }


                addRoomMessage();    


                }    


                break;


            case DiscoveryListener.INQUIRY_TERMINATED:


                break;


            case DiscoveryListener.INQUIRY_ERROR:


                break;


        }




    }




    /**//*不利用服务搜索完成方法*/




    public void serviceSearchCompleted(int transID, int respCode) ...{


        




    }




    /** *//**


     * 搜索到服务的处理


     * @param tarnsID, serviceRecord


     * @return void 


     */




    public void servicesDiscovered(int transID, ServiceRecord[] serviceRecord) ...{




        /**//*加入搜索到的服务记录*/


        serviceFound.addElement(serviceRecord[0]);




        /**//*实现一次搜一个服务器设备的服务记录的同步*/




        synchronized(this)...{


            this.notifyAll();


        }


        


    }




    /** *//**


     * 增加搜到的聊天室列表


     * @param 无


     * @return 无


     */


    private void addRoomMessage()




    ...{


        


        ServiceRecord tempRecord= null;


        chatRoomList.roomURLList = new String[serviceFound.size()];


        chatRoomList.roomNameList = new String[serviceFound.size()];




        /**//*删除原先的String*/


        chatRoomList.deleteAll();


        for(int i=0; i<serviceFound.size(); i++)




        ...{




            /**//*获得服务器端的服务记录*/


            tempRecord = (ServiceRecord)serviceFound.elementAt(i);




            /**//*获得服务器端的服务记录的链接字符串并加入到聊天室的链接列表*/


            chatRoomList.roomURLList[i]= tempRecord.getConnectionURL(


                    ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);




            /**//*获得服务记录的用户自定义的服务属性并加入到聊天室名的列表*/


            String str =(String)(tempRecord.getAttributeValue(0x1234).getValue()); 


            chatRoomList.append(str, null);


            chatRoomList.roomNameList[i] = str; 


        }


            


    }




}//ServiceSercher.java结束



 

 

 




/** *//**


 * Copyright@scholar_ii 


 * @author 梧州学院 04计本2班 罗功武


 * date 08/02/27


 */


package common;




import javax.microedition.lcdui.Command;


import javax.microedition.lcdui.CommandListener;


import javax.microedition.lcdui.Displayable;


import javax.microedition.lcdui.List;




import chat.MultiChatRoomClient;


import chat.PairChatRoomClient;


import flat.FlatMainMIDlet;


import game.GameClient;




/** *//**


 * RoomList 类


 * 显示蓝牙网络中开放的如娱乐房间的列表。


 * 提供给用户选择进入感趣兴的娱乐房间。


 */




public class RoomList extends List implements CommandListener ...{


    




    /**//*聊天室类型*/


    private int roomStyle ;




    /**//*用户名*/


    private String userName = null;




    /**//*娱乐平始的主类*/


    private FlatMainMIDlet flatMainMIDlet = null;




    /**//*聊天室链接列表*/


    public String[] roomURLList = null;




    /**//*聊天室名称列表,创建聊天室的用户妮称*/


    public String[] roomNameList = null;


    


    private static final Command cmdBack = new Command("返出",Command.BACK,1);


    private static final Command cmdOK = new Command("进入", Command.OK,1);




    /** *//**


     * 构造方法


     * 完成聊天室窗口的初使化


     * @param title


     * @param flatMainMIDlet


     * @param userName


     */


    public RoomList(String title, FlatMainMIDlet flatMainMIDlet,




            String userName ,String uuidString, int roomStyle)...{


        super(title, List.EXCLUSIVE);


        this.flatMainMIDlet = flatMainMIDlet;


        this.userName = userName;


        this.roomStyle = roomStyle;


        append("搜索房间中.....",null);


        addCommand(cmdBack);


        addCommand(cmdOK);


        setCommandListener(this);


        new ServiceSearcher(uuidString,this);


    }


    


    private void showRoomClinet(int index)




    ...{


        switch(roomStyle)




        ...{


            case 1:




                /**//*双人个聊天室*/


                flatMainMIDlet.display.setCurrent(


                        new PairChatRoomClient(roomURLList[index],


                                flatMainMIDlet,userName,roomNameList[index]));


                break;


            case 2:




                /**//*多人聊天室*/


                flatMainMIDlet.display.setCurrent(


                        new MultiChatRoomClient(roomURLList[index],


                                flatMainMIDlet,userName,roomNameList[index]));


                break;


            case 3:




                /**//*游戏聊天室*/


                flatMainMIDlet.display.setCurrent(


                        new GameClient(roomURLList[index],


                                flatMainMIDlet));


                break;


            


        }


    }


    




    public void commandAction(Command command, Displayable displayable) ...{




         /**//*进入聊天室*/


        if(command==cmdOK)




        ...{


            if(roomURLList!=null)




            ...{




                /**//*选择的聊天室的序号*/


                int index = getSelectedIndex();


                showRoomClinet( index);


                    


            }


        }




        /**//*返回主菜单*/


        else if(command==cmdBack)




        ...{


            flatMainMIDlet.showFlatMenu();


        }




    }


    


}//ChatRoomList.java文件结束



 

RoomList类是ServiceSearcher类的使用者。RoomList类主要是利用ServceSearcher类来收某种服务,并将结果显示出来。简单来说就是你叫你小弟去买东西,然后你就忙你的事去,当你小弟买回你所需要的东西时就交给你。RoomList类与ServiceSerarcher类的关系可以这样形象的理解吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息