/** @since Available in iOS 2.0 and later. */ public static CFNetServiceMonitor create(CFNetService theService, ClientCallback clientCB) { long refconId = CFNetServiceMonitor.refconId.getAndIncrement(); CFNetServiceClientContext context = new CFNetServiceClientContext(); context.info(refconId); synchronized (callbacks) { callbacks.put(refconId, clientCB); } CFNetServiceMonitor service = create(null, theService, new FunctionPtr(cbInvoke), context); if (service != null) service.localRefconId = refconId; return service; }
/*</members>*/ @Callback private static void cbInvoke( CFNetServiceMonitor monitor, CFNetService service, CFNetServiceMonitorType infoType, CFData data, CFStreamError.CFStreamErrorPtr error, @Pointer long refcon) { ClientCallback callback = null; synchronized (callbacks) { callback = callbacks.get(refcon); } CFStreamError err = null; if (error != null) err = error.get(); callback.invoke(monitor, service, infoType, data, err); }