import java.util.HashMap; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; public class PresenceServiceImpl implements PresenceService { private HashMap myRegisteredUsers = new HashMap(); public PresenceServiceImpl() { super(); } public void register(RegistrationInfo reg) { myRegisteredUsers.put(reg.getUserName(), reg); // System.out.println("register(): " + reg.getUserName() + ", " + reg.getHost() + ", " + reg.getPort() + ", " + reg.getStatus()); } public void unregister(String userName) { myRegisteredUsers.remove(userName); // System.out.println("unregister(): " + userName); } public RegistrationInfo lookup(String name) { return myRegisteredUsers.get(name); } public RegistrationInfo[] listRegisteredUsers() { return myRegisteredUsers.values().toArray(new RegistrationInfo[0]); } public static void main(String[] args) { int port = 1099; if (args.length >= 1) { port = Integer.parseInt(args[0]); } if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { PresenceServiceImpl impl = new PresenceServiceImpl(); PresenceService stub = (PresenceService) UnicastRemoteObject.exportObject(impl, 0); Registry registry = LocateRegistry.getRegistry(port); registry.rebind("PresenceService", stub); System.out.println("PresenceService bound"); } catch (Exception e) { System.err.println("PresenceServiceImpl exception:"); e.printStackTrace(); } } }