2011-04-20 29 views
0

我試圖通過藍牙使用遊戲工具包連接兩個設備。第一設備是運行用下面的代碼的應用程序在它裏面:爲什麼我的設備無法使用此遊戲套件連接代碼找到彼此?

-(void)connect 
{ 
    GKPeerPickerController*  picker; 

    picker = [[GKPeerPickerController alloc] init]; 
    picker.delegate = self; 
    //picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby; 
    picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby; 
    [picker show]; 

} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    peerStatus = kServer; 
    gamePacketNumber = 0; 
    currentSession = nil; 
    gamePeerId = nil; 


    NSString *uid = [[UIDevice currentDevice] uniqueIdentifier]; 

    gameUniqueID = [uid hash]; 
    [self connect]; 

} 

- (void)peerPickerController:(GKPeerPickerController *)picker didSelectConnectionType:(GKPeerPickerConnectionType)type { 
    // GKSessionModeClient 
    // GKSessionModeServer 
    [self.currentSession initWithSessionID:kTankSessionID displayName:nil sessionMode:GKSessionModeClient]; 
    currentSession.available = YES; 
    currentSession.delegate = self; 

} 

- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session 
{ 
    self.gamePeerId= peerID; 
    //self.currentSession = session; 

    self.currentSession.delegate = self; 
    [self.currentSession setDataReceiveHandler: self withContext:nil]; 

    // Remove the picker. 
    picker.delegate = nil; 
    [picker dismiss]; 
    [picker autorelease]; 
    // Start your game 
} 

- (void)peerPickerControllerDidCancel: (GKPeerPickerController *)picker 
{ 
     NSLog(@"peerPickerControllerDidCancel"); 
    picker.delegate = nil; 
    [picker autorelease]; 

} 


- (void)session: (GKSession*)session peer:(NSString*)peerID didChangeState:(GKPeerConnectionState)state 
{ 
    NSLog(@"finding and connecting to others sessions"); 
    if(state == GKPeerStateAvailable){ 
     NSLog(@"aviable and ready to conect"); 
     [session connectToPeer:peerID withTimeout:60]; 
     session.available =NO; //put YES si volem multiconexions sino es tancarà la sesio en conectarse 2 
    } 
} 

- (void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString *)peerID{ 
    NSLog(@"lisetn for others sessions"); 
    NSError *error=nil; 
    if(amAcceptingConnetions){ 
     if(![session acceptConnectionFromPeer:peerID error:&error]){ 
      //Handler error 
     } 
    }else{ 
     [session denyConnectionFromPeer:peerID]; 
    } 

} 

所述第二設備是運行使用相同的代碼,上述另一應用中,僅使用以下片改變:

[self.currentSession initWithSessionID:kTankSessionID displayName:nil sessionMode:GKSessionModeServer]; 

正常窗口同時出現,表示他們正在搜索其他設備,但這兩個設備不能識別對方。這裏有什麼可能是錯的?

回答

0

如果尚未分配currentSession,則需要分配currentSession。也許嘗試改變:

[self.currentSession initWithSessionID:kTankSessionID displayName:nil sessionMode:GKSessionModeClient]; 

要這樣:

self.currentSession = [[GKSession alloc] initWithSessionID:kTankSessionID displayName:nil sesssionMode:GKSessionModeClient]; 

您創建一個新之前,您可能還希望添加一個檢查,看看是否會話已經分配,​​並釋放它,如果它是。如果您在每次設備嘗試連接時重置會話,而不是重複使用同一會話,我注意到性能和可靠性方面的一些改進。

相關問題