Go to the documentation of this file.00001
00002
00003
00004
00005 package com.phidgets;
00006
00007 import com.phidgets.event.*;
00008
00009 import java.util.Iterator;
00010 import java.util.LinkedList;
00011 import java.util.Vector;
00012
00024 public class Manager
00025 {
00026 private Vector phidgets;
00027
00028 static
00029 {
00030 try
00031 {
00032 System.loadLibrary("phidget21");
00033 }
00034 catch(UnsatisfiedLinkError ex)
00035 {
00036 String os = System.getProperty("os.name");
00037 if(os.startsWith("Linux"))
00038 {
00039 throw new ExceptionInInitializerError(ex.getMessage()
00040 +"\nCould not locate the Phidget C library (libphidget21.so)."
00041 +"\nMake sure it is installed, and add it's path to LD_LIBRARY_PATH.");
00042 }
00043 else if(os.startsWith("Windows"))
00044 {
00045 throw new ExceptionInInitializerError(ex.getMessage()
00046 +"\nCould not locate the Phidget C library."
00047 +"\nThe Windows Phidget21 MSI must be installed.");
00048 }
00049 else if(os.startsWith("Mac"))
00050 {
00051 throw new ExceptionInInitializerError(ex.getMessage()
00052 +"\nCould not locate the Phidget C library."
00053 +"\nThe Mac Phidget21 DMG must be installed.");
00054 }
00055 else
00056 {
00057 throw new ExceptionInInitializerError(ex.getMessage()
00058 +"\nCould not locate the Phidget C library.");
00059 }
00060 }
00061 }
00062
00063 private long handle = 0;
00069 public Manager() throws PhidgetException
00070 {
00071 handle = create();
00072 phidgets = new Vector();
00073 addAttachListener(new AttachListener()
00074 {
00075 public void attached(AttachEvent ae)
00076 {
00077 phidgets.add(ae.getSource());
00078 }
00079 });
00080 addDetachListener(new DetachListener()
00081 {
00082 public void detached(DetachEvent ae)
00083 {
00084 phidgets.remove(ae.getSource());
00085 }
00086 });
00087 }
00088 private final native long create() throws PhidgetException;
00089
00096 public final native String getServerAddress() throws PhidgetException;
00104 public final native String getServerID() throws PhidgetException;
00111 public final native int getServerPort() throws PhidgetException;
00118 public final native boolean isAttached() throws PhidgetException;
00119
00128 public final native boolean isAttachedToServer() throws PhidgetException;
00129
00130 private final native void nativeClose() throws PhidgetException;
00131 private final native void nativeDelete() throws PhidgetException;
00132 private final native void nativeOpen() throws PhidgetException;
00133 private final native void nativeOpenRemote(String serverID, String pass) throws PhidgetException;
00134 private final native void nativeOpenRemoteIP(String ipAddress, int port, String pass) throws PhidgetException;
00135
00141 public final void open() throws PhidgetException {
00142 enableEvents(true);
00143 nativeOpen();
00144 }
00151 public final void open(String ipAddress, int port, String password) throws PhidgetException
00152 {
00153 enableEvents(true);
00154 nativeOpenRemoteIP(ipAddress, port, password);
00155 }
00165 public final void open(String ipAddress, int port) throws PhidgetException
00166 {
00167 enableEvents(true);
00168 nativeOpenRemoteIP(ipAddress, port, "");
00169 }
00176 public final void open(String serverID, String password) throws PhidgetException
00177 {
00178 enableEvents(true);
00179 nativeOpenRemote(serverID, password);
00180 }
00190 public final void open(String serverID) throws PhidgetException
00191 {
00192 enableEvents(true);
00193 nativeOpenRemote(serverID, "");
00194 }
00195
00201 public final void close() throws PhidgetException {
00202 enableEvents(false);
00203 nativeClose();
00204 }
00205
00206 private void enableEvents(boolean b)
00207 {
00208 enableManagerAttachEvents(b && attachListeners.size() > 0);
00209 enableManagerDetachEvents(b && detachListeners.size() > 0);
00210 enableServerConnectEvents(b && serverConnectListeners.size() > 0);
00211 enableServerDisconnectEvents(b && serverDisconnectListeners.size() > 0);
00212 }
00213
00214 private LinkedList attachListeners = new LinkedList();
00215 private long nativeAttachHandler = 0;
00216
00225 public final void addAttachListener(AttachListener l) {
00226 synchronized (attachListeners) {
00227 attachListeners.add(l);
00228 enableManagerAttachEvents(true);
00229 }
00230 }
00231
00235 public final void removeAttachListener(AttachListener l) {
00236 synchronized (attachListeners) {
00237 attachListeners.remove(l);
00238 enableManagerAttachEvents(attachListeners.size() > 0);
00239 }
00240 }
00241 private void fireAttach(AttachEvent e) {
00242 synchronized (attachListeners) {
00243 for (Iterator it = attachListeners.iterator();
00244 it.hasNext(); )
00245 ((AttachListener)it.next()).attached(e);
00246 }
00247 }
00248 private native void enableManagerAttachEvents(boolean b);
00249
00250 private LinkedList detachListeners = new LinkedList();
00251 private long nativeDetachHandler = 0;
00252
00261 public final void addDetachListener(DetachListener l) {
00262 synchronized (detachListeners) {
00263 detachListeners.add(l);
00264 enableManagerDetachEvents(true);
00265 }
00266 }
00267
00271 public final void removeDetachListener(DetachListener l) {
00272 synchronized (detachListeners) {
00273 detachListeners.remove(l);
00274 enableManagerDetachEvents(detachListeners.size() > 0);
00275 }
00276 }
00277 private void fireDetach(DetachEvent e) {
00278 synchronized (detachListeners) {
00279 for (Iterator it = detachListeners.iterator();
00280 it.hasNext(); )
00281 ((DetachListener)it.next()).detached(e);
00282 }
00283 }
00284 private native void enableManagerDetachEvents(boolean b);
00285
00286 private LinkedList serverConnectListeners = new LinkedList();
00287 private long nativeServerConnectHandler = 0;
00288
00296 public final void addServerConnectListener(ServerConnectListener l)
00297 {
00298 synchronized (serverConnectListeners)
00299 {
00300 serverConnectListeners.add(l);
00301 enableServerConnectEvents(true);
00302 }
00303 }
00304
00308 public final void removeServerConnectListener(ServerConnectListener l)
00309 {
00310 synchronized (serverConnectListeners)
00311 {
00312 serverConnectListeners.remove(l);
00313 enableServerConnectEvents(serverConnectListeners.size() > 0);
00314 }
00315 }
00316 private void fireServerConnect(ServerConnectEvent e)
00317 {
00318 synchronized (serverConnectListeners)
00319 {
00320 for (Iterator it = serverConnectListeners.iterator();
00321 it.hasNext(); )
00322 ((ServerConnectListener)it.next()).serverConnected(e);
00323 }
00324 }
00325 private native void enableServerConnectEvents(boolean b);
00326
00327
00328 private LinkedList serverDisconnectListeners = new LinkedList();
00329 private long nativeServerDisconnectHandler = 0;
00330
00338 public final void addServerDisconnectListener(ServerDisconnectListener l)
00339 {
00340 synchronized (serverDisconnectListeners)
00341 {
00342 serverDisconnectListeners.add(l);
00343 enableServerDisconnectEvents(true);
00344 }
00345 }
00346
00350 public final void removeServerDisconnectListener(ServerDisconnectListener l)
00351 {
00352 synchronized (serverDisconnectListeners)
00353 {
00354 serverDisconnectListeners.remove(l);
00355 enableServerDisconnectEvents(serverDisconnectListeners.size() > 0);
00356 }
00357 }
00358 private void fireServerDisconnect(ServerDisconnectEvent e)
00359 {
00360 synchronized (serverDisconnectListeners)
00361 {
00362 for (Iterator it = serverDisconnectListeners.iterator();
00363 it.hasNext(); )
00364 ((ServerDisconnectListener)it.next()).serverDisconnected(e);
00365 }
00366 }
00367 private native void enableServerDisconnectEvents(boolean b);
00368
00369 protected void finalize() throws Throwable
00370 {
00371 try
00372 {
00373 close();
00374 } catch (Exception e) {
00375 ;
00376 }
00377 try
00378 {
00379 nativeDelete();
00380 }
00381 catch (Exception e)
00382 {
00383 ;
00384 }
00385 finally{
00386 handle = 0;
00387 super.finalize();
00388 }
00389 }
00390
00394 public String toString()
00395 {
00396 return "PhidgetManager: ";
00397 }
00398
00404 public Vector getPhidgets()
00405 {
00406 return phidgets;
00407 }
00408 }