1 | /* |
2 | * @(#) $Id: ResultMessageDecoder.java 327113 2005-10-21 06:59:15Z trustin $ |
3 | * |
4 | * Copyright 2004 The Apache Software Foundation |
5 | * |
6 | * Licensed under the Apache License, Version 2.0 (the "License"); |
7 | * you may not use this file except in compliance with the License. |
8 | * You may obtain a copy of the License at |
9 | * |
10 | * http://www.apache.org/licenses/LICENSE-2.0 |
11 | * |
12 | * Unless required by applicable law or agreed to in writing, software |
13 | * distributed under the License is distributed on an "AS IS" BASIS, |
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
15 | * See the License for the specific language governing permissions and |
16 | * limitations under the License. |
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.examples.sumup.message.ResultMessage; |
24 | import org.apache.mina.protocol.ProtocolSession; |
25 | import org.apache.mina.protocol.codec.MessageDecoder; |
26 | |
27 | /** |
28 | * A {@link MessageDecoder} that decodes {@link ResultMessage}. |
29 | * |
30 | * @author The Apache Directory Project |
31 | * @version $Rev: 327113 $, $Date: 2005-10-21 15:59:15 +0900 $ |
32 | */ |
33 | public class ResultMessageDecoder extends AbstractMessageDecoder |
34 | { |
35 | private int code; |
36 | private boolean readCode; |
37 | |
38 | public ResultMessageDecoder() |
39 | { |
40 | super( Constants.RESULT ); |
41 | } |
42 | |
43 | protected AbstractMessage decodeBody( ProtocolSession session, ByteBuffer in ) |
44 | { |
45 | if( !readCode ) |
46 | { |
47 | if( in.remaining() < Constants.RESULT_CODE_LEN ) |
48 | { |
49 | return null; // Need more data. |
50 | } |
51 | |
52 | code = in.getShort(); |
53 | readCode = true; |
54 | } |
55 | |
56 | if( code == Constants.RESULT_OK ) |
57 | { |
58 | if( in.remaining() < Constants.RESULT_VALUE_LEN ) |
59 | { |
60 | return null; |
61 | } |
62 | |
63 | ResultMessage m = new ResultMessage(); |
64 | m.setOk( true ); |
65 | m.setValue( in.getInt() ); |
66 | readCode = false; |
67 | return m; |
68 | } |
69 | else |
70 | { |
71 | ResultMessage m = new ResultMessage(); |
72 | m.setOk( false ); |
73 | readCode = false; |
74 | return m; |
75 | } |
76 | } |
77 | } |