}
private void useGCMCommand() throws Exception {
String ac2dmAuth = loginAC2DM();
MTalkConnector connector = new MTalkConnector(new NotificationListener(service));
ConnectFuture connectFuture = connector.connect();
connectFuture.await(TIMEOUT);
if (!connectFuture.isConnected()) {
throw new IOException("Couldn't connect to GTALK server!");
}
final IoSession session = connectFuture.getSession();
send(session, IoBuffer.wrap(new byte[] { 0x07 })); // connection sanity check
System.out.println("Connected to server.");
String deviceIDStr = String.valueOf(new BigInteger(service.getAndroidID(), 16).longValue());
String securityTokenStr = String.valueOf(new BigInteger(service.getSecurityToken(), 16).longValue());
LoginRequestPacket loginRequestPacket = new LoginRequestPacket(deviceIDStr, securityTokenStr, service.getAndroidID());
LoginResponseFilter loginResponseFilter = new LoginResponseFilter(loginRequestPacket.getPacketID());
connector.addFilter(loginResponseFilter);
send(session, loginRequestPacket);
LoginResponse loginResponse = loginResponseFilter.nextMessage(TIMEOUT);
connector.removeFilter(loginResponseFilter);
if(loginResponse==null){
throw new IllegalStateException("Login response could not be received!");
} else if(loginResponse.hasError()){
throw new IllegalStateException(loginResponse.getError().getExtension(0).getMessage());
}
System.out.println("Autheticated.");
BindAccountRequestPacket bindAccountRequestPacket = new BindAccountRequestPacket(service.getEmail(), ac2dmAuth);
BindAccountResponseFilter barf = new BindAccountResponseFilter(bindAccountRequestPacket.getPacketID());
connector.addFilter(barf);
send(session, bindAccountRequestPacket);
BindAccountResponse bindAccountResponse = barf.nextMessage(TIMEOUT);
connector.removeFilter(barf);
/*if(bindAccountResponse==null){
throw new IllegalStateException("Account bind response could not be received!");
} else if(bindAccountResponse.hasError()){
throw new IllegalStateException(bindAccountResponse.getError().getExtension(0).getMessage());