蓝牙休闲娱乐平台(毕业设计)第三部份
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类的关系可以这样形象的理解吧。
相关文章推荐
- 蓝牙休闲娱乐平台(毕业设计)第六部份
- 蓝牙休闲娱乐平台(毕业设计)第七部份
- 蓝牙休闲娱乐平台(毕业设计)第七部份
- 蓝牙休闲娱乐平台(毕业设计)第一部份
- 蓝牙休闲娱乐平台(毕业设计)第二部份
- 蓝牙休闲娱乐平台(毕业设计)第四部份
- 蓝牙休闲娱乐平台(毕业设计)第五部份
- 蓝牙休闲娱乐平台(毕业设计)第八部份
- 使用APICloud平台一周时间开发出休闲娱乐内容类APP
- 必兆娱乐平台1pk1棋智谷棋牌5u
- 万国娱乐平台ci
- eeg娱乐平台j
- 网络攻防平台第三关
- CSR蓝牙开发平台
- NAB展会新闻:微软和媒体娱乐合作伙伴在Windows Azure平台上发展数字供应链解决方案
- 休闲平台,何去何从?(1)
- 休闲平台,何去何从?(2)
- 与蓝牙车载确保一个安全及娱乐之旅
- 尚8娱乐平台时时彩官网+q 7 9 8 2 9 3
- A7娱乐平台客服+q 7 9 8 2 9 3