/*Robert Meurlin Server som fungerar utmärkt tillsammans med uppgift 3A. här kan man också starta med argument portnr java Server 2003 där 2003 är portnr OBS detta är main-class!!! */ import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; import java.net.*; import java.io.*; /* Server class som behöver 2 andra yttre klasser för att fungera(klienthandler och klient och så behöver den en klientinterface(uppg 3a) för att kunnas testas med. Startas genom att ge argument vid kommandoraden där man kan bestämma portnr. */ public class Server extends JFrame{ private JTextArea utskrift; private JLabel anslutna; private ServerSocket server; private KlientHandler handler; //private Klient klient; private String serverName=""; int port=2000; public Server(String[] args){ if (args.length==1){ int portNo=Integer.parseInt(args[0]); if (portNo>1023 && portNo<65536){ port=portNo; } } //grafiken addWindowListener(new Exit()); utskrift=new JTextArea(); JScrollPane scroll=new JScrollPane(utskrift); getContentPane().add(scroll, BorderLayout.CENTER); anslutna = new JLabel(); JPanel statusBar = new JPanel(); statusBar.add(anslutna); getContentPane().add(statusBar, BorderLayout.SOUTH); setSize(500,400); show(); connect(port); }//public Server() /*connect metod som skapar själva Servern där det finns en räknare laggtillklient som håller reda på antalet ansluta till Servern. Startar KlientHandlern som tar emot ServerSocketen och Server klassen. startar även dens run metod */ protected void connect(int port){ try { //starta en server socket på aktuell portnr server = new ServerSocket(port); serverName=server.getInetAddress().getLocalHost().getHostAddress(); //uppdatera antalet klienter i status listan. laggTillKlient(0); //skicka med server-socketen och Sever till ett prog som tar hand om signalerna. handler = new KlientHandler(server, this); handler.start(); } catch(IOException e){ System.out.println("Server offline!!"); } System.out.println("Server online!"); } /*uppdaterar antalet användare i titel raden, plussas hela tiden på finns en metod som också tar bort användare om dom kopplar ner sig */ protected void laggTillKlient(int ant){ setTitle(" - Server: "+serverName+":"+port+" , Clients: "+ant); } /*Lägger ut meddelande om det inte slutar med ny rad läggs det till sen lägger den meddelandet i utskrift arean.*/ protected void logg(String message){ if(!message.endsWith("\n")) message=message+"\n"; utskrift.append(message); utskrift.setCaretPosition(utskrift.getText().length()); } /*avslutar om användaren trycker på krysset i högra hörnet. stänger ner KlientHandlern's run metod med hjälp av setoffline. */ class Exit extends WindowAdapter{ public void windowClosing(WindowEvent e){ handler.setOffline(); System.exit(0); } } /*startar Servern från command.com med hjälp av bla med hjälp av argument vektorn */ public static void main(String[] args){ new Server(args); } }//Server