1 /* -*- Mode: Java; tab-width: 4 -*- 2 * 3 * Copyright (c) 2004 Apple Computer, Inc. All rights reserved. 4 * 5 * Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. 6 * ("Apple") in consideration of your agreement to the following terms, and your 7 * use, installation, modification or redistribution of this Apple software 8 * constitutes acceptance of these terms. If you do not agree with these terms, 9 * please do not use, install, modify or redistribute this Apple software. 10 * 11 * In consideration of your agreement to abide by the following terms, and subject 12 * to these terms, Apple grants you a personal, non-exclusive license, under Apple's 13 * copyrights in this original Apple software (the "Apple Software"), to use, 14 * reproduce, modify and redistribute the Apple Software, with or without 15 * modifications, in source and/or binary forms; provided that if you redistribute 16 * the Apple Software in its entirety and without modifications, you must retain 17 * this notice and the following text and disclaimers in all such redistributions of 18 * the Apple Software. Neither the name, trademarks, service marks or logos of 19 * Apple Computer, Inc. may be used to endorse or promote products derived from the 20 * Apple Software without specific prior written permission from Apple. Except as 21 * expressly stated in this notice, no other rights or licenses, express or implied, 22 * are granted by Apple herein, including but not limited to any patent rights that 23 * may be infringed by your derivative works or by other works in which the Apple 24 * Software may be incorporated. 25 * 26 * The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO 27 * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED 28 * WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29 * PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN 30 * COMBINATION WITH YOUR PRODUCTS. 31 * 32 * IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR 33 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 34 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION 36 * OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT 37 * (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN 38 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 39 40 ident "%Z%%M% %I% %E% SMI" 41 42 */ 43 44 import javax.swing.*; 45 import com.apple.dnssd.*; 46 47 48 /** Use this to schedule BrowseListener callbacks via SwingUtilities.invokeAndWait(). */ 49 50 public class SwingBrowseListener implements Runnable, BrowseListener 51 { 52 /** Create a listener for DNSSD that will call your listener on the Swing/AWT event thread. */ SwingBrowseListener( BrowseListener listener)53 public SwingBrowseListener( BrowseListener listener) 54 { fListener = listener; fErrorCode = 0; } 55 56 /** (Clients should not call this method directly.) */ operationFailed( DNSSDService service, int errorCode)57 public void operationFailed( DNSSDService service, int errorCode) 58 { 59 fBrowser = service; 60 fErrorCode = errorCode; 61 this.schedule(); 62 } 63 64 /** (Clients should not call this method directly.) */ serviceFound( DNSSDService browser, int flags, int ifIndex, String serviceName, String regType, String domain)65 public void serviceFound( DNSSDService browser, int flags, int ifIndex, 66 String serviceName, String regType, String domain) 67 68 { 69 fBrowser = browser; 70 fIsAdd = true; 71 fFlags = flags; 72 fIndex = ifIndex; 73 fService = serviceName; 74 fRegType = regType; 75 fDomain = domain; 76 this.schedule(); 77 } 78 79 /** (Clients should not call this method directly.) */ serviceLost( DNSSDService browser, int flags, int ifIndex, String serviceName, String regType, String domain)80 public void serviceLost( DNSSDService browser, int flags, int ifIndex, 81 String serviceName, String regType, String domain) 82 { 83 fBrowser = browser; 84 fIsAdd = false; 85 fFlags = flags; 86 fIndex = ifIndex; 87 fService = serviceName; 88 fRegType = regType; 89 fDomain = domain; 90 this.schedule(); 91 } 92 93 /** (Clients should not call this method directly.) */ run()94 public void run() 95 { 96 if ( fErrorCode != 0) 97 fListener.operationFailed( fBrowser, fErrorCode); 98 else if ( fIsAdd) 99 fListener.serviceFound( fBrowser, fFlags, fIndex, fService, fRegType, fDomain); 100 else 101 fListener.serviceLost( fBrowser, fFlags, fIndex, fService, fRegType, fDomain); 102 } 103 schedule()104 protected void schedule() 105 { 106 try { 107 SwingUtilities.invokeAndWait( this); 108 } 109 catch ( Exception e) 110 { 111 e.printStackTrace(); 112 } 113 } 114 115 protected BrowseListener fListener; 116 117 protected boolean fIsAdd; 118 protected DNSSDService fBrowser; 119 protected int fFlags; 120 protected int fIndex; 121 protected int fErrorCode; 122 protected String fService; 123 protected String fRegType; 124 protected String fDomain; 125 } 126 127