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.examples.sumup.message.AbstractMessage;
23 import org.apache.mina.protocol.ProtocolEncoderOutput;
24 import org.apache.mina.protocol.ProtocolSession;
25 import org.apache.mina.protocol.ProtocolViolationException;
26 import org.apache.mina.protocol.codec.MessageEncoder;
27
28 /***
29 * A {@link MessageEncoder} that encodes message header and forwards
30 * the encoding of body to a subclass.
31 *
32 * @author The Apache Directory Project
33 * @version $Rev: 210062 $, $Date: 2005-07-11 12:52:38 +0900 $
34 */
35 public abstract class AbstractMessageEncoder implements MessageEncoder
36 {
37 private final int type;
38
39 protected AbstractMessageEncoder( int type )
40 {
41 this.type = type;
42 }
43
44 public void encode( ProtocolSession session, Object message, ProtocolEncoderOutput out ) throws ProtocolViolationException
45 {
46 AbstractMessage m = ( AbstractMessage ) message ;
47 ByteBuffer buf = ByteBuffer.allocate( 16 );
48 buf.setAutoExpand( true );
49
50
51 buf.putShort( ( short ) type );
52 buf.putInt( m.getSequence() );
53
54
55 encodeBody( session, m, buf );
56 buf.flip();
57 out.write( buf );
58 }
59
60 protected abstract void encodeBody( ProtocolSession session, AbstractMessage message, ByteBuffer out );
61 }