Overgram/lib/src/main/java/io/github/lonamiwebs/overgram/network/connection/TcpFull.java

60 lines
1.5 KiB
Java

package io.github.lonamiwebs.overgram.network.connection;
import io.github.lonamiwebs.overgram.network.TcpClient;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.zip.CRC32;
public class TcpFull extends Connection {
private final TcpClient client;
private int counter;
public TcpFull() {
client = new TcpClient();
}
@Override
public void connect(final String ipAddress, final int port) throws IOException {
client.connect(ipAddress, port);
counter = 0;
}
@Override
public void disconnect() {
client.close();
}
@Override
public void send(final byte[] data) throws IOException {
final int length = data.length + 12;
final ByteBuffer buffer = ByteBuffer.allocate(length);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.putInt(length);
buffer.putInt(counter);
buffer.put(data);
final CRC32 crc32 = new CRC32();
crc32.update(buffer.array(), 0, length - 4);
buffer.putInt((int) crc32.getValue());
client.write(buffer.array());
++counter;
}
@Override
public byte[] recv() throws IOException {
final ByteBuffer buffer = ByteBuffer.wrap(client.read(8));
final int length = buffer.getInt();
final int seq = buffer.getInt();
final byte[] body = client.read(length - 12);
final int crc = ByteBuffer.wrap(client.read(4)).getInt();
// TODO Check crc
return body;
}
}