/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.realtimechat;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import android.content.Context;
import android.util.Log;
import com.galaxy.meetup.client.android.service.ServiceResult;
import com.galaxy.meetup.client.util.EsLog;
/**
*
* @author sihai
*
*/
public class BlockingC2DMClient {
private final CountDownLatch mEvent = new CountDownLatch(1);
private final RealTimeChatServiceListener mRealTimeChatListener = new OnC2dmReceivedListener();
private String mRegistrationToken;
private ServiceResult mServiceResult;
private final long mTimeoutMilliseconds = 30000L;
private boolean mUsed;
public BlockingC2DMClient(long l)
{
}
public final void blockingGetC2dmToken(Context context) throws Exception
{
if(mUsed)
throw new IllegalStateException("This class is single-use.");
try {
mUsed = true;
RealTimeChatService.registerListener(mRealTimeChatListener);
mRegistrationToken = RealTimeChatService.getOrRequestC2dmId(context);
if(null != mRegistrationToken) {
mServiceResult = new ServiceResult();
} else {
if(!mEvent.await(mTimeoutMilliseconds, TimeUnit.MILLISECONDS))
{
if(EsLog.isLoggable("BlockingC2DMClient", 6))
Log.e("BlockingC2DMClient", "Waiting for C2DM registration timed out.");
mServiceResult = new ServiceResult(-2, "Waiting for C2DM registration timed out.", null);
}
if(mServiceResult == null)
{
if(EsLog.isLoggable("BlockingC2DMClient", 5))
Log.w("BlockingC2DMClient", "Result was not set by service.");
mServiceResult = new ServiceResult(0, "Result was not set by service.", null);
}
}
RealTimeChatService.unregisterListener(mRealTimeChatListener);
} catch (InterruptedException interruptedexception) {
if(EsLog.isLoggable("BlockingC2DMClient", 6))
Log.e("BlockingC2DMClient", "Waiting for C2DM registration interrupted.", interruptedexception);
mServiceResult = new ServiceResult(-1, "Waiting for C2DM registration interrupted.", interruptedexception);
RealTimeChatService.unregisterListener(mRealTimeChatListener);
Thread.currentThread().interrupt();
} catch (Exception exception) {
RealTimeChatService.unregisterListener(mRealTimeChatListener);
throw exception;
}
}
public final boolean hasError()
{
boolean flag;
if(mRegistrationToken == null || mServiceResult == null || mServiceResult.hasError())
flag = true;
else
flag = false;
return flag;
}
private final class OnC2dmReceivedListener extends RealTimeChatServiceListener
{
final void onC2dmRegistration(ServiceResult serviceresult, String s)
{
mServiceResult = serviceresult;
mRegistrationToken = s;
mEvent.countDown();
}
}
}