lanya2

如何使用GameKit

第一部分
Peer-to-Peer的连接

Session:会话iPhone通过Session互相发送数据读取数据
Peer:每一部网络中的设备算一个节点

第一节 发现其他的节点:
会话要么把自己当成 服务器/客户端 中的一种,要么做一个节点即当服务器又当客户端

1. 实现一个Server
initWithSessionID:displayName:sessionMode:GKSessionModeServer|GKSessionModePeer
服务器收到客户请求后,回调 session:didReceiveConnectionRequestFromPeer:
委托类 接受请求
   acceptConnectionFromPeer:error:
委托类 拒绝请求
   denyConnectionFromPeer:
成功建立连接后:回调委托类函数:session:peer:didChangeState
2. 连接到一个服务
initWithSessionID:displayName:sessionMode: GKSessionModeClient|GKSessionModePeer
发现可用的服务后,回调委托类函数:session:peer:didChangeState: 提供自己的PeerID
发送请求:connectToPeer:withTimeout
成功建立连接:回调:session:peer:didChangeState

第二节 交换数据
1. 发送:
sendDataToAllPeers:withDataMode:error:
sendData:toPeer:withDataMode:error
2. 接受:
receiveData:fromPeer:inSession:context:
setDataReceivehandler:withContext:

第三节
断开节点:
disconnectPeerFromAllPeers:
回调:session:peer:didChangeState:
第四节 清理:
移除数据处理器并释放会话


第二部分
添加一个节点选择器

1. 创建并初始化一个GKPeerPicerController
picker = [[GKPeerPickerController alloc] init];
2. 附加委托
picker.delegate = self;
3. 配置可选网络 ( 默认蓝牙 )
picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby |
GKPeerPickerConnectionTypeOnline;
4. 若选择因特网连接,实现:
- (void)peerPickerController:(GKPeerPickerController *)picker
   didSelectConnectionType:(GKPeerPickerConnectionType)type{
    if (type == GKPeerPickerConnectionTypeOnline) {
     picker.delegate = nil;
     [picker dismiss];
     [picker autorelease];
     //implement your own internet user inter face here
    }
}
5. 实现委托的节点选择器
peerPickerController:(GKPeerPickerControlller *)picker
sessionForConnectionType:(GKPeerPickerConnectionType)type
{
GKSession* session = [[GKSession alloc]] initWithSessionID:myExampleSessionID displayName:myName sessionMode:GKSessionModePeer] ;

[session autorelease];
}
//在覆盖节点选择器的原有方法时实现此方法。
6. 实现委托的peerPickerController:didConnectPeer:toSession:方法获得对配置好的session的所有权。
- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:( NSString *)peerID toSession: (GKSession *)season{
// 使用Retain过的属性拥有这个session
self.gameSession = self;
// 假设我们的对象同样是委托类
session.delegate = self;
[session setDataReceiveHandler: self withContext:nil];
//除掉picker
picker.delegate = nil;
[picker dismiss];
[picker autorelease];
//开始你的游戏
}
7.实现取消连接的代理方法

- (void) peerPickerControllerDidCancel:(GKPeerPickerController *)picker
{
picker.delegate = nil;
//控制器自动取消对话界面
[picker autorelease];
}
8. 显示对话
[picker show];


第三部分
使用Sessions

1. 实现 会话代理的方法:session:didChangeState:
- (void) session:(GKSession *)session peer:(NSString *)peerID
didChangeState:(GKPeerConnectionState)state
{
   switch ( state)
   {
    case GKPeerStateConnecte:
   // 相关代码
    break;
    case GKPeerStateDisconnected:
   //相关代码
    break;
   }
}
2. 发送数据到其他Peer

- (void) mySendDataToPeers: (NSData *)data
{
   [session sendDataToAllPeers: data withDataMode: GKSendDataReliable error: nil];
}
3. 从其他节点接收数据
- (void) receiveData:(NSData *)data fromPeer: (NSString *)peer inSession:
(GKSession *)session context:(void *)context
{
   //读取数据
}
4. 清除会话
[session disconnectFromAllPeers];
session.availabel = NO;
[session setDataReceiveHandler: nil withContext: nil];
session.delegate = nil;
[session release];


摘自:http://hi.baidu.com/b_a_d_b_u_k/blog/item/f326051152c85f75cb80c4d8.html


iphone蓝牙通信GameKit框架

GameKit框架中蓝牙传输主要用到的2个类
GKPeerPickerController
GKSession
通过GKPeerPickerController 提供了UI界面picker,我们也可以自定义界面。
如同其它的框架一般,APPLE提供了功能强大的代理。
蓝牙传输需要使用的2个代理是:
GKPeerPickerControllerDelegate
GKSessionDelegate
iPhone OS 3.0的最佳功能是GameKit框架,这个框架包括了允许基于蓝牙网络进行通信的API,你可以更轻松地创建点到点的游戏和应用程序。与其它移动平台不一样,在iPhone中使用蓝牙作为一个通信信道比预期的要容易得多,因此,本文将向你展示如何构建一个简单的应用程序,实现iPhone和iPod之间的相互通信。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值