The below sample code shows the registration of a new printer (if not already present) and how to listen to push notifications.
For the sake of simplicity this is straight forward code, so there might be cleaner ways to do is ;)
Here is the sample code with comments:
/*
* Process print job
*/
public static void processJobs(CloudPrintConnection gcp, Printer printer) {
try {
List<Job> jobs = gcp.fetch(printer);
if (jobs != null) {
for (Job job : jobs) {
System.out.println("Processing job " + job.getId() + " ("
+ job.getTitle() + ")");
gcp.deletJob(job);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
String printProxy = "testprinter-" + NetworkUtil.getMacAddress();
/*
* Our printer
*/
final Printer printer = new Printer();
printer.setProxy(printProxy);
printer.setName("Test Printer");
printer.setStatus("Online");
final CloudPrintConnection gcp = new CloudPrintConnection();
gcp.connect(username, password, "cloudprint",
"Cloud Print Test Client", null);
/*
* Register printer if not already present
*/
List<Printer> printers = gcp.list(printProxy);
if (printers.size() == 0) {
System.out.println("Registering Printer with Proxy "
+ printProxy);
gcp.register(printer, null);
} else {
printer.setId(printers.get(0).getId());
}
/*
* Refetch all printer info
*/
gcp.printer(printer);
System.out.println("Printer Name: " + printer.getName());
System.out.println("Printer ID: " + printer.getId());
System.out.println("---------------------------------------------");
processJobs(gcp, printer);
/*
* Wait for push notifications
*/
PushReceiver pr = new PushReceiver("Cloud-X API - Push Receiver");
pr.addListener(new PushListener() {
@Override
public void onReceive(String printerId) {
if (printerId.equals(printer.getId())) {
processJobs(gcp, printer);
}
}
@Override
public void onConnect() {
System.out.println("Connected to Google Talk!");
}
@Override
public void onDisconnect() {
// Do nothing
}
});
pr.connectPlain(username, password);
} catch (Exception e) {
e.printStackTrace();
}
}