GameKit( iphone SDK フレームワーク)
今製作中のアプリ、将来的には通信対戦をつけるつもりでいたのだが
どうもGameKitを使うと bluetoothだけでなくLAN環境でもネット対戦
の実装が簡単にできるとの事でいろいろ試してみた。
・GKPeerPickerController はLAN用では使えない。
connectionTypesMaskのマスク値を
GKPeerPickerConnectionTypeNearby|GKPeerPickerConnectionTypeOnline
のようにGKPeerPickerConnectionTypeOnlinを増やしてやると
左に オンライン、右に bluetoothでの接続アイコンが出現するが
実はオンライン用のアイコンはダミーで押すだけで機能しなかった。
AppleのGameKitリファレンスによると
下記のように 自分でオンライン用のインターフェースはてめえで開発してねという
ようなことが書いてある。
- (void)peerPickerController:(GKPeerPickerController *)picker didSelectConnectionType:(GKPeerPickerConnectionType)type {
if (type == GKPeerPickerConnectionTypeOnline) {
[picker dismiss];
[picker autorelease];
// Implement your own internet user interface here.
}
}
そこでdelgateして ボタンが押されたらGKsessionのオブジェクトを作るように
してみる。
GKSession *aSession = [[GKSession alloc] initWithSessionID:nil
displayName:user.displayName
sessionMode:GKSessionModePeer];self.gkSession = aSession;
self.gkSession.delegate = self;
self.gkSession.available = YES;[self.gkSession setDataReceiveHandler:self withContext:NULL];
UIは何も作成してないので何も起きないが、これを実機に転送し
シュミレーターと同時に オンライン用のアイコンを押してみるとデバッグの
コンソールでは 何か接続している様子がわかる。
試しに 実機は初代のitouchで右側のbluetooth用のアイコンが押しても機能しないため
しか押せないのでシュミレータのほうで押してみるとなんと!
itouchの名前がリストアップされた。しかし選択してみると何もおきない。
どうもGKSessionでは
1.接続可能な相手をリストアップする
2.相手に確認のメッセージを送る
3.承諾する
というプロセスを踏まないと実際にP2Pで通信できるようにはならないらしい。
こんどはGKSessionのメソッドをdelgateして
2.のリクエストがきたら即承諾する処理を加えると GKPeerPickerController
のUIインターフェースが消えた。(たぶんこれで接続可能になったため)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- (void)session:(GKSession*) session didReceiveConnectionRequestFromPeer:(NSString*) peerID {
[session acceptConnectionFromPeer:peerID error:nil];
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
もしかすると 初代のitouchでなければ bluetoothのアイコンを選択できるので
なんの変更もなしでオンラインでの接続もできるのかもしれない。