Files
ReplayModCinematic/src/main/java/eu/crushedpixel/replaymod/unused/PacketWriter.java
Marius Metzger cbd96d57f4 First Commit
2015-01-03 23:25:21 +01:00

102 lines
2.5 KiB
Java

package eu.crushedpixel.replaymod.unused;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.io.DataOutputStream;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentLinkedQueue;
import net.minecraft.network.PacketBuffer;
public class PacketWriter {
private boolean active = true;
private ConcurrentLinkedQueue<PacketReciever> queue = new ConcurrentLinkedQueue<PacketReciever>();
Thread outputThread = new Thread(new Runnable() {
@Override
public void run() {
HashMap<Class, Integer> counts = new HashMap<Class, Integer>();
while(active) {
PacketReciever packetReciever = queue.poll();
if(packetReciever != null) {
ByteBuf bb = Unpooled.buffer();
PacketBuffer packetBuffer = new PacketBuffer(bb);
//write the Packet to the given OutputStream
if(packetReciever.getPacket() != null) {
try {
packetReciever.getPacket().writePacketData(packetBuffer);
bb.readerIndex(0);
byte[] array = new byte[bb.readableBytes()];
bb.readBytes(array);
stream.writeInt(packetReciever.getTimestamp()); //Timestamp
stream.writeInt(array.length); //Lenght
if(counts.containsKey(packetReciever.getPacket().getClass())) {
counts.put(packetReciever.getPacket().getClass(), counts.get(packetReciever.getPacket().getClass())+array.length);
} else {
counts.put(packetReciever.getPacket().getClass(), array.length);
}
stream.writeShort(packetReciever.getPacketID()); //Packet ID
stream.write(array); //Content
stream.flush();
} catch(Exception e) {
System.out.println(packetReciever.getPacket().getClass());
e.printStackTrace();
}
}
} else {
try {
//let the Thread sleep for 1/2 second and queue up new Packets
Thread.sleep(500L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
try {
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
for(Entry<Class, Integer> entries : counts.entrySet()) {
System.out.println(entries.getKey()+ "| "+entries.getValue());
}
}
});
public ConcurrentLinkedQueue<PacketReciever> getQueue() {
return queue;
}
public void setQueue(ConcurrentLinkedQueue<PacketReciever> queue) {
this.queue = queue;
}
private DataOutputStream stream;
public PacketWriter(DataOutputStream stream) {
this.stream = stream;
outputThread.start();
}
public void requestFinish() {
active = false;
}
}