/* * OnLine.java * * Created on den 4 september 2001, 16:19 */ package ip1.u4.onLine; import java.util.*; import java.net.*; import ip1.u4.net.*; import java.io.*; /** */ public class OnLine { private static String address = "234.235.236.237"; private static int port = 2000; private static int period = 1000; private String message; private OnLineGUI gui = null; private PeriodicMulticastSender sender; private MulticastReceiver multicastReceiver = null; private Set users = null; private boolean running; /** Skapar nytt OnLine objekt. Detta sänder sedan periodiskt ut * name adressen samt comment på en förbestämd * multicastadress. OnLine tar också emot motsvarande meddelanden från * andra användare och visar vilka som för tillfället är uppkopplade., * @param name Det namn användaren vill göra sig känd under. * @param comment användardefinierad kommentar. */ public OnLine(String name, String comment) { try { gui = new OnLineGUI(this); message = "From: " + name + " Host: " + InetAddress.getLocalHost().getHostAddress() + " Comment: " + comment; users = new HashSet(); running = true; new UpdateUsers(); OnLineDatagramReceiver receiver = new OnLineDatagramReceiver(this); multicastReceiver = new MulticastReceiver(InetAddress.getByName(address), port, receiver); sender = new PeriodicMulticastSender(InetAddress.getByName(address), port, period, message); sender.start(); gui.uppdateTitle(address, port); } catch(UnknownHostException e) { System.err.println(e); System.exit(1); } catch(IOException e) { System.err.println(e); System.exit(1); } } /** main. Skapar nytt OnLine-objekt genom att kalla på * {@link OnLine(String,String) OnLine}. * @param args kommandoradsargumenten */ public static void main (String args[]) { new OnLine(args[0], args[1]); } /** Lägg till uppsnappad användare att visa upp som uppkopplad i guiet. * @param user användare */ synchronized protected void addUser(User user) { users.add(user); } synchronized private void updateUsers() { gui.uppdateUsers(users.toArray()); users.clear(); } /** Avslutar OnLine applikationen. Ber öppna mottagare och sändare att * stänga sig och se till att inga oppna trådar hänger kvar. */ protected void close() { sender.stop(); multicastReceiver.close(); running = false; System.exit(0); } /** Inre klass, implementerar Runnable. Uppdaterar guiet med uppkopplade * användare var femte sekund. */ private class UpdateUsers implements Runnable { private int period = 5000; private Thread thread; /** ber guiet att visa upp vilka användare som finns uppkopplade. */ UpdateUsers() { thread = new Thread(this); thread.start(); } public void run() { while(running) { try { updateUsers(); thread.sleep(period); } catch(InterruptedException e) { System.err.println(e); } } } } }