2016-01-20 25 views
0

我有两种方法alphaClicked()betaClicked()和他们的工作,我们需要连接到网络中的服务,所以我有另一种名为connect()所以我们需要在两个类中的方法首先连接,以便检查我们是否连接,如果我们不是,则我们调用connect()方法,然后我们在ActionConnectionResultReceived中获得连接的结果,所以如果我们成功连接,我想调用alphaClicked()如果alpha是请求connect()的那个如果betaClicked()是请求connect()方法的那个,请拨打betaClicked()什么是最好的方法?如何理解谁想要一个方法的结果

总结,这是问题:

alphabeta需要connectconnect结果不会立即回来,所以我们通过ActionConnectionResultReceived得到它的话,如何让谁被称为连接是它alphabeta

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

没有Asyncevent 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

已经以这种方式实现了,想知道如何以更简洁的方式来完成它,比如你所说的'events' –

+1

然后你可能想了解'async'和'await' ......或依赖注入(就像Pieter建议的那样) – Ian

相关问题