2016-01-20 3 views
0

У меня есть два метода alphaClicked() и betaClicked(), и для их работы мы должны быть подключены к сервису в сети, поэтому у меня есть другой метод с именем connect(), поэтому в обоих классах нам нужно сначала подключаем, поэтому мы проверяем, подключены ли мы, а затем мы вызываем метод connect(), после чего получаем результат соединения в ActionConnectionResultReceived, поэтому, если мы успешно подключились, я хочу называть alphaClicked(), если альфа была той, которая запрашивала connect() и звоните betaClicked(), если betaClicked() был тем, кто запросил метод connect(), что это лучший способ сделать это?Как понять, кто хотел получить результат метода

Суммируя это вопрос:

alpha и beta необходимость connect но connect результат не возвращается немедленно, так что мы получаем его через ActionConnectionResultReceived так, как получить назвавший подключения был его alpha или beta

private void alphaClicked() 
{ 
    if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) { 
     //do something 
    } 
    else 
    { 
     Connect(); 
    } 
} 

private void betaClicked() 
{ 
    if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) { 
     //do something else 
    } 
    else 
    { 
     Connect(); 
    } 
} 


private void ActionConnectionResultReceived(GooglePlayConnectionResult result) 
{ 
    if (result.IsSuccess) 
    { 
     Debug.Log("Connected!"); 
     //if alpha requested call alpha if beta requested call beta 
     //how to do this? 
    } 
    else 
    { 
     Debug.Log("Cnnection failed with code: " + result.code.ToString()); 
    } 
} 

private void Connect() 
{ 
    GooglePlayConnection.Instance.Connect(); 
} 
+0

Возможно ли, что приложение alphaClicked/betaClicked будет вызываться много раз до установления соединения? –

+0

Я могу предотвратить это от –

+1

Исследования * Инъекция зависимостей *; он был изобретен именно для этого сценария. –

ответ

2

Без Async или event handler, и если вы только позвонить по одному connect за единицу времени, можно ввести переменную, которая хранит последний вызывающему:

string gCaller = ""; 
private void Connect(string caller){ 
    gCaller = caller; 
    //something else 
} 

И затем использовать его как это:

private void alphaClicked() 
{ 
    if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) { 
     //do something 
    } 
    else 
    { 
     Connect("alpha"); 
    } 
} 

private void betaClicked() 
{ 
    if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) { 
     //do something else 
    } 
    else 
    { 
     Connect("beta"); 
    } 
} 

Затем, когда вам нужно последний, кто создает соединение, вы используете данные в gCaller.

private void ActionConnectionResultReceived(GooglePlayConnectionResult result) 
{ 
    if (result.IsSuccess) 
    { 
     Debug.Log("Connected!"); 
     switch (gCaller){ 
      case "alpha": 
       alphaClicked(); 
       break; 
      case "beta": 
       betaClicked(); 
       break; 
      default: 
       break; 
     } 
    } 
    else 
    { 
     Debug.Log("Cnnection failed with code: " + result.code.ToString()); 
    } 
} 

Но лучше всего было бы создать async или обработчик события для Connected событий. Посмотрите на это MSDN article.

+0

уже реализован таким образом, хотел знать, как я могу сделать это более чистым способом, как «события», как вы сказали –

+1

Тогда вы можете узнать о 'async' и' await' ... или инъекции зависимостей (как предложил Pieter) – Ian

Смежные вопросы