filled out ChatClient

git-svn-id: svn://anubis/gvsu@143 45c1a28c-8058-47b2-ae61-ca45b979098e
This commit is contained in:
josh 2008-09-18 00:54:32 +00:00
parent 005fb6efdd
commit 5e40fee749

View File

@ -2,6 +2,8 @@
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.*;
import java.io.*;
import java.net.*;
public class ChatClient
{
@ -16,9 +18,18 @@ public class ChatClient
ServerSocket mySocket;
public ChatClientListener()
{
try
{
mySocket = new ServerSocket(0);
}
catch (Exception e)
{
System.err.println("Error creating listener thread!");
e.printStackTrace();
System.exit(-1);
}
}
public int getPort()
{
@ -34,9 +45,45 @@ public class ChatClient
{
Socket s;
for (;;)
{
try
{
s = mySocket.accept();
// TODO: create a handler thread
Thread cclt = new Thread(new ChatClientListenerThread(s));
cclt.start();
}
catch (Exception e)
{
}
}
}
public class ChatClientListenerThread implements Runnable
{
Socket mySocket;
public ChatClientListenerThread(Socket s)
{
mySocket = s;
}
public void run()
{
try
{
InputStream is = mySocket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (!mySocket.isClosed())
{
/* read and print a message from a peer */
String in = br.readLine();
System.out.println(in);
}
}
catch (Exception e)
{
return;
}
}
}
}
@ -96,8 +143,14 @@ public class ChatClient
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String line;
while ( (line = br.readLine()) != null)
try
{
for (;;)
{
System.out.print("> ");
line = br.readLine();
if (line == null)
break;
line = line.trim();
if (line.equals(""))
continue;
@ -118,25 +171,120 @@ public class ChatClient
if (command.equals("help") || command.equals("?"))
{
System.out.println("Commands:\n");
System.out.println(" quit - disconnect and exit program");
System.out.println(" friends - view a list of all peers on the system");
}
else if (command.equals("quit"))
{
// TODO: shut down listen thread
break;
System.out.println(" talk {username} {message} - send message to username");
System.out.println(" broadcast {message} - send message to every available user");
System.out.println(" busy - set status to busy/away");
System.out.println(" available - set status to busy/away");
System.out.println(" exit - disconnect and exit program");
}
else if (command.equals("friends"))
{
RegistrationInfo[] friends = myPServ.listRegisteredUsers();
System.out.println("Registered Users:");
for (RegistrationInfo ri : friends)
{
System.out.print(ri.getUserName());
System.out.print(" [");
System.out.print(ri.getStatus() ? "available" : "busy");
System.out.println("]");
}
}
else if (command.equals("talk"))
{
String user = "";
int idx;
if ((idx = rest.indexOf(' ')) > 0)
{
user = rest.substring(0, idx);
RegistrationInfo ri = myPServ.lookup(user);
String message = rest.substring(idx + 1);
sendUserMessage(user, message);
}
else
{
System.out.println("Syntax: talk {user} {message}");
}
}
else if (command.equals("broadcast"))
{
RegistrationInfo[] ris = myPServ.listRegisteredUsers();
for (RegistrationInfo ri : ris)
{
if (!ri.getUserName().equals(myUserName))
{
sendUserMessage(ri.getUserName(), rest);
}
}
}
else if (command.equals("busy"))
{
if (myRegistrationInfo.getStatus())
{
myRegistrationInfo = new RegistrationInfo(
myRegistrationInfo.getUserName(),
myRegistrationInfo.getHost(),
myRegistrationInfo.getPort(),
false
);
unregister();
register();
}
}
else if (command.equals("available"))
{
if (!myRegistrationInfo.getStatus())
{
myRegistrationInfo = new RegistrationInfo(
myRegistrationInfo.getUserName(),
myRegistrationInfo.getHost(),
myRegistrationInfo.getPort(),
true
);
unregister();
register();
}
}
else if (command.equals("exit"))
{
myListenThread.interrupt();
break;
}
else
{
System.out.println("Unrecognized Command! Type 'help' or '?' for help!");
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
System.exit(0);
}
private void sendUserMessage(String user, String message)
{
try
{
RegistrationInfo ri = myPServ.lookup(user);
if (ri != null)
{
Socket s = new Socket(InetAddress.getByName(ri.getHost()),
ri.getPort());
OutputStream os = s.getOutputStream();
message = myUserName + ": " + message;
os.write(message.getBytes());
s.close();
}
}
catch (Exception e)
{
System.err.println("Error sending message");
e.printStackTrace();
}
}
public static void main(String args[])
{
String user;
@ -150,6 +298,7 @@ public class ChatClient
}
user = args[0];
user = user.replace(' ', '_');
if (args.length >= 2)
{