users@grizzly.java.net

Re: TCPConnectorHandler doesn't block ?

From: Survivant 00 <survivant00_at_gmail.com>
Date: Mon, 24 Nov 2008 12:50:51 -0500

Are you saying it never blocks (return 0)?

exactly, for my sample anyway..



2008/11/24 Jeanfrancois Arcand <Jeanfrancois.Arcand_at_sun.com>

> Salut,
>
> Survivant 00 wrote:
>
>> I have a question. I,m using the demo client TCP found on the main page
>> of grizzly.. (one of them :))
>> I just moved some code into methods.
>> My problem is I was excepted that the read block until a value >-1 was
>> returned. ( Even check into NonBlockingTCPIOClient and the function
>> receive contains :
>> public int receive(byte[] buf, int length) throws IOException {
>> ByteBuffer byteBuffer = ByteBuffer.wrap(buf,0,length);
>> long bytesRead = tcpConnectorHandler.read(byteBuffer,true);
>>
>
> I think we need to improve the document. calling read(bb, true) just means
> you are guarantee that the read will return bytes, or -1 if the client close
> the connection.
>
> Are you saying it never blocks (return 0)?
>
> A+
>
> -- Jeanfrancois
>
>
>
>
>> if (bytesRead == -1) {
>> throw new EOFException("Unexpected client EOF!");
>> }
>> return (int) bytesRead;
>> }
>>
>>
>> ----------------------
>>
>> What I'm missing ?
>>
>>
>> public class TCPClientTest {
>>
>> private String host = "localhost";
>> private int port = 7803;
>>
>> private TCPConnectorHandler connector_handler;
>> private Controller controller;
>> private TCPSelectorHandler tcp_selector_handler;
>>
>> private ByteBuffer buf = ByteBufferFactory.allocateView(1000, false);
>> private ByteBuffer response = ByteBufferFactory.allocateView(1000,
>> false);
>>
>> public void init() {
>> final CountDownLatch started = new CountDownLatch(1);
>>
>> controller = new Controller();
>> tcp_selector_handler = new TCPSelectorHandler(true);
>> controller.addSelectorHandler(tcp_selector_handler);
>>
>> controller.addStateListener(new ControllerStateListenerAdapter() {
>>
>> public void onException(Throwable e) {
>> System.out.println("Grizzly controller exception:" +
>> e.getMessage());
>> }
>>
>> public void onReady() {
>> System.out.println("Ready!");
>> started.countDown();
>> }
>>
>> });
>>
>> new Thread(controller).start();
>> try {
>> started.await();
>> } catch (Exception e) {
>> System.out.println("Timeout in wait" + e.getMessage());
>> }
>>
>> connector_handler = (TCPConnectorHandler)
>> controller.acquireConnectorHandler(Controller.Protocol.TCP);
>> }
>>
>> public void connect(){
>> try {
>> connector_handler.connect(new InetSocketAddress(host, port),
>> new CallbackHandler<Context>() {
>> public void onConnect(IOEvent<Context> e) {
>> SelectionKey k = e.attachment().getSelectionKey();
>> System.out.println("Callbackhandler: OnConnect...");
>> try {
>> connector_handler.finishConnect(k);
>> } catch (Exception ex) {
>> System.out.println("exception in CallbackHandler:"
>> + ex.getMessage());
>> }
>> e.attachment().getSelectorHandler().register(k,
>> SelectionKey.OP_READ);
>> }
>>
>> public void onRead(IOEvent<Context> e) {
>> }
>>
>> public void onWrite(IOEvent<Context> e) {
>> }
>>
>> });
>> } catch (Exception e) {
>> System.out.println("Exception in execute..." + e);
>> e.printStackTrace(System.out);
>> }
>> }
>> public void send(String quote) throws Exception {
>> byte[] msg = quote.getBytes();
>> buf = ByteBufferFactory.allocateView(msg.length, false);
>> buf.put(msg);
>> buf.flip();
>> connector_handler.write(buf, true);
>> buf.clear();
>> long count = connector_handler.read(response, true);
>> if(count>-1){
>> byte[] b = new byte[(int)count];
>> response.get(b);
>> System.out.println(new String(b));
>> buf.rewind();
>> } else {
>> System.out.println("count==-1");
>> }
>> }
>> public void close(){
>> try {
>> if(connector_handler!=null){
>> connector_handler.close();
>> }
>> if(controller!=null){
>> controller.stop();
>> }
>> } catch (IOException e) {
>> e.printStackTrace();
>> }
>> }
>>
>> public static void main(String[] args) {
>> TCPClientTest client = new TCPClientTest();
>>
>> try {
>> client.init();
>> client.connect();
>> client.send("quote|aaa[eoq]");
>> client.send("quote|bbb[eoq]");
>> client.send("quote|ccc[eoq]");
>>
>> client.close();
>> } catch(Exception e){
>> e.printStackTrace();
>> } finally {
>> try {client.close();}catch(Exception e){}
>> }
>> }
>>
>> the output is :
>>
>> Ready!
>> Callbackhandler: OnConnect...
>> BID AAA = 1.123
>> count==-1
>> BID CCC = 2.00
>>
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>
>