2015-02-25 5 views
2

Я использую это как одноранговый сервер-клиент, так что только код на одном устройстве определяет результат для остальных.Возможность подключения к Multipeer

Итак, я не очень далеко от него. Но я настраиваю лобби для подключенных игроков.

Клиент использует браузер, а затем, когда установлено соединение, проделанная кнопка будет толкать их к LobbyViewController

Теперь, настройки матча и детали устанавливаются в HostViewController затем перенесенный на lobbyViewController Так они набор для host

затем, если клиент скажет _matchName равен нулю, то он посылает сообщение host и host может прочитать это сообщение. Затем в ответ отправьте обратно _matchName.

Однако мне нужно отправить много сообщений на протяжении всего остального приложения. Отправляйте и получайте, я должен сказать. И я не хочу всю серию

if (_matchName == nil) { 
    NSData *dataToSend = [@"getMatchName" dataUsingEncoding:NSUTF8StringEncoding]; 
    NSArray *allPeers = _appDelegate.mcManager.session.connectedPeers; 
    NSError *error; 

    [_appDelegate.mcManager.session sendData:dataToSend 
            toPeers:allPeers 
            withMode:MCSessionSendDataReliable 
             error:&error]; 

    if (error) { 
     NSLog(@"%@", [error localizedDescription]); 
    } 
} 

-(void)didReceiveDataWithNotification:(NSNotification *)notification { 
    MCPeerID *peerID = [[notification userInfo] objectForKey:@"peerID"]; 
    NSString *peerDisplayName = peerID.displayName; 

    NSData *receivedData = [[notification userInfo] objectForKey:@"data"]; 
    NSString *receivedText = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 

    NSLog(@"From: %@ message: %@", peerDisplayName, receivedText); 
} 

Для первых, если я не хочу, чтобы идти к этому усилия для одного сообщения, и я не хочу, чтобы создать ответ в тот же форма. Затем прочитайте ответное сообщение и обновите свойство _matchName .. Кажется, что много кода для простого обновления matchName.

Как, или есть способ создать метод, чтобы сделать это намного проще ?

ответ

1

Вы, вероятно, потребуются две формы абстракции

  1. одноплодная модель класс - назовет это MPManager или что-то абстрактной функциональности multipeer - Одноэлементный управляет отправлять/получать просмотр/рекламирует часть multipeer ,
  2. Контроллер сервера-сверстника (опять же, вероятно, еще один синглтон), который может управлять сообщениями, которые сервер выдает (из контроллера представления), и отслеживать ответы от отдельных одноранговых узлов обратно делегату, который отправил сообщение (viewController).

Вы должны были бы это независимо от основного транспортного механизма

/*! 
@class BWCMessageController 
@abstract 
The MessageController is a singleton object that is responsible for sending/
receiving BWCMessage objects between devices. It interfaces with the SessionController 
which is responsible for the actual sending/receiving, and acts as the delegate for 
received data. 

Once data is received, the controller reconstructs the BWCMessage and extracts the payload 
which is tehn forwarded to the handler object which is instantiated to further process the 
message 
*/ 

#import <Foundation/Foundation.h> 
#import "BWCMessage.h" 
#import "BWCSessionController.h" 
#import "BWCTransactionHandlerOrder.h" 

@interface BWCMessageController : NSObject <BWCSessionControllerDataDelegate> 

+ (BWCMessageController *)messageController; 

- (BOOL)sendMsg:(MessageID)msgID withData:(NSData *)data fromHandler:(BWCTransactionHandler *)handler toDevice:(NSUInteger)devID withACK:(BOOL)fWithACK; 


@end 
+0

Любой путь вы могли бы разработать для достижения таких результатов? – Daniel

+0

Во-первых, сделайте несколько поисковых запросов - чтобы убедиться, что вы понимаете одиночные игры. Есть немного, и требуется хорошее понимание концепции. Я добавил пример из одного из моих классов выше – 300baud

+0

Большое спасибо. Я ценю дополнительную помощь. Похоже, мне нужно еще немного узнать! – Daniel