http://svn.apache.org/viewvc/mina/tags/2.0.0-M1/

On Feb 19, 2008 1:51 PM, Brenno Hayden <[EMAIL PROTECTED]> wrote:

> what's link svn 2.0 ?i'm not remember
> thanks
>
> On Feb 19, 2008 12:47 PM, Brenno Hayden <[EMAIL PROTECTED]> wrote:
>
> > Maarten,
> >  i will consider MINA 2.0!
> >
> > thanks!
> >
> >
> >
> > On Feb 19, 2008 12:03 PM, Maarten Bosteels <[EMAIL PROTECTED]>
> > wrote:
> >
> > > Hello Brenno,
> > >
> > > Some comments on the code you showed:
> > > * when you're starting a new project, consider using MINA 2.0
> > > * your decoder isn't really decoding: it's not detecting the end of
> > > one
> > > message
> > >  but just copying all available bytes to a byte[]
> > >  You could just as well have no ProtocolCodecFilter in your chain
> > >  and handle the IoBuffer in your IoHandler
> > > * I have no experience with the StreamIoHandler but I don't think it's
> > > supposed
> > >  to be combined with a ProtocolCodecFilter
> > >
> > > Either your protocol uses a fixed character encoding, and then your
> > > decoder
> > > could be similar to the TextLine decoder (detecting the last closing
> > > tag
> > > instead of EOL)
> > >
> > > or your protocol must support multiple character encodings and then
> > > ... I
> > > don't know.
> > > maybe read until you can determine the used encoding ?
> > >
> > > Maarten
> > >
> > >
> > > On Feb 19, 2008 4:14 PM, Brenno Hayden <[EMAIL PROTECTED]> wrote:
> > >
> > > > Christian,
> > > >  follow below my example, but there is a problem, I connect the
> > > telnet and
> > > > sending an array of bytes (5356000B000030390000) in the form of a
> > > hex,
> > > > more
> > > > in the codec does not correspond with the mesm value. Example i send
> > > > (5356000B000030390000) in hex, but in console output
> > > > *Console*:
> > > > Server is loading....
> > > > Handler.sessionOpened()
> > > > b[0] = 53
> > > > b[1] = 51
> > > > b[2] = 53
> > > > b[3] = 54
> > > > b[4] = 48
> > > > b[5] = 48
> > > > b[6] = 48
> > > > b[7] = 66
> > > > b[8] = 48
> > > > b[9] = 48
> > > > b[10] = 48
> > > > b[11] = 48
> > > > b[12] = 51
> > > > b[13] = 48
> > > > b[14] = 51
> > > > b[15] = 57
> > > > b[16] = 48
> > > > b[17] = 48
> > > > b[18] = 48
> > > > b[19] = 48
> > > > b[20] = 13
> > > > b[21] = 10
> > > > Server.sessionClosed()
> > > >
> > > >
> > > > *MyServer.Java*
> > > >
> > > > import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
> > > > import org.apache.mina.transport.socket.nio.*;
> > > > import codec.ByteArrayProtocolCodecFactory;
> > > >
> > > > public class Server {
> > > >
> > > > private static int TCP_PORT = 4443;
> > > >
> > > >    public static void main(String[] args) {
> > > >
> > > >        IoAcceptor acceptor = new SocketAcceptor();
> > > >        IoAcceptorConfig config = new SocketAcceptorConfig();
> > > >        DefaultIoFilterChainBuilder chain = config.getFilterChain();
> > > >        // Bind
> > > >        chain.addLast("mycode", new ProtocolCodecFilter(
> > > >                new ByteArrayProtocolCodecFactory()));
> > > >        try {
> > > >            acceptor.bind(new InetSocketAddress(TCP_PORT), new
> > > MyHandler(),
> > > >                    config);
> > > >        } catch (IOException e) {
> > > >            // TODO Auto-generated catch block
> > > >            e.printStackTrace();
> > > >        }
> > > >        System.out.println("Server is loading....");
> > > >    }
> > > > //-----------------------
> > > > *MyHandler.java*
> > > >
> > > > import java.io.*;
> > > >
> > > > import org.apache.mina.common.*;
> > > > import org.apache.mina.handler.StreamIoHandler;
> > > >
> > > > public class Handler extends StreamIoHandler {
> > > >
> > > >    public void sessionOpened(IoSession session) {
> > > >        System.out.println("MyHandler.sessionOpened()");
> > > >    }
> > > >    public void messageReceived(IoSession session, Object message) {
> > > >        System.out.println("MyHandler.messageReceived()");
> > > >        byte[] b = (byte[])message;
> > > >        for(int i=0; i<b.length; i++) {
> > > >            System.out.println("b["+i+"] = "+b[i]);
> > > >        }
> > > >    }
> > > > public void messageSent(IoSession session, Object message)  {
> > > >        System.out.println("MyHandler.messageSent");
> > > >    }
> > > >
> > > >    public void sessionClosed(IoSession session) throws Exception {
> > > >        System.out.println("MyHandler.sessionClosed()");
> > > >        session.close();
> > > >    }
> > > >
> > > >    public void sessionIdle(IoSession session, IdleStatus status) {
> > > >        System.out.println("MyServer.sessionIdle()");
> > > >        session.close();
> > > >    }
> > > >
> > > >
> > > >    protected void processStreamIo(IoSession session, InputStream
> > > arg1,
> > > >            OutputStream arg2) {
> > > >        System.out.println("MyServer.processStreamIo()");
> > > >
> > > >
> > > >    }
> > > > //----------
> > > > *ByteArrayProtocolCodecFactory.java*
> > > >
> > > > package codec;
> > > >
> > > > import org.apache.mina.filter.codec.ProtocolCodecFactory;
> > > > import org.apache.mina.filter.codec.ProtocolDecoder;
> > > > import org.apache.mina.filter.codec.ProtocolEncoder;
> > > >
> > > > public class ByteArrayProtocolCodecFactory implements
> > > ProtocolCodecFactory
> > > > {
> > > >    private ProtocolEncoder encoder;
> > > >    private ProtocolDecoder decoder;
> > > >
> > > >    public ByteArrayProtocolCodecFactory() {
> > > >        encoder = new ByteArrayProtocolEnconder();
> > > >        decoder = new ByteArrayProtocolDecoder();
> > > >    }
> > > >
> > > >    public ProtocolEncoder getEncoder() throws Exception {
> > > >        return encoder;
> > > >    }
> > > >
> > > >    public ProtocolDecoder getDecoder() throws Exception {
> > > >        return decoder;
> > > >    }
> > > > }
> > > > //---
> > > > *ByteArrayProtocolDecoder.java*
> > > >
> > > > package codec;
> > > >
> > > > import org.apache.mina.common.ByteBuffer;
> > > > import org.apache.mina.common.IoSession;
> > > > import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
> > > > import org.apache.mina.filter.codec.ProtocolDecoderOutput;
> > > >
> > > > public class ByteArrayProtocolDecoder extends
> > > CumulativeProtocolDecoder {
> > > >
> > > >    public ByteArrayProtocolDecoder() {
> > > >    }
> > > >
> > > >    @Override
> > > >    protected boolean doDecode(IoSession session, ByteBuffer in,
> > > >            ProtocolDecoderOutput output) throws Exception {
> > > >        int len = in.remaining();
> > > >        byte[] data = new byte[len];
> > > >        in.get(data);
> > > >        output.write(data);
> > > >        return true;
> > > >    }
> > > > }
> > > > //----------
> > > > *ByteArrayProtocolEnconder.java*
> > > >
> > > > package codec;
> > > >
> > > > import org.apache.mina.common.ByteBuffer;
> > > > import org.apache.mina.common.IoSession;
> > > > import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
> > > > import org.apache.mina.filter.codec.ProtocolEncoderOutput;
> > > >
> > > > public class ByteArrayProtocolEnconder extends
> > > ProtocolEncoderAdapter {
> > > >
> > > >    public ByteArrayProtocolEnconder() {
> > > >
> > > >    }
> > > >
> > > >    public void encode(IoSession session, Object message,
> > > > ProtocolEncoderOutput output)
> > > >            throws Exception {
> > > >        byte[] bytes = (byte[]) message;
> > > >        int totalLength = bytes.length;
> > > >        ByteBuffer buf = ByteBuffer.allocate(totalLength);
> > > >        buf.put(bytes);
> > > >        buf.flip();
> > > >        output.write(buf);
> > > >    }
> > > > }
> > > >
> > > > On Feb 19, 2008 10:39 AM, Christian Migowski <[EMAIL PROTECTED]>
> > > wrote:
> > > >
> > > > > I am curious, how would that ByteArrayCodecFactory help?
> > > > >
> > > > > I had to deal with a protocol that hasn't neither a fixed length
> > > nor a
> > > > > fixed
> > > > > delimiter (it is XML fragments sent directly on the wire, without
> > > any
> > > > > header, so the Msg was complete when i found a matching end tag to
> > > a
> > > > list
> > > > > of
> > > > > start tags). The reason may be that i am still inexperienced with
> > > the
> > > > Java
> > > > > way of doing things, but the solution i found was to read up to a
> > > > certain
> > > > > amount of bytes (using the method below), check if the message was
> > > > > complete,
> > > > > if not rewind the buffer to the start position and wait for the
> > > next
> > > > > invocation.
> > > > >
> > > > > christian!
> > > > >
> > > > >
> > > > > On 2/19/08, Maarten Bosteels <[EMAIL PROTECTED]> wrote:
> > > > > >
> > > > > > Have a look at
> > > > > >
> > > > > >
> > > > >
> > > >
> > > http://www.nabble.com/Re%3A-sending-receiving-a-byte---p14220485s16868.html
> > > > > >
> > > > > > Is your array of bytes prefixed with a length indicator ?
> > > > > > If not, how do you know the end of the message ?
> > > > > >
> > > > > > Maybe we should add a ByteArrayCodecFactory to MINA.
> > > > > >
> > > > > > Maarten
> > > > > >
> > > > > > On Feb 19, 2008 3:19 PM, Christian Migowski <
> > > [EMAIL PROTECTED]>
> > > > > wrote:
> > > > > >
> > > > > > > Hi,
> > > > > > >
> > > > > > > i stumbled over this as well some time ago. The Javadoc says
> > > this
> > > > > > > exception
> > > > > > > happens when the ByteBuffer isn't backed by an accessible
> > > array, my
> > > > > > > finding
> > > > > > > was it isn't guaranteed in any way it is - better do not rely
> > > on
> > > > that
> > > > > > > method.
> > > > > > > Fortunately you can easily rewrite your code to
> > > > > > >
> > > > > > >     int len = in.remaining();
> > > > > > > //(i do think your usage of limit() is not what you intend to
> > > do)
> > > > > > >     byte[] stream = new byte[len];
> > > > > > >     in.get(stream , 0, in.remaining());
> > > > > > >
> > > > > > >
> > > > > > > hope that helps.
> > > > > > > regards,
> > > > > > > christian!
> > > > > > >
> > > > > > >
> > > > > > > On 2/19/08, Brenno Hayden <[EMAIL PROTECTED]> wrote:
> > > > > > > >
> > > > > > > > Hi,
> > > > > > > >
> > > > > > > > I am having a difficulty in mke this cast? Can I do
> > > something?
> > > > Some
> > > > > > tip
> > > > > > > ?
> > > > > > > >
> > > > > > > > *code*
> > > > > > > >
> > > > > > > > ByteArrayDecoder extends CumulativeProtocolDecoder {
> > > > > > > >
> > > > > > > > protected boolean doDecode(IoSession session, ByteBuffer in,
> > > > > > > > ProtocolDecoderOutput out) throws Exception {
> > > > > > > >     if (in instanceof ByteBuffer) {
> > > > > > > >      int len = in.limit();
> > > > > > > >      byte[] stream = new byte[len];
> > > > > > > >      //TODO
> > > > > > > >      stream = in.array(); // Why ?
> > > > > > > >      out.write(stream);
> > > > > > > >      return true;
> > > > > > > >     }else {
> > > > > > > >       return false.
> > > > > > > >     }
> > > > > > > > }
> > > > > > > >
> > > > > > > > *console*:
> > > > > > > >
> > > > > > > > org.apache.mina.filter.codec.ProtocolDecoderException:
> > > > > > > > java.lang.UnsupportedOperationException
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > Thanks
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > ________________________
> > > > > > > > Brenno Hayden F. Dantas
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > ________________________
> > > > Brenno Hayden F. Dantas
> > > >
> > >
> >
> >
> >
> > --
> > ________________________
> > Brenno Hayden F. Dantas
>
>
>
>
> --
> ________________________
> Brenno Hayden F. Dantas




-- 
________________________
Brenno Hayden F. Dantas

Reply via email to