1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.example.sumup.codec;
21
22 import org.apache.mina.core.buffer.IoBuffer;
23 import org.apache.mina.core.session.IoSession;
24 import org.apache.mina.example.sumup.message.AbstractMessage;
25 import org.apache.mina.example.sumup.message.ResultMessage;
26 import org.apache.mina.filter.codec.ProtocolDecoderOutput;
27 import org.apache.mina.filter.codec.demux.MessageDecoder;
28
29
30
31
32
33
34
35 public class ResultMessageDecoder extends AbstractMessageDecoder {
36 private int code;
37
38 private boolean readCode;
39
40 public ResultMessageDecoder() {
41 super(Constants.RESULT);
42 }
43
44 @Override
45 protected AbstractMessage decodeBody(IoSession session, IoBuffer in) {
46 if (!readCode) {
47 if (in.remaining() < Constants.RESULT_CODE_LEN) {
48 return null;
49 }
50
51 code = in.getShort();
52 readCode = true;
53 }
54
55 if (code == Constants.RESULT_OK) {
56 if (in.remaining() < Constants.RESULT_VALUE_LEN) {
57 return null;
58 }
59
60 ResultMessage m = new ResultMessage();
61 m.setOk(true);
62 m.setValue(in.getInt());
63 readCode = false;
64 return m;
65 } else {
66 ResultMessage m = new ResultMessage();
67 m.setOk(false);
68 readCode = false;
69 return m;
70 }
71 }
72
73 public void finishDecode(IoSession session, ProtocolDecoderOutput out)
74 throws Exception {
75 }
76 }