import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; /* Robert Meurlin Ett P2P program. JFinder OBSERVERA ej helt klar är just nu snarlik uppg4. Ska vara en program för filtilldelning a'la Direct Connect. Består sammalagt av 4 klasser. */ public class JFinder extends JFrame{ //pekare private InetAddress adress=null; private int portnr=2000; private MulticastSocket ms; private Sender sender; private Receiver receiver; private InterFaceHandler interfh; private String hostadress="", hostname=""; private JTextField searchString = new JTextField(30); JTextField messageField; private JTextArea names = new JTextArea(15, 80); private JButton findbutton = new JButton("Find"), sendButton, exitButton; private JButton getbutton = new JButton("Get"); //private ButtonGroup searchIn = new ButtonGroup(); private ButtonGroup searchFor = new ButtonGroup(); private JCheckBox exMatch = new JCheckBox("Exact Match", true); private JList resultatLista; private DefaultListModel listModel; private JScrollPane scroll; private JPanel commandPanel; //private S //tar också ett argument vid starten public JFinder(String[] args){ super("JFinder"); if (args.length == 0){ hostname = "anonym";} else if (args.length == 1){ hostname =args[0]; } Container pane = this.getContentPane(); Font f = new Font("Monospaced", Font.PLAIN, 12); names.setFont(f); JPanel cPanel = new JPanel(); cPanel.setLayout(new GridLayout(1, 1, 10, 10)); JScrollPane jsp = new JScrollPane(names); cPanel.add(jsp); pane.add("Center", cPanel); JPanel northPanel = new JPanel(); JPanel northPanelTop = new JPanel(); northPanelTop.setLayout(new FlowLayout(FlowLayout.LEFT)); northPanelTop.add(new JLabel("Filnamn: ")); northPanelTop.add("North", searchString); northPanelTop.add(exMatch); northPanelTop.add(findbutton); northPanelTop.add(getbutton); northPanel.setLayout(new BorderLayout(2,1)); northPanel.add("North", northPanelTop); JPanel noBottom = new JPanel(); noBottom.setLayout(new GridLayout(1,3,5,5)); noBottom.add(initRecordType()); noBottom.add(initUserChoice()); northPanel.add("Center", noBottom); pane.add("North", northPanel); sendButton = new JButton("Send"); exitButton = new JButton("Exit"); commandPanel = new JPanel(); messageField = new JTextField(20); //messageField.addActionListener(listener); commandPanel.add(new JLabel("Chat: ")); commandPanel.add(messageField); //sendButton.addActionListener(listener); commandPanel.add(sendButton); //exitButton.addActionListener(listener); commandPanel.add(exitButton); pane.add(commandPanel, BorderLayout.SOUTH); Exit closing = new Exit(); exitButton.addActionListener(closing); SendMe sendme = new SendMe(); sendButton.addActionListener(sendme); show(); connect(); }//public JFinder //knapparna för sökning, radioknappar klickbara private JPanel initRecordType() { JPanel p = new JPanel(); p.setLayout(new GridLayout(6, 2, 5, 2)); p.add(new JLabel("Search for")); p.add(new JLabel("")); JRadioButton all = new JRadioButton("All", true); all.setActionCommand("All"); searchFor.add(all); p.add(all); p.add(this.makeRadioButton("Audio")); p.add(this.makeRadioButton("Video")); p.add(this.makeRadioButton("Images")); p.add(this.makeRadioButton("SoftWare")); p.add(this.makeRadioButton("Documents")); return p; } //Gör själva radionknappen. private JRadioButton makeRadioButton(String label) { JRadioButton button = new JRadioButton(label, false); button.setActionCommand(label); searchFor.add(button); return button; } //Sökresultaten private JPanel initUserChoice() { JPanel p = new JPanel(); p.setLayout(new GridLayout(6, 1, 5, 2)); p.add(new JLabel("Search results: ")); listModel = new DefaultListModel(); resultatLista = new JList(listModel); resultatLista.setFixedCellWidth(50); scroll = new JScrollPane(resultatLista); p.add(resultatLista); return p; } //snarlik som uppg 4's connect metod private synchronized void connect(){ try{ //ny multicast:: ms = new MulticastSocket(portnr); hostadress = ms.getInetAddress().getLocalHost().getHostAddress(); adress = InetAddress.getByName("234.235.236.237"); System.out.println("ansluten till: " + adress.getHostAddress()); //lägg in klienterna!! ms.joinGroup(adress); sender = new Sender(ms, this); receiver = new Receiver(ms, this); interfh = new InterFaceHandler(receiver,this); }catch (IOException e){ ShutDown(); } //setStatus("broadcastar meddelandet var 5 sek"); } /*public metoder för de yttre klasserna att anropa 4 ST !!*/ public String getHostName(){ return hostname; } public String getHostA(){ return hostadress; } public InetAddress getInet(){ return adress; } public int getPort(){ return portnr; } //lägg ut i textarean. protected void logg(String mess){ names.setText(""); names.append(mess); names.setCaretPosition(names.getText().length()); } private void setStatus(String mess){ //lägg in text i textarean!! //names.setText(mess); } public String hamtaText(){ String mess = messageField.getText().trim(); return mess; } public void ShutDown(){ //stäng av trådarna mha deras resp setOffline() metod i dom inre klassernet receiver.setOffline(); sender.setOffline(); interfh.setOffline(); System.exit(7); } public static void main(String[] args) { JFinder jfinder = new JFinder(args); jfinder.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); jfinder.pack(); //jfinder. } class Exit extends WindowAdapter implements ActionListener{ public void actionPerformed(ActionEvent ae){ doit(); } void doit(){ System.exit(0); } } class SendMe extends WindowAdapter implements ActionListener{ public void actionPerformed(ActionEvent aie){ } } }