Pankia wiki ~Match~

Pankiaにはオフライン対戦とオンライン対戦があります。

//データの送信
+ (void)sendData:(NSData *)data toUser:(NSString *)user reliable:(BOOL)reliable;
+ (void)sendDataToAllUsers:(NSData *)data reliable:(BOOL)reliable;
//対戦開始からの経過時間
+ (double)timeElapsedOnCurrentMatch;
+ (double)timeElasped __deprecated;
//対戦終了 2種類の説明は後述
+ (void)finishMatchWithResult:(PNMatchResult *)result onSuccess:(void (^)(void))onSuccess onFailure:(void (^)(NSError *error))onFailure;
+ (void)endMatch;
//再戦
+ (void)waitForRematch:(int)timeout;
//対戦人数設定
+ (void)setInternetMatchMinRoomMember:(int)minMember;
+ (void)setInternetMatchMaxRoomMember:(int)maxMember;
+ (void)setLocalMatchMinRoomMember:(int)minMember;
+ (void)setLocalMatchMaxRoomMember:(int)maxMember;

対戦のときはさまざまな場合で呼ばれるメソッドが多くあります。

//対戦開始時
- (void)matchDidBegin:(PNMatchSession *)session;
//データ受信時
- (void)matchDidReceiveData:(NSData *)data fromUser:(NSString *)user;
//対戦相手の切断検知時
- (void)matchDidDisconnectWithUser:(NSString *)user;
//対戦終了時
- (void)matchDidFinish;
- (void)matchDidEnd;

データ送信時NSData *NSArray *型やNSString *型を変換して送信するのがよいかと思います。また, reliableをYESにするとデータの送信に失敗しても再送するため信頼度はあがります。リアルタイムを重視するならNOがいいと思います。

対戦終了はにfinish系とend系がありますが,finish系は対戦は終了し,結果も送信するが通信は終了されず,その後再戦もできる。end系は通信を終了するものなので普通に終了したい場合はfinishしたあとendする。

対戦開始時に受け取るPNMatchSession *から対戦情報を得る事が出来ます

@interface PNMatchSession : NSObject

@property (nonatomic, readonly) NSArray *members;
@property (nonatomic, readonly) int selfIndex;
@property (nonatomic, readonly) int lobbyId;
@property (nonatomic, readonly) BOOL isInternetMatch;