1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.mina.examples.sumup.codec;
20
21 import org.apache.mina.common.ByteBuffer;
22 import org.apache.mina.common.IoSession;
23 import org.apache.mina.examples.sumup.message.AbstractMessage;
24 import org.apache.mina.filter.codec.ProtocolEncoderOutput;
25 import org.apache.mina.filter.codec.demux.MessageEncoder;
26
27 /***
28 * A {@link MessageEncoder} that encodes message header and forwards
29 * the encoding of body to a subclass.
30 *
31 * @author The Apache Directory Project
32 * @version $Rev: 355016 $, $Date: 2005-12-08 16:00:30 +0900 (Thu, 08 Dec 2005) $
33 */
34 public abstract class AbstractMessageEncoder implements MessageEncoder
35 {
36 private final int type;
37
38 protected AbstractMessageEncoder( int type )
39 {
40 this.type = type;
41 }
42
43 public void encode( IoSession session, Object message, ProtocolEncoderOutput out ) throws Exception
44 {
45 AbstractMessage m = ( AbstractMessage ) message ;
46 ByteBuffer buf = ByteBuffer.allocate( 16 );
47 buf.setAutoExpand( true );
48
49
50 buf.putShort( ( short ) type );
51 buf.putInt( m.getSequence() );
52
53
54 encodeBody( session, m, buf );
55 buf.flip();
56 out.write( buf );
57 }
58
59 protected abstract void encodeBody( IoSession session, AbstractMessage message, ByteBuffer out );
60 }