1 19 package org.lucane.applications.audioconf; 20 21 import org.lucane.applications.audioconf.audio.*; 22 import org.lucane.applications.audioconf.gui.*; 23 import org.lucane.client.*; 24 import org.lucane.client.widgets.DialogBox; 25 import org.lucane.common.*; 26 import org.lucane.common.net.ObjectConnection; 27 28 public class AudioConf extends Plugin 29 { 30 private ConnectInfo friend; 31 private ObjectConnection connection; 32 33 private AudioRecorder recorder; 34 private AudioPlayer player; 35 36 private Controller controller; 37 38 private boolean stopped = false; 39 40 public AudioConf() 41 { 42 } 44 45 private AudioConf(ConnectInfo friend) 46 { 47 this.friend = friend; 48 } 49 50 51 public Plugin newInstance(ConnectInfo[] friends) { 52 return new AudioConf(friends.length > 0 ? friends[0] : null); 53 } 54 55 public void load(ObjectConnection oc, ConnectInfo who, String data) 56 { 57 this.connection = oc; 58 this.friend = who; 59 } 60 61 public void start() 62 { 63 if(friend == null) 64 { 65 DialogBox.info(tr("err.noUserSelected")); 66 exit(); 67 return; 68 } 69 70 ConfigDialog cd = new ConfigDialog(this); 71 cd.show(); 72 } 73 74 public void follow() 75 { 76 Logging.getLogger().info("receiving audio stream from " +friend.getName()); 77 78 try { 79 AudioConfig config = (AudioConfig)this.connection.read(); 80 81 String msg = tr("msg.acceptFrom"); 82 msg = msg.replaceAll("%1", getFriendName()); 83 84 boolean accept = DialogBox.question(getTitle(), msg); 85 this.connection.write(Boolean.valueOf(accept)); 86 87 if(accept) 88 startAll(config); 89 } catch (Exception e) { 90 e.printStackTrace(); 91 } 92 } 93 94 public void waitForAccept(AudioConfig config) 95 { 96 this.connection = Communicator.getInstance().sendMessageTo(this.friend, this.getName(), ""); 97 try { 98 this.connection.write(config); 99 Boolean accepted = (Boolean )this.connection.read(); 100 if(accepted.booleanValue()) 101 startAll(config); 102 else 103 { 104 String msg = tr("msg.rejectedBy"); 105 msg = msg.replaceAll("%1", getFriendName()); 106 DialogBox.info(msg); 107 } 108 } catch (Exception e) { 109 DialogBox.info(tr("err.accept")); 110 e.printStackTrace(); 111 } 112 } 113 114 public void startRecorder(AudioConfig config) 115 { 116 recorder = new AudioRecorder(config); 117 recorder.addAudioListener(new Streamer(this, connection)); 118 Thread thread = new Thread (recorder); 119 thread.start(); 120 } 121 122 public void startPlayer(AudioConfig config) 123 { 124 player = new AudioPlayer(this, config, new AudioConfInputStream(this, connection)); 125 Thread thread = new Thread (player); 126 thread.start(); 127 } 128 129 131 public void reportRecorderError(Exception e) 132 { 133 stopAndExit(); 134 } 135 136 public void reportPlayerError(Exception e) 137 { 138 stopAndExit(); 139 } 140 141 143 public void startAll(AudioConfig config) 144 { 145 startPlayer(config); 146 startRecorder(config); 147 controller = new Controller(this); 148 controller.showController(); 149 } 150 151 public String getFriendName() 152 { 153 return friend.getName(); 154 } 155 156 public void stopAndExit() 157 { 158 if(this.stopped) 160 return; 161 this.stopped = true; 162 163 Logging.getLogger().info("Stopping AudioConf"); 164 165 recorder.stop(); 166 player.stop(); 167 controller.hideController(); 168 exit(); 169 } 170 } | Popular Tags |