+2003-06-19 Michael Koch <konqueror@gmx.de>
+
+ * gnu/java/nio/DatagramChannelImpl.java
+ (fd): Removed.
+ (blocking): New member variable.
+ (socket): Likewise.
+ (DatagramChannelImpl): Throws IOException, initialize socket.
+ (socket):Implemented.
+ (implCloseSelectableChannel): Throws IOException, implemented.
+ (implConfigureBlocking): Likewise.
+ (connect): Likewise.
+ (disconnect): Likewise.
+ (isConnected): Likewise.
+ (write): Likewise.
+ (read): Likewise.
+ (receive): Throws IOException.
+ (send): Likewise.
+ * gnu/java/nio/SocketChannelImpl.java
+ (read): Implemented.
+ (write): Implemented.
+
2003-06-19 Michael Koch <konqueror@gmx.de>
* javax/swing/JComponent.java,
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+
package gnu.java.nio;
+import java.io.IOException;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
+import java.nio.channels.NotYetConnectedException;
import java.nio.channels.spi.SelectorProvider;
public class DatagramChannelImpl extends DatagramChannel
{
- int fd;
-
+ boolean blocking = false;
+ DatagramSocket socket;
+
protected DatagramChannelImpl (SelectorProvider provider)
+ throws IOException
{
super (provider);
+ socket = new DatagramSocket ();
}
- protected void implCloseSelectableChannel ()
+ public DatagramSocket socket ()
{
+ return socket;
}
- protected void implConfigureBlocking (boolean block)
+ protected void implCloseSelectableChannel ()
+ throws IOException
{
+ socket.close ();
}
-
- public int write (ByteBuffer src)
+
+ protected void implConfigureBlocking (boolean blocking)
+ throws IOException
{
- return 0;
+ this.blocking = blocking; // FIXME
}
- public long write (ByteBuffer[] srcs, int offset, int length)
+ public DatagramChannel connect (SocketAddress remote)
+ throws IOException
{
- return 0;
+ socket.connect (remote);
+ return this;
}
-
- public int read (ByteBuffer dst)
+
+ public DatagramChannel disconnect ()
+ throws IOException
{
- return 0;
+ socket.disconnect ();
+ return this;
}
- public DatagramChannel connect (SocketAddress remote)
+ public boolean isConnected ()
{
- return null;
+ return socket.isConnected ();
}
- public DatagramChannel disconnect ()
+ public int write (ByteBuffer src)
+ throws IOException
{
- return null;
- }
+ if (!isConnected ())
+ throw new NotYetConnectedException ();
- public boolean isConnected ()
+ throw new Error ("Not implemented");
+ }
+
+ public long write (ByteBuffer[] srcs, int offset, int length)
+ throws IOException
{
- return false;
+ // FIXME: Should we throw an exception if offset and/or length
+ // have wrong values ?
+
+ long result = 0;
+
+ for (int i = offset; i < offset + length; i++)
+ result += write (srcs [i]);
+
+ return result;
+ }
+
+ public int read (ByteBuffer dst)
+ throws IOException
+ {
+ if (!isConnected ())
+ throw new NotYetConnectedException ();
+
+ throw new Error ("Not implemented");
}
public long read (ByteBuffer[] dsts, int offset, int length)
+ throws IOException
{
- return 0;
+ // FIXME: Should we throw an exception if offset and/or length
+ // have wrong values ?
+
+ long result = 0;
+
+ for (int i = offset; i < offset + length; i++)
+ result += read (dsts [i]);
+
+ return result;
}
public SocketAddress receive (ByteBuffer dst)
+ throws IOException
{
- return null;
+ throw new Error ("Not implemented");
}
public int send (ByteBuffer src, SocketAddress target)
+ throws IOException
{
- return 0;
- }
-
- public DatagramSocket socket ()
- {
- return null;
+ throw new Error ("Not implemented");
}
}
public int read (ByteBuffer dst) throws IOException
{
+ byte[] data;
int bytes = 0;
- int len = 1024;
- byte[]b = new byte[len];
+ int len = dst.remaining ();
- /*
- bytes = SocketRead(fd, b, 0, len);
- dst.put(b, 0, bytes);
-
- if (bytes == 0)
+ if (!dst.hasArray ())
{
- // we've hit eof ?
- return -1;
+ data = new byte [len];
+ dst.get (data, 0, len);
}
- */
-
- return bytes;
+ else
+ {
+ data = dst.array ();
+ }
+
+ return socket.getInputStream().read (data, 0, len);
}
public long read (ByteBuffer[] dsts, int offset, int length)
public int write (ByteBuffer src)
throws IOException
{
+ byte[] data;
int bytes = 0;
- int len = src.position();
-
- /*
- if (src.hasArray ())
+ int len = src.remaining ();
+
+ if (!src.hasArray ())
{
- byte[] b = src.array ();
- bytes = SocketWrite (fd, b, 0, len);
+ data = new byte [len];
+ src.get (data, 0, len);
}
else
{
- byte[] b = new byte [len];
- src.get (b, 0, len);
- bytes = SocketWrite (fd, b, 0, len);
+ data = src.array ();
}
- */
-
- return bytes;
+
+ socket.getOutputStream().write (data, 0, len);
+ return len;
}
public long write (ByteBuffer[] srcs, int offset, int length)