import java.rmi.*; public interface Chat extends java.rmi.Remote { int signIn(String s, int i) throws java.rmi.RemoteException; void broadcast(String s,int i ) throws java.rmi.RemoteException; String getbroadcast() throws java.rmi.RemoteException; }
Server Side file: ChatImpl.java
import java.io.*; import java.util.*; import java.net.*; import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class ChatImpl extends UnicastRemoteObject implements Chat { private String name; String [] Users=new String[50]; String hold_last_message; public ChatImpl(String s) throws RemoteException { super(); name = s; } public int signIn(String s,int i) throws java.rmi.RemoteException{ boolean free_spot=false; int j=0; if(i==-1){ while((!free_spot)&(j<50)){ if(Users[j]==null){ Users[j]=s; free_spot=true; return j; } else j++; } return -1;//Connection refused } else{ Users[i]=null; return -1; } } public void broadcast(String s,int i) throws java.rmi.RemoteException {hold_last_message=Users[i]+": "+s; } public String getbroadcast() throws java.rmi.RemoteException {return hold_last_message;} public static void main(String args[]) { // Create and install a security manager System.setSecurityManager(new RMISecurityManager()); try { ChatImpl obj = new ChatImpl("ChatServer"); Naming.rebind("//www.umsl.edu/~siegel/wwwRMI/ChatServer", obj); System.out.println("ChatServer bound in registry"); } catch (Exception e) { System.out.println("ChatImpl err: " + e.getMessage()); } } }
file: ChatBoard.java
import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.rmi.*; public class ChatBoard extends Applet implements Runnable { int connection_slot=-1; boolean am_connected=false; Chat Chatobj; ActionTextField sign_in,say,hear; String chat_name; ActionButton connect,disconnect,chat; ActionLabel chat_label; ActionPanel CardHolder; Panel sign_in_panel,chat_panel,sign_in_text; Panel chat_text,sign_in_button,chat_button; public void init() { sign_in=new ActionTextField("signin"); say=new ActionTextField("Your Remarks Go Here"); hear=new ActionTextField("Others Will Use This Field"); hear.setEditable(false); connect =new ActionButton("connect"); disconnect =new ActionButton("disconnect"); chat =new ActionButton("chat"); sign_in_panel=new Panel(); chat_panel=new Panel(); sign_in_text=new Panel(); chat_text=new Panel(); sign_in_button=new Panel(); chat_button=new Panel(); // "The Applet panel" CardHolder=new ActionPanel(); chat_label=new ActionLabel("Sign In",Label.CENTER); setLayout(new BorderLayout()); add("Center",CardHolder); add("North",chat_label); CardHolder.setLayout(new CardLayout()); CardHolder.add("signin", sign_in_panel); CardHolder.add("chat",chat_panel); sign_in_panel.setLayout(new BorderLayout()); chat_panel.setLayout(new BorderLayout()); sign_in_panel.add("South",sign_in_button); sign_in_panel.add("Center",sign_in_text); chat_panel.add("South",chat_button); chat_panel.add("Center",chat_text); chat_text.setLayout(new BorderLayout()); sign_in_text.setLayout(new BorderLayout()); chat_text.add("North",say); chat_text.add("South",hear); sign_in_text.add("Center",sign_in); sign_in_button.add(connect); chat_button.add(disconnect); chat_button.add(chat); connect.addActionListener(sign_in); connect.addActionListener(chat_label); connect.addActionListener(CardHolder); disconnect.addActionListener(chat_label); disconnect.addActionListener(CardHolder); chat.addActionListener(say); chat_label.setText("Sign In"); System.out.println("In init"); try { Chatobj = (Chat)Naming.lookup("//www.umsl.edu/~siegel/wwwRMI/ChatServer"); } catch (Exception e) { System.out.println("ChatBoard: exception: " + e.getMessage()); } } public void start(){ System.out.println("in start"); new Thread(this).start(); } public void run(){ String get_message=" "; while(true){ if(am_connected){ try{ get_message=Chatobj.getbroadcast(); }catch(Exception e){} hear.setText(get_message); } try{ Thread.currentThread().sleep(1000); }catch(InterruptedException e){} } } class ActionButton extends Button implements ActionListener{ public ActionButton(String s){ super(s); } public void actionPerformed(ActionEvent evt){ String s=evt.getActionCommand(); } }//end of innerclass class ActionTextField extends TextField implements ActionListener{ String field_holder; public ActionTextField(String s){ super(s); } public void actionPerformed(ActionEvent evt){ String s=evt.getActionCommand(); field_holder=getText().trim(); if(s.equals("connect")){ if(field_holder.length()<4){ setText("Your Chat Name Must Be At Least 4 Letters"); } else { try{ System.out.println(connection_slot); connection_slot=Chatobj.signIn(field_holder,connection_slot); System.out.println(connection_slot); if(connection_slot>=0) am_connected=true; else setText("Connection Refused"); }catch(Exception e){} } } if(s.equals("chat")){ try{ Chatobj.broadcast(field_holder,connection_slot); } catch(Exception e){} } } } class ActionPanel extends Panel implements ActionListener{ public ActionPanel(){ super(); } public void actionPerformed(ActionEvent evt){ if(connection_slot>=0){ String s=evt.getActionCommand(); if((s.equals("disconnect"))|(s.equals("connect")&((sign_in.getText()).trim().length()>3))) ((CardLayout)getLayout()).next(this); if(s.equals("disconnect")){ try{Chatobj.signIn(" ",connection_slot);}catch(Exception e){} connection_slot=-1; } } } } class ActionLabel extends Label implements ActionListener{ public ActionLabel(String s,int i){ super(s,i); } public void actionPerformed(ActionEvent evt){ String s=evt.getActionCommand(); String hold=sign_in.getText(); if(s.equals("connect")&(connection_slot>=0))setText("Start Chatting"); if(s.equals("disconnect"))setText("Sign In"); } } }//end of class