01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one
03: * or more contributor license agreements. See the NOTICE file
04: * distributed with this work for additional information
05: * regarding copyright ownership. The ASF licenses this file
06: * to you under the Apache License, Version 2.0 (the
07: * "License"); you may not use this file except in compliance
08: * with the License. You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing,
13: * software distributed under the License is distributed on an
14: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15: * KIND, either express or implied. See the License for the
16: * specific language governing permissions and limitations
17: * under the License.
18: *
19: */
20: package org.apache.mina.example.tennis;
21:
22: /**
23: * A tennis ball which has TTL value and state whose value is one of 'PING' and
24: * 'PONG'.
25: *
26: * @author The Apache MINA Project (dev@mina.apache.org)
27: * @version $Rev: 576217 $, $Date: 2007-09-16 17:55:27 -0600 (Sun, 16 Sep 2007) $
28: */
29: public class TennisBall {
30: private final boolean ping;
31:
32: private final int ttl;
33:
34: /**
35: * Creates a new ball with the specified TTL (Time To Live) value.
36: */
37: public TennisBall(int ttl) {
38: this (ttl, true);
39: }
40:
41: /**
42: * Creates a new ball with the specified TTL value and PING/PONG state.
43: */
44: private TennisBall(int ttl, boolean ping) {
45: this .ttl = ttl;
46: this .ping = ping;
47: }
48:
49: /**
50: * Returns the TTL value of this ball.
51: */
52: public int getTTL() {
53: return ttl;
54: }
55:
56: /**
57: * Returns the ball after {@link TennisPlayer}'s stroke.
58: * The returned ball has decreased TTL value and switched PING/PONG state.
59: */
60: public TennisBall stroke() {
61: return new TennisBall(ttl - 1, !ping);
62: }
63:
64: /**
65: * Returns string representation of this message (<code>[PING|PONG]
66: * (TTL)</code>).
67: */
68: @Override
69: public String toString() {
70: if (ping) {
71: return "PING (" + ttl + ")";
72: } else {
73: return "PONG (" + ttl + ")";
74: }
75: }
76: }
|