📄 registrationimpl.java
字号:
/* RegistrationImpl.java
*
* Contains the implementation of the remote Registration object which is
* used by CamProcessors and CamControllers to register with the MediaServer.
* Also contains event notification for MediaServer so it can update its
* GUI when CamProcessors and CamControllers go up and down.
*
* Copyright (C) 2002 by Frank McCown
* University of Arkansas at Little Rock
* July 2002
*
*/
import java.util.*;
import rowc.*;
import rowc.event.*;
import rowc.event.WebCamListener;
import rowc.event.CamControllerListener;
public class RegistrationImpl extends rowc.RegistrationPOA
{
protected Hashtable camControllers; // CamControllers listening for new CamProcessors
protected Vector webCamList;
protected String serverHostName = null;
private Set webCamListeners; // Listeners for WebCamEvents
private Set controllerListeners;
/**************************************************************************/
public RegistrationImpl()
{
webCamListeners = new HashSet(1); // Only Media Server should get events
controllerListeners = new HashSet();
camControllers = new Hashtable();
webCamList = new Vector();
}
public void addWebCamListener(WebCamListener listener)
{
webCamListeners.add(listener); // Register the listener
}
// Iterate through list of NewWebCamListeners and generate a new event for each
private void sendAddWebCamEvents(String location)
{
Iterator i = webCamListeners.iterator();
while (i.hasNext())
{
WebCamListener listener = (WebCamListener) i.next();
listener.addWebCam(new rowc.event.WebCamEvent(location));
}
}
private void sendRemoveWebCamEvents(String location)
{
Iterator i = webCamListeners.iterator();
while (i.hasNext())
{
WebCamListener listener = (WebCamListener) i.next();
listener.removeWebCam(new rowc.event.WebCamEvent(location));
}
}
public void addCamControllerListener(CamControllerListener listener)
{
controllerListeners.add(listener); // Register the listener
}
private void sendAddControllerEvents(String name)
{
Iterator i = controllerListeners.iterator();
while (i.hasNext())
{
CamControllerListener listener = (CamControllerListener) i.next();
listener.addCamController(new rowc.event.CamControllerEvent(name));
}
}
private void sendRemoveControllerEvents(String name)
{
Iterator i = controllerListeners.iterator();
while (i.hasNext())
{
CamControllerListener listener = (CamControllerListener) i.next();
listener.removeCamController(new rowc.event.CamControllerEvent(name));
}
}
/***************************************************************************
*
* Remote method implementations
*
***************************************************************************/
// Notify Server of cam controller so Server can notify it when web cams come up and down
public synchronized void addCamController(String hostName, CamControllerCallback callback)
{
System.out.println("addCamController called.");
camControllers.put(hostName, callback);
sendAddControllerEvents(hostName);
}
// Tell Server that we're going down so we don't continue to get notifications
public synchronized void removeCamController(String hostName)
{
System.out.println("removeCamController called.");
camControllers.remove(hostName);
sendRemoveControllerEvents(hostName);
}
// Notify Server of new web cam so Cam Controllers know we're ready
public synchronized void addWebCam(String location)
{
// Add new web cam to list
webCamList.add(location);
Enumeration enum = camControllers.elements();
System.out.println("Notifying all cam controllers of new web cam: " + location);
while(enum.hasMoreElements())
{
CamControllerCallback callback = (CamControllerCallback)enum.nextElement();
callback.addWebCam(location);
}
// Notify MediaServer so it can update it's GUI
sendAddWebCamEvents(location);
}
// Notify Server we're going down so Cam Controllers don't try to access us
public synchronized void removeWebCam(String location)
{
// Remove web cam from list
webCamList.remove(location);
Enumeration enum = camControllers.elements();
System.out.println("Notifying all cam controllers to remove web cam: " + location);
while(enum.hasMoreElements())
{
CamControllerCallback callback = (CamControllerCallback)enum.nextElement();
callback.removeWebCam(location);
}
// Notify MediaServer so it can update it's GUI
sendRemoveWebCamEvents(location);
}
// Media Server must set it's host name so CamProcessor can connect using sockets
/* public synchronized void setServerHostName(String host)
{
serverHostName = host;
}
*/
// Return Media Server's host name
public synchronized String getServerHostName()
{
String serverHostName = "";
try
{
java.net.InetAddress ia = java.net.InetAddress.getLocalHost();
String host = ia.getHostName();
}
catch (java.net.UnknownHostException ex)
{
ex.printStackTrace();
}
return serverHostName;
}
// Return location names of active web cams, empty array of size 1 if none available
public synchronized String[] getLocations()
{
String[] loc = {""};
if (webCamList.size() != 0)
{
loc = new String[webCamList.size()];
webCamList.copyInto(loc);
}
return loc;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -