chess/src/main/java/com/oracle/chess/client/htmljava/Communication.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 24 Sep 2013 22:20:24 +0200
branchchess
changeset 49 945fbfff28f3
permissions -rw-r--r--
Advanced version of the chess game
     1 /**
     2  * The MIT License (MIT)
     3  *
     4  * Copyright (C) 2013 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     5  *
     6  * Permission is hereby granted, free of charge, to any person obtaining a copy
     7  * of this software and associated documentation files (the "Software"), to deal
     8  * in the Software without restriction, including without limitation the rights
     9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    10  * copies of the Software, and to permit persons to whom the Software is
    11  * furnished to do so, subject to the following conditions:
    12  *
    13  * The above copyright notice and this permission notice shall be included in
    14  * all copies or substantial portions of the Software.
    15  *
    16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    22  * THE SOFTWARE.
    23  */
    24 package com.oracle.chess.client.htmljava;
    25 
    26 import net.java.html.json.ComputedProperty;
    27 import net.java.html.json.Model;
    28 import net.java.html.json.Property;
    29 
    30 
    31 /** Communication protocols to talk to the server.
    32  *
    33  * @author Jaroslav Tulach <jtulach@netbeans.org>
    34  */
    35 final class Communication {
    36     @Model(className = "Request", properties = {
    37         @Property(name = "msg", type = MsgType.class),
    38         @Property(name = "username", type = String.class),
    39         @Property(name = "password", type = String.class),
    40         @Property(name = "gameId", type = String.class),
    41         @Property(name = "color", type = Color.class),
    42         @Property(name = "from", type = String.class),
    43         @Property(name = "to", type = String.class),
    44         @Property(name = "observer", type = boolean.class),
    45     })
    46     static class RequestModel {
    47     }
    48 
    49     @Model(className = "BoardRep", properties = {
    50         @Property(name = "whites", type = String.class, array = true),
    51         @Property(name = "blacks", type = String.class, array = true),
    52     })
    53     static class BoardRepModel {
    54     }
    55 
    56     @Model(className = "Response", properties = {
    57         @Property(name = "msg", type = String.class),
    58         @Property(name = "games", array = true, type = Game.class),
    59         @Property(name = "board", type = BoardRep.class),
    60         @Property(name = "turn", type = Color.class),
    61         @Property(name = "color", type = Color.class),
    62         @Property(name = "gameId", type = String.class),
    63         @Property(name = "error", type = Err.class),
    64         @Property(name = "alert", type = Alert.class),
    65         @Property(name = "status", type = String.class),
    66         @Property(name = "summary", type = String.class),
    67         @Property(name = "moves", type = String.class, array = true),
    68         @Property(name = "from", type = String.class),
    69         @Property(name = "to", type = String.class),
    70         @Property(name = "check", type = CheckResult.class),
    71         @Property(name = "whitePlayer", type = String.class),
    72         @Property(name = "blackPlayer", type = String.class),
    73     })
    74     static class ResponseModel {
    75         @ComputedProperty static Color nextTurn(Color turn, Alert alert) {
    76             if (alert == null || !alert.getType().isTerminal()) {
    77                 return turn;
    78             } else {
    79                 return null;
    80             }
    81         }
    82     }
    83 
    84     static enum CheckResult {
    85         VALID, INVALID, NOT_REGISTERED
    86     };
    87     
    88     @Model(className = "Err", properties = {
    89         @Property(name = "code", type = int.class),
    90         @Property(name = "message", type = String.class),
    91     })
    92     static class ErrorModel {
    93     }
    94 
    95     @Model(className = "Alert", properties = {
    96         @Property(name = "type", type = AlertType.class),
    97         @Property(name = "message", type = String.class),
    98     })
    99     static class AlertModel {
   100     }
   101 
   102     static enum AlertType {
   103         CHECKMATE, CHECK, DRAW;
   104 
   105         public boolean isTerminal() {
   106             return this == CHECKMATE || this == DRAW;
   107         }
   108     };
   109     
   110 }