import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.*; import java.util.zip.*; public class Client extends JFrame implements Runnable { private Thread thread = new Thread(this); private boolean running = true; private Socket s = null; private ObjectInputStream in = null; private ObjectOutputStream out = null; private static String host = "atlas.dsv.su.se"; private static int port = 4949; private Sound sound = new Sound(); private JButton recordButton = new JButton("Record"); private JButton stopButton = new JButton("Stop&Send"); public static void main(String args[]) { if(args.length != 0) { host = args[0]; if(args.length != 1) { port = Integer.parseInt(args[1]); } } new Client(); } public Client() { setDefaultCloseOperation(EXIT_ON_CLOSE); recordButton.setEnabled(true); stopButton.setEnabled(false); recordButton.addActionListener(new LRecord()); stopButton.addActionListener(new LStop()); getContentPane().setLayout(new GridLayout()); getContentPane().add(recordButton); getContentPane().add(stopButton); pack(); show(); try { s = new Socket(host, port); setTitle("CONNECTED TO: " + host + " - ON PORT: " + port); out = new ObjectOutputStream(s.getOutputStream()); } catch (IOException ioe) { System.out.println("COULD NOT CONNECT: "+ ioe); System.exit(1); } thread.start(); } public void run() { while(running) { try { System.out.println("Waiting for or receiving ZIP-compressed sound object!"); // Obs! Detta måste vara här!!! in = new ObjectInputStream(s.getInputStream()); Storage storage = (Storage)in.readObject(); System.out.println("Received ZIP-compressed sound object, size: " + storage.getData().length); // Dekomrimera (annars blir det vitt brus :-)! System.out.println("ZIP-decompressing!"); Inflater decompresser = new Inflater(); decompresser.setInput(storage.getData(), 0, storage.getData().length); byte[] result = new byte[2 * storage.getData().length]; int resultLength = decompresser.inflate(result); decompresser.end(); byte[] newData = new byte[resultLength]; for(int i = 0; i < resultLength; i++) newData[i] = result[i]; System.out.println("ZIP-decompression done, size: " + newData.length); System.out.println("Playing sound!"); sound.load(new Storage(newData)); sound.play(); } catch(Exception e) { } } } class LRecord implements ActionListener { public void actionPerformed(ActionEvent e) { recordButton.setEnabled(false); stopButton.setEnabled(true); System.out.println("Recording sound!"); sound.record(); } } class LStop implements ActionListener { public void actionPerformed(ActionEvent e) { recordButton.setEnabled(true); stopButton.setEnabled(false); sound.stop(); while(sound.recorderRunning) {} Storage storage = sound.get(); try { System.out.println("Recorded sound size: " + storage.getData().length); // ZIP komprimera! System.out.println("ZIP-compressing!"); byte[] output = new byte[storage.getData().length]; Deflater compresser = new Deflater(); compresser.setInput(storage.getData()); compresser.finish(); int compressedDataLength = compresser.deflate(output); byte[] newData = new byte[compressedDataLength]; for(int i = 0; i < compressedDataLength; i++) newData[i] = output[i]; System.out.println("ZIP-compressing ready, size:" + newData.length); System.out.println("Sending ZIP-compressed sound object!"); out.writeObject(new Storage(newData)); System.out.println("ZIP-compressed sound object sent!"); } catch(IOException ioe) { System.err.println("I/O problems: " + e); } } } }