import javax.swing.*; import java.awt.*; import java.awt.event.*; //import GUI.class; public class GUI implements ActionListener { JFrame frame; //window JList userList; JScrollPane mainScrollPane,mainScrollPane1,userScrollPane; JTabbedPane contentPane; JPanel container; //JPanel - holds everything GridBagConstraints gbc; JEditorPane pane,pane1; JTextField inputField; DefaultListModel listModel; //menu vars JMenuBar menuBar; JMenu menuFile; JMenuItem menuFileExit; JMenu menuEdit; JMenuItem menuEditPreferences; public GUI(NET a) { /******************** Main Frame ********************/ JFrame.setDefaultLookAndFeelDecorated(false); frame = new JFrame("Jirk IRC Client"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 400); frame.setVisible(true); /******************** Menu ********************/ menuBar = new JMenuBar(); menuFile = new JMenu("FILE"); menuFileExit = new JMenuItem("Exit"); menuFileExit.setActionCommand("Exit"); menuFileExit.addActionListener(this); menuFile.add(menuFileExit); menuBar.add(menuFile); menuEdit = new JMenu("EDIT"); menuEditPreferences = new JMenuItem("Preferences"); menuEditPreferences.setActionCommand("Preferences"); menuEditPreferences.addActionListener(this); menuEdit.add(menuEditPreferences); menuBar.add(menuEdit); frame.setJMenuBar(menuBar); /******************** Main Content Panel ********************/ container = new JPanel(new GridBagLayout()); frame.setContentPane(container); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.weightx = .5; gbc.weighty = .5; contentPane = new JTabbedPane(); contentPane.setPreferredSize(new Dimension(500, 300)); pane = new JEditorPane(); pane.setEditable(false); mainScrollPane = new JScrollPane(pane); mainScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); //mainScrollPane.setPreferredSize(new Dimension(500, 300)); //mainScrollPane.setMinimumSize(new Dimension(10, 10)); pane1 = new JEditorPane(); pane1.setEditable(false); mainScrollPane1 = new JScrollPane(pane1); mainScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); //mainScrollPane1.setPreferredSize(new Dimension(500, 300)); //mainScrollPane1.setMinimumSize(new Dimension(10, 10)); contentPane.addTab("Raw", mainScrollPane); contentPane.addTab(NET.channel, mainScrollPane1); gbc.gridx = 0; gbc.gridy = 0; frame.getContentPane().add(contentPane, gbc); /******************** User List Panel ********************/ userList = new JList(); userList.setLayoutOrientation(JList.VERTICAL); userScrollPane = new JScrollPane(userList); userScrollPane.setPreferredSize(new Dimension(100, 300)); gbc.gridx = 1; gbc.gridy = 0; gbc.weightx = 0; gbc.weighty = .5; gbc.insets = new Insets(20, 5, 12, 5); gbc.fill = GridBagConstraints.VERTICAL; gbc.anchor = GridBagConstraints.LINE_END; frame.getContentPane().add(userScrollPane, gbc); /******************** Input Text Field ********************/ inputField = new JTextField(20); inputField.setActionCommand("inputField"); inputField.addActionListener(this); gbc.gridx = 0; gbc.gridy = 1; gbc.weightx = .5; gbc.weighty = 0; gbc.gridwidth = 2; gbc.insets = new Insets(0, 0, 0, 0); gbc.anchor = GridBagConstraints.PAGE_END; gbc.fill = GridBagConstraints.HORIZONTAL; frame.getContentPane().add(inputField, gbc); frame.pack(); } public void actionPerformed(ActionEvent event) { String cmd = event.getActionCommand(); if(cmd=="inputField"){ network.writer.write("PRIVMSG #wgb :" + textField.getText() + "\r\n"); network.writer.flush(); // pane1.setText(pane1.getText() + "<" + NET.nick + "> " + inputField.getText() + "\r\n"); // inputField.setText(""); }else if(cmd=="Exit"){ System.exit(0); }else if(cmd=="Preferences"){ pane.setText(pane.getText() + "Opening Prefs... Not really\r\n"); }else{ pane.setText(pane.getText() + "Unknown Event!\r\n"); } } } import java.io.*; import java.net.*; public class NET { static String server = "irc.freenode.net"; static String nick = "ubergosu"; static String login = "JirkJIRK"; static String channel = "#wgb"; Socket socket; BufferedWriter writer; BufferedReader reader; public NET() { try { Connect(); Login(); }catch(Exception e){ System.out.println(e.getMessage()); } } public void Connect() throws Exception,IOException { socket = new Socket(server, 6667); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream( ))); reader = new BufferedReader(new InputStreamReader(socket.getInputStream( ))); } public void Login() throws Exception,IOException { writer.write("NICK " + nick + "\r\n"); writer.write("USER " + login + " 8 * : Jirk\r\n"); writer.flush( ); } } import java.io.*; import java.net.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; //import GUI.class; public class Jirk { public static String version = "0.01"; String line; GUI gui; NET net; public Jirk() { gui = new GUI(); net = new NET(); } public void Loop() { try { while ((line = net.reader.readLine( )) != null) { if (line.indexOf("004") >= 0) { break; } else if (line.indexOf("433") >= 0) { gui.pane.setText(gui.pane.getText() + new String("Nickname already in use.\n")); return; } } net.writer.write("JOIN " + net.channel + "\r\n"); net.writer.flush( ); while ((line = net.reader.readLine( )) != null) { if (line.toLowerCase( ).startsWith("PING ")) { net.writer.write("PONG " + line.substring(5) + "\r\n"); net.writer.write("PRIVMSG " + net.channel + " :I got pinged!\r\n"); net.writer.flush( ); }else { gui.pane.setText(gui.pane.getText() + line + "\n"); } } } catch (IOException e) { System.out.println(e.getMessage()); } } public String getNick() { return net.nick; } public static void main(String[] args) { Jirk jirkClient = new Jirk(); jirkClient.Loop(); } }