Update:
Add new methods to NetMarshalClient. Add new datagram packet reading methods to NetworkInputStream. Fix up Javadoc.
This commit is contained in:
parent
41ed32f3af
commit
b9640efde9
@ -5,7 +5,7 @@ import com.captainalm.lib.calmnet.packet.fragment.FragmentSender;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides fragmentation options for using {@link FragmentSender}s and
|
* This class provides fragmentation options for using {@link FragmentSender}s and
|
||||||
* {@link FragmentReceiver}s in this package.
|
* {@link FragmentReceiver}s in this package.
|
||||||
*
|
*
|
||||||
* @author Captain ALM
|
* @author Captain ALM
|
||||||
*/
|
*/
|
||||||
|
@ -294,6 +294,34 @@ public class NetMarshalClient implements Closeable {
|
|||||||
return rootOutputStream;
|
return rootOutputStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the packet factory in use.
|
||||||
|
*
|
||||||
|
* @return The packet factory.
|
||||||
|
*/
|
||||||
|
public IPacketFactory getPacketFactory() {
|
||||||
|
return factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the packet loader in use.
|
||||||
|
*
|
||||||
|
* @return The packet loader.
|
||||||
|
*/
|
||||||
|
public PacketLoader getPacketLoader() {
|
||||||
|
return loader;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the fragment storage registries if fragmentation is enabled.
|
||||||
|
* WARNING: Use of this method is not recommended.
|
||||||
|
*/
|
||||||
|
public synchronized final void clearFragmentStorage() {
|
||||||
|
if (fragmentationOptions == null) return;
|
||||||
|
fragmentReceiver.clearRegistry();
|
||||||
|
fragmentSender.clearRegistry();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the local {@link InetAddress}.
|
* Get the local {@link InetAddress}.
|
||||||
*
|
*
|
||||||
@ -379,6 +407,18 @@ public class NetMarshalClient implements Closeable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flushes the output streams.
|
||||||
|
*
|
||||||
|
* @throws IOException A stream exception has occurred.
|
||||||
|
*/
|
||||||
|
public synchronized final void flush() throws IOException {
|
||||||
|
synchronized ((socket == null) ? dsocket : socket) {
|
||||||
|
outputStream.flush();
|
||||||
|
rootOutputStream.flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets if there are received {@link IPacket}s.
|
* Gets if there are received {@link IPacket}s.
|
||||||
*
|
*
|
||||||
@ -403,6 +443,17 @@ public class NetMarshalClient implements Closeable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receives a {@link IPacket} polled.
|
||||||
|
*
|
||||||
|
* @return The received packet.
|
||||||
|
*/
|
||||||
|
public IPacket receivePacketPolled() {
|
||||||
|
synchronized (slockReceive) {
|
||||||
|
return receivedPackets.poll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Are {@link IPacket}s being read.
|
* Are {@link IPacket}s being read.
|
||||||
*
|
*
|
||||||
|
@ -86,6 +86,77 @@ public class NetworkInputStream extends InputStream {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a single datagram packet.
|
||||||
|
*
|
||||||
|
* @return A byte array of the single datagram packet.
|
||||||
|
* @throws IOException if an I/O error occurs, stream closed or not using a datagram socket.
|
||||||
|
*/
|
||||||
|
public byte[] readPacket() throws IOException {
|
||||||
|
if (closed) throw new IOException("stream closed");
|
||||||
|
if (dsocket == null) throw new IOException("not using a datagram socket");
|
||||||
|
assureDSocketPacket();
|
||||||
|
if (dsocketPacket == null) {
|
||||||
|
return new byte[0];
|
||||||
|
} else {
|
||||||
|
byte[] toret = new byte[dlen-dsocketPacketIndex];
|
||||||
|
System.arraycopy(dsocketPacket.getData(), dsocketPacketIndex, toret, 0, toret.length);
|
||||||
|
dsocketPacket = null;
|
||||||
|
return toret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a single datagram packet into the specified buffer storing with no offset.
|
||||||
|
*
|
||||||
|
* @param b The buffer to store the packet in.
|
||||||
|
* @return The number of bytes stored or -1 for end of stream.
|
||||||
|
* @throws NullPointerException b is null.
|
||||||
|
* @throws IOException if an I/O error occurs, stream closed or not using a datagram socket.
|
||||||
|
*/
|
||||||
|
public int readPacket(byte[] b) throws IOException {
|
||||||
|
return read(b, 0, b.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a single datagram packet into the specified buffer
|
||||||
|
* storing from the specified offset and the specified number of bytes.
|
||||||
|
*
|
||||||
|
* @param b The buffer to store the packet in.
|
||||||
|
* @param off The offset to store in the buffer from.
|
||||||
|
* @param len The number of bytes to store in the buffer.
|
||||||
|
* @return The number of bytes stored or -1 for end of stream.
|
||||||
|
* @throws NullPointerException b is null.
|
||||||
|
* @throws IndexOutOfBoundsException if off is negative, len is negative, or len is greater than the difference of the length of the buffer and off.
|
||||||
|
* @throws IOException if an I/O error occurs, stream closed or not using a datagram socket.
|
||||||
|
*/
|
||||||
|
public int readPacket(byte[] b, int off, int len) throws IOException {
|
||||||
|
if (closed) throw new IOException("stream closed");
|
||||||
|
if (dsocket == null) throw new IOException("not using a datagram socket");
|
||||||
|
if (b == null) throw new NullPointerException();
|
||||||
|
if (off < 0 || len < 0 || len > b.length - off) throw new IndexOutOfBoundsException();
|
||||||
|
if (len == 0) return 0;
|
||||||
|
assureDSocketPacket();
|
||||||
|
if (dsocketPacket == null) return -1;
|
||||||
|
int rlen = Math.min(len, dlen-dsocketPacketIndex);
|
||||||
|
System.arraycopy(dsocketPacket.getData(), dsocketPacketIndex, b, off, rlen);
|
||||||
|
dsocketPacketIndex += rlen;
|
||||||
|
if (dsocketPacketIndex >= dlen) dsocketPacket = null;
|
||||||
|
return rlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current datagram packet size.
|
||||||
|
*
|
||||||
|
* @return The datagram packet size.
|
||||||
|
* @throws IOException stream closed or not using a datagram socket.
|
||||||
|
*/
|
||||||
|
public int getPacketSize() throws IOException {
|
||||||
|
if (closed) throw new IOException("stream closed");
|
||||||
|
if (dsocket == null) throw new IOException("not using a datagram socket");
|
||||||
|
return dlen;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current {@link InetAddress} of the stream.
|
* Gets the current {@link InetAddress} of the stream.
|
||||||
* Can be null.
|
* Can be null.
|
||||||
|
Loading…
Reference in New Issue
Block a user