From b157ef48437598f4c2d001ab627c65acdfbf22a8 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 15 Sep 2008 22:26:58 +0000 Subject: [PATCH] updated ChatClient, added run scripts and policies git-svn-id: svn://anubis/gvsu@141 45c1a28c-8058-47b2-ae61-ca45b979098e --- cs656/lab2/src/ChatClient.java | 113 ++++++++++++++++++++++-- cs656/lab2/src/PresenceServiceImpl.java | 5 +- cs656/lab2/src/client.policy | 3 + cs656/lab2/src/run_client.sh | 4 + cs656/lab2/src/run_server.sh | 7 ++ cs656/lab2/src/server.policy | 3 + 6 files changed, 129 insertions(+), 6 deletions(-) create mode 100644 cs656/lab2/src/client.policy create mode 100755 cs656/lab2/src/run_client.sh create mode 100755 cs656/lab2/src/run_server.sh create mode 100644 cs656/lab2/src/server.policy diff --git a/cs656/lab2/src/ChatClient.java b/cs656/lab2/src/ChatClient.java index 4dff0f3..08c7289 100644 --- a/cs656/lab2/src/ChatClient.java +++ b/cs656/lab2/src/ChatClient.java @@ -1,24 +1,127 @@ import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; -import java.math.BigDecimal; +import java.util.*; public class ChatClient { + private PresenceService myPServ; + private String myUserName; + private Thread myListenThread; + private ChatClientListener myListener; + + private class ChatClientListener implements Runnable + { + ServerSocket mySocket; + + public ChatClientListener() + { + mySocket = new ServerSocket(0); + } + + public int getPort() + { + return mySocket.getLocalPort(); + } + + public String getHost() + { + return mySocket.getInetAddress().getHostName(); + } + + public void run() + { + Socket s; + for (;;) + { + s = mySocket.accept(); + // TODO: create a handler thread + } + } + } + + public ChatClient(PresenceService pserv, String userName) + { + myPServ = pserv; + myUserName = userName; + } + + public void run() + { + myListener = new ChatClientListener(); + RegistrationInfo regInfo = + new RegistrationInfo(myUserName, + myListener.getHost(), + myListener.getPort(), + true); + try { + myPServ.register(regInfo); + } catch (Exception e) { + System.out.println("Exception caught when registering!"); + e.printStackTrace(); + return; + } + + /* Start a thread to listen for connections in */ + myListenThread = new Thread(myListener); + myListenThread.start(); + + mainloop(); + } + + private void mainloop() + { + BufferedReader br = new BufferedReader( + new InputStreamReader(System.in)); + String line; + while ( (line = br.readLine()) != null) + { + } + } + public static void main(String args[]) { + String user; + String host = "localhost"; + int port = 1099; + + if (args.length < 1) + { + System.err.println("Usage: ChatClient [host[:port]]"); + return; + } + + user = args[0]; + + if (args.length >= 2) + { + StringTokenizer st = new StringTokenizer(args[1], ":"); + if (st.hasMoreTokens()) + { + host = st.nextToken(); + if (st.hasMoreTokens()) + { + port = Integer.parseInt(st.nextToken()); + } + } + } + if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { - Registry registry = LocateRegistry.getRegistry(args[0]); + Registry registry = LocateRegistry.getRegistry(host, port); PresenceService pserv = (PresenceService) registry.lookup("PresenceService"); - Pi task = new Pi(Integer.parseInt(args[1])); - BigDecimal pi = comp.executeTask(task); - System.out.println(pi); + if (pserv == null) + { + System.err.println("Error: Could not connect to presence service"); + return; + } + ChatClient cc = new ChatClient(pserv, user); + cc.run(); } catch (Exception e) { diff --git a/cs656/lab2/src/PresenceServiceImpl.java b/cs656/lab2/src/PresenceServiceImpl.java index c434038..ecbd613 100644 --- a/cs656/lab2/src/PresenceServiceImpl.java +++ b/cs656/lab2/src/PresenceServiceImpl.java @@ -6,7 +6,8 @@ import java.rmi.server.UnicastRemoteObject; public class PresenceServiceImpl implements PresenceService { - private HashMap myRegisteredUsers; + private HashMap myRegisteredUsers = + new HashMap(); public PresenceServiceImpl() { @@ -17,11 +18,13 @@ public class PresenceServiceImpl implements PresenceService { if (!myRegisteredUsers.containsKey(reg.getUserName())) 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) diff --git a/cs656/lab2/src/client.policy b/cs656/lab2/src/client.policy new file mode 100644 index 0000000..09c097a --- /dev/null +++ b/cs656/lab2/src/client.policy @@ -0,0 +1,3 @@ +grant codeBase "file:/home/holtropj/cs656/lab2/src/" { + permission java.security.AllPermission; +}; diff --git a/cs656/lab2/src/run_client.sh b/cs656/lab2/src/run_client.sh new file mode 100755 index 0000000..2053e7d --- /dev/null +++ b/cs656/lab2/src/run_client.sh @@ -0,0 +1,4 @@ +java \ + -cp /home/holtropj/cs656/lab2/src \ + -Djava.security.policy=client.policy \ + ChatClient localhost diff --git a/cs656/lab2/src/run_server.sh b/cs656/lab2/src/run_server.sh new file mode 100755 index 0000000..dc340cc --- /dev/null +++ b/cs656/lab2/src/run_server.sh @@ -0,0 +1,7 @@ +rmiregistry & +java \ + -cp /home/holtropj/cs656/lab2/src \ + -Djava.rmi.server.hostname=localhost \ + -Djava.security.policy=server.policy \ + PresenceServiceImpl +pkill rmiregistry diff --git a/cs656/lab2/src/server.policy b/cs656/lab2/src/server.policy new file mode 100644 index 0000000..09c097a --- /dev/null +++ b/cs656/lab2/src/server.policy @@ -0,0 +1,3 @@ +grant codeBase "file:/home/holtropj/cs656/lab2/src/" { + permission java.security.AllPermission; +};