// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: base_battle.proto

package org.zhangqi.proto;

public final class BaseBattle {
  private BaseBattle() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  /**
   * Protobuf enum {@code org.zhangqi.proto.EventTypeEnum}
   *
   * <pre>
   * 事件类型
   * </pre>
   */
  public enum EventTypeEnum
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>EventTypeGameOver = 1;</code>
     *
     * <pre>
     * 对战结束
     * </pre>
     */
    EventTypeGameOver(0, 1),
    /**
     * <code>EventTypeStartTurn = 2;</code>
     *
     * <pre>
     * 回合开始
     * </pre>
     */
    EventTypeStartTurn(1, 2),
    /**
     * <code>EventTypeEndTurn = 3;</code>
     *
     * <pre>
     * 回合结束
     * </pre>
     */
    EventTypeEndTurn(2, 3),
    /**
     * <code>EventTypePlacePieces = 4;</code>
     *
     * <pre>
     * 落子
     * </pre>
     */
    EventTypePlacePieces(3, 4),
    ;

    /**
     * <code>EventTypeGameOver = 1;</code>
     *
     * <pre>
     * 对战结束
     * </pre>
     */
    public static final int EventTypeGameOver_VALUE = 1;
    /**
     * <code>EventTypeStartTurn = 2;</code>
     *
     * <pre>
     * 回合开始
     * </pre>
     */
    public static final int EventTypeStartTurn_VALUE = 2;
    /**
     * <code>EventTypeEndTurn = 3;</code>
     *
     * <pre>
     * 回合结束
     * </pre>
     */
    public static final int EventTypeEndTurn_VALUE = 3;
    /**
     * <code>EventTypePlacePieces = 4;</code>
     *
     * <pre>
     * 落子
     * </pre>
     */
    public static final int EventTypePlacePieces_VALUE = 4;


    public final int getNumber() { return value; }

    public static EventTypeEnum valueOf(int value) {
      switch (value) {
        case 1: return EventTypeGameOver;
        case 2: return EventTypeStartTurn;
        case 3: return EventTypeEndTurn;
        case 4: return EventTypePlacePieces;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<EventTypeEnum>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<EventTypeEnum>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<EventTypeEnum>() {
            public EventTypeEnum findValueByNumber(int number) {
              return EventTypeEnum.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.getDescriptor().getEnumTypes().get(0);
    }

    private static final EventTypeEnum[] VALUES = values();

    public static EventTypeEnum valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private EventTypeEnum(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:org.zhangqi.proto.EventTypeEnum)
  }

  /**
   * Protobuf enum {@code org.zhangqi.proto.GameOverReasonEnum}
   *
   * <pre>
   * 游戏结束的原因
   * </pre>
   */
  public enum GameOverReasonEnum
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>GameOverPlayerWin = 1;</code>
     *
     * <pre>
     * 一方胜利
     * </pre>
     */
    GameOverPlayerWin(0, 1),
    /**
     * <code>GameOverPlayerConcede = 2;</code>
     *
     * <pre>
     * 一方投降
     * </pre>
     */
    GameOverPlayerConcede(1, 2),
    /**
     * <code>GameOverDraw = 3;</code>
     *
     * <pre>
     * 平局
     * </pre>
     */
    GameOverDraw(2, 3),
    ;

    /**
     * <code>GameOverPlayerWin = 1;</code>
     *
     * <pre>
     * 一方胜利
     * </pre>
     */
    public static final int GameOverPlayerWin_VALUE = 1;
    /**
     * <code>GameOverPlayerConcede = 2;</code>
     *
     * <pre>
     * 一方投降
     * </pre>
     */
    public static final int GameOverPlayerConcede_VALUE = 2;
    /**
     * <code>GameOverDraw = 3;</code>
     *
     * <pre>
     * 平局
     * </pre>
     */
    public static final int GameOverDraw_VALUE = 3;


    public final int getNumber() { return value; }

    public static GameOverReasonEnum valueOf(int value) {
      switch (value) {
        case 1: return GameOverPlayerWin;
        case 2: return GameOverPlayerConcede;
        case 3: return GameOverDraw;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<GameOverReasonEnum>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<GameOverReasonEnum>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<GameOverReasonEnum>() {
            public GameOverReasonEnum findValueByNumber(int number) {
              return GameOverReasonEnum.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.getDescriptor().getEnumTypes().get(1);
    }

    private static final GameOverReasonEnum[] VALUES = values();

    public static GameOverReasonEnum valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private GameOverReasonEnum(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:org.zhangqi.proto.GameOverReasonEnum)
  }

  public interface BattleInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    java.util.List<org.zhangqi.proto.Common.UserBriefInfo> 
        getUserBriefInfosList();
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    org.zhangqi.proto.Common.UserBriefInfo getUserBriefInfos(int index);
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    int getUserBriefInfosCount();
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    java.util.List<? extends org.zhangqi.proto.Common.UserBriefInfoOrBuilder> 
        getUserBriefInfosOrBuilderList();
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    org.zhangqi.proto.Common.UserBriefInfoOrBuilder getUserBriefInfosOrBuilder(
        int index);

    // optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    boolean hasCurrentTurnInfo();
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    org.zhangqi.proto.BaseBattle.CurrentTurnInfo getCurrentTurnInfo();
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder getCurrentTurnInfoOrBuilder();

    // repeated int32 battleCellInfo = 3;
    /**
     * <code>repeated int32 battleCellInfo = 3;</code>
     *
     * <pre>
     * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
     * </pre>
     */
    java.util.List<java.lang.Integer> getBattleCellInfoList();
    /**
     * <code>repeated int32 battleCellInfo = 3;</code>
     *
     * <pre>
     * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
     * </pre>
     */
    int getBattleCellInfoCount();
    /**
     * <code>repeated int32 battleCellInfo = 3;</code>
     *
     * <pre>
     * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
     * </pre>
     */
    int getBattleCellInfo(int index);

    // optional int64 battleStartTimestamp = 4;
    /**
     * <code>optional int64 battleStartTimestamp = 4;</code>
     *
     * <pre>
     * 战斗开始的时间戳
     * </pre>
     */
    boolean hasBattleStartTimestamp();
    /**
     * <code>optional int64 battleStartTimestamp = 4;</code>
     *
     * <pre>
     * 战斗开始的时间戳
     * </pre>
     */
    long getBattleStartTimestamp();

    // repeated int32 notReadyUserIds = 5;
    /**
     * <code>repeated int32 notReadyUserIds = 5;</code>
     *
     * <pre>
     * 尚未准备开始游戏的玩家
     * </pre>
     */
    java.util.List<java.lang.Integer> getNotReadyUserIdsList();
    /**
     * <code>repeated int32 notReadyUserIds = 5;</code>
     *
     * <pre>
     * 尚未准备开始游戏的玩家
     * </pre>
     */
    int getNotReadyUserIdsCount();
    /**
     * <code>repeated int32 notReadyUserIds = 5;</code>
     *
     * <pre>
     * 尚未准备开始游戏的玩家
     * </pre>
     */
    int getNotReadyUserIds(int index);

    // optional int32 lastEventNum = 6;
    /**
     * <code>optional int32 lastEventNum = 6;</code>
     *
     * <pre>
     * 对局中上一个事件编号
     * </pre>
     */
    boolean hasLastEventNum();
    /**
     * <code>optional int32 lastEventNum = 6;</code>
     *
     * <pre>
     * 对局中上一个事件编号
     * </pre>
     */
    int getLastEventNum();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.BattleInfo}
   *
   * <pre>
   * 一场战斗的信息
   * </pre>
   */
  public static final class BattleInfo extends
      com.google.protobuf.GeneratedMessage
      implements BattleInfoOrBuilder {
    // Use BattleInfo.newBuilder() to construct.
    private BattleInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BattleInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final BattleInfo defaultInstance;
    public static BattleInfo getDefaultInstance() {
      return defaultInstance;
    }

    public BattleInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BattleInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                userBriefInfos_ = new java.util.ArrayList<org.zhangqi.proto.Common.UserBriefInfo>();
                mutable_bitField0_ |= 0x00000001;
              }
              userBriefInfos_.add(input.readMessage(org.zhangqi.proto.Common.UserBriefInfo.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = currentTurnInfo_.toBuilder();
              }
              currentTurnInfo_ = input.readMessage(org.zhangqi.proto.BaseBattle.CurrentTurnInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(currentTurnInfo_);
                currentTurnInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 24: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                battleCellInfo_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000004;
              }
              battleCellInfo_.add(input.readInt32());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
                battleCellInfo_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000004;
              }
              while (input.getBytesUntilLimit() > 0) {
                battleCellInfo_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 32: {
              bitField0_ |= 0x00000002;
              battleStartTimestamp_ = input.readInt64();
              break;
            }
            case 40: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                notReadyUserIds_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000010;
              }
              notReadyUserIds_.add(input.readInt32());
              break;
            }
            case 42: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                notReadyUserIds_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000010;
              }
              while (input.getBytesUntilLimit() > 0) {
                notReadyUserIds_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 48: {
              bitField0_ |= 0x00000004;
              lastEventNum_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          userBriefInfos_ = java.util.Collections.unmodifiableList(userBriefInfos_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          battleCellInfo_ = java.util.Collections.unmodifiableList(battleCellInfo_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          notReadyUserIds_ = java.util.Collections.unmodifiableList(notReadyUserIds_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.BattleInfo.class, org.zhangqi.proto.BaseBattle.BattleInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<BattleInfo> PARSER =
        new com.google.protobuf.AbstractParser<BattleInfo>() {
      public BattleInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new BattleInfo(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<BattleInfo> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;
    public static final int USERBRIEFINFOS_FIELD_NUMBER = 1;
    private java.util.List<org.zhangqi.proto.Common.UserBriefInfo> userBriefInfos_;
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public java.util.List<org.zhangqi.proto.Common.UserBriefInfo> getUserBriefInfosList() {
      return userBriefInfos_;
    }
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public java.util.List<? extends org.zhangqi.proto.Common.UserBriefInfoOrBuilder> 
        getUserBriefInfosOrBuilderList() {
      return userBriefInfos_;
    }
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public int getUserBriefInfosCount() {
      return userBriefInfos_.size();
    }
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public org.zhangqi.proto.Common.UserBriefInfo getUserBriefInfos(int index) {
      return userBriefInfos_.get(index);
    }
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public org.zhangqi.proto.Common.UserBriefInfoOrBuilder getUserBriefInfosOrBuilder(
        int index) {
      return userBriefInfos_.get(index);
    }

    // optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;
    public static final int CURRENTTURNINFO_FIELD_NUMBER = 2;
    private org.zhangqi.proto.BaseBattle.CurrentTurnInfo currentTurnInfo_;
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    public boolean hasCurrentTurnInfo() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    public org.zhangqi.proto.BaseBattle.CurrentTurnInfo getCurrentTurnInfo() {
      return currentTurnInfo_;
    }
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    public org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder getCurrentTurnInfoOrBuilder() {
      return currentTurnInfo_;
    }

    // repeated int32 battleCellInfo = 3;
    public static final int BATTLECELLINFO_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Integer> battleCellInfo_;
    /**
     * <code>repeated int32 battleCellInfo = 3;</code>
     *
     * <pre>
     * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getBattleCellInfoList() {
      return battleCellInfo_;
    }
    /**
     * <code>repeated int32 battleCellInfo = 3;</code>
     *
     * <pre>
     * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
     * </pre>
     */
    public int getBattleCellInfoCount() {
      return battleCellInfo_.size();
    }
    /**
     * <code>repeated int32 battleCellInfo = 3;</code>
     *
     * <pre>
     * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
     * </pre>
     */
    public int getBattleCellInfo(int index) {
      return battleCellInfo_.get(index);
    }

    // optional int64 battleStartTimestamp = 4;
    public static final int BATTLESTARTTIMESTAMP_FIELD_NUMBER = 4;
    private long battleStartTimestamp_;
    /**
     * <code>optional int64 battleStartTimestamp = 4;</code>
     *
     * <pre>
     * 战斗开始的时间戳
     * </pre>
     */
    public boolean hasBattleStartTimestamp() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 battleStartTimestamp = 4;</code>
     *
     * <pre>
     * 战斗开始的时间戳
     * </pre>
     */
    public long getBattleStartTimestamp() {
      return battleStartTimestamp_;
    }

    // repeated int32 notReadyUserIds = 5;
    public static final int NOTREADYUSERIDS_FIELD_NUMBER = 5;
    private java.util.List<java.lang.Integer> notReadyUserIds_;
    /**
     * <code>repeated int32 notReadyUserIds = 5;</code>
     *
     * <pre>
     * 尚未准备开始游戏的玩家
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getNotReadyUserIdsList() {
      return notReadyUserIds_;
    }
    /**
     * <code>repeated int32 notReadyUserIds = 5;</code>
     *
     * <pre>
     * 尚未准备开始游戏的玩家
     * </pre>
     */
    public int getNotReadyUserIdsCount() {
      return notReadyUserIds_.size();
    }
    /**
     * <code>repeated int32 notReadyUserIds = 5;</code>
     *
     * <pre>
     * 尚未准备开始游戏的玩家
     * </pre>
     */
    public int getNotReadyUserIds(int index) {
      return notReadyUserIds_.get(index);
    }

    // optional int32 lastEventNum = 6;
    public static final int LASTEVENTNUM_FIELD_NUMBER = 6;
    private int lastEventNum_;
    /**
     * <code>optional int32 lastEventNum = 6;</code>
     *
     * <pre>
     * 对局中上一个事件编号
     * </pre>
     */
    public boolean hasLastEventNum() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 lastEventNum = 6;</code>
     *
     * <pre>
     * 对局中上一个事件编号
     * </pre>
     */
    public int getLastEventNum() {
      return lastEventNum_;
    }

    private void initFields() {
      userBriefInfos_ = java.util.Collections.emptyList();
      currentTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
      battleCellInfo_ = java.util.Collections.emptyList();
      battleStartTimestamp_ = 0L;
      notReadyUserIds_ = java.util.Collections.emptyList();
      lastEventNum_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < userBriefInfos_.size(); i++) {
        output.writeMessage(1, userBriefInfos_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(2, currentTurnInfo_);
      }
      for (int i = 0; i < battleCellInfo_.size(); i++) {
        output.writeInt32(3, battleCellInfo_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(4, battleStartTimestamp_);
      }
      for (int i = 0; i < notReadyUserIds_.size(); i++) {
        output.writeInt32(5, notReadyUserIds_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(6, lastEventNum_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < userBriefInfos_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, userBriefInfos_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, currentTurnInfo_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < battleCellInfo_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(battleCellInfo_.get(i));
        }
        size += dataSize;
        size += 1 * getBattleCellInfoList().size();
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, battleStartTimestamp_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < notReadyUserIds_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(notReadyUserIds_.get(i));
        }
        size += dataSize;
        size += 1 * getNotReadyUserIdsList().size();
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, lastEventNum_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.BattleInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.BattleInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.BattleInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.BattleInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.BattleInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.BattleInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.BattleInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.BattleInfo}
     *
     * <pre>
     * 一场战斗的信息
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.BattleInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.BattleInfo.class, org.zhangqi.proto.BaseBattle.BattleInfo.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.BattleInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUserBriefInfosFieldBuilder();
          getCurrentTurnInfoFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (userBriefInfosBuilder_ == null) {
          userBriefInfos_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          userBriefInfosBuilder_.clear();
        }
        if (currentTurnInfoBuilder_ == null) {
          currentTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
        } else {
          currentTurnInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        battleCellInfo_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        battleStartTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        notReadyUserIds_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        lastEventNum_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleInfo_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.BattleInfo getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.BattleInfo.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.BattleInfo build() {
        org.zhangqi.proto.BaseBattle.BattleInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.BattleInfo buildPartial() {
        org.zhangqi.proto.BaseBattle.BattleInfo result = new org.zhangqi.proto.BaseBattle.BattleInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (userBriefInfosBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            userBriefInfos_ = java.util.Collections.unmodifiableList(userBriefInfos_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.userBriefInfos_ = userBriefInfos_;
        } else {
          result.userBriefInfos_ = userBriefInfosBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        if (currentTurnInfoBuilder_ == null) {
          result.currentTurnInfo_ = currentTurnInfo_;
        } else {
          result.currentTurnInfo_ = currentTurnInfoBuilder_.build();
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          battleCellInfo_ = java.util.Collections.unmodifiableList(battleCellInfo_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.battleCellInfo_ = battleCellInfo_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000002;
        }
        result.battleStartTimestamp_ = battleStartTimestamp_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          notReadyUserIds_ = java.util.Collections.unmodifiableList(notReadyUserIds_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.notReadyUserIds_ = notReadyUserIds_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000004;
        }
        result.lastEventNum_ = lastEventNum_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.BattleInfo) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.BattleInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.BattleInfo other) {
        if (other == org.zhangqi.proto.BaseBattle.BattleInfo.getDefaultInstance()) return this;
        if (userBriefInfosBuilder_ == null) {
          if (!other.userBriefInfos_.isEmpty()) {
            if (userBriefInfos_.isEmpty()) {
              userBriefInfos_ = other.userBriefInfos_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureUserBriefInfosIsMutable();
              userBriefInfos_.addAll(other.userBriefInfos_);
            }
            onChanged();
          }
        } else {
          if (!other.userBriefInfos_.isEmpty()) {
            if (userBriefInfosBuilder_.isEmpty()) {
              userBriefInfosBuilder_.dispose();
              userBriefInfosBuilder_ = null;
              userBriefInfos_ = other.userBriefInfos_;
              bitField0_ = (bitField0_ & ~0x00000001);
              userBriefInfosBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUserBriefInfosFieldBuilder() : null;
            } else {
              userBriefInfosBuilder_.addAllMessages(other.userBriefInfos_);
            }
          }
        }
        if (other.hasCurrentTurnInfo()) {
          mergeCurrentTurnInfo(other.getCurrentTurnInfo());
        }
        if (!other.battleCellInfo_.isEmpty()) {
          if (battleCellInfo_.isEmpty()) {
            battleCellInfo_ = other.battleCellInfo_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureBattleCellInfoIsMutable();
            battleCellInfo_.addAll(other.battleCellInfo_);
          }
          onChanged();
        }
        if (other.hasBattleStartTimestamp()) {
          setBattleStartTimestamp(other.getBattleStartTimestamp());
        }
        if (!other.notReadyUserIds_.isEmpty()) {
          if (notReadyUserIds_.isEmpty()) {
            notReadyUserIds_ = other.notReadyUserIds_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureNotReadyUserIdsIsMutable();
            notReadyUserIds_.addAll(other.notReadyUserIds_);
          }
          onChanged();
        }
        if (other.hasLastEventNum()) {
          setLastEventNum(other.getLastEventNum());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.BattleInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.BattleInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;
      private java.util.List<org.zhangqi.proto.Common.UserBriefInfo> userBriefInfos_ =
        java.util.Collections.emptyList();
      private void ensureUserBriefInfosIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          userBriefInfos_ = new java.util.ArrayList<org.zhangqi.proto.Common.UserBriefInfo>(userBriefInfos_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.zhangqi.proto.Common.UserBriefInfo, org.zhangqi.proto.Common.UserBriefInfo.Builder, org.zhangqi.proto.Common.UserBriefInfoOrBuilder> userBriefInfosBuilder_;

      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public java.util.List<org.zhangqi.proto.Common.UserBriefInfo> getUserBriefInfosList() {
        if (userBriefInfosBuilder_ == null) {
          return java.util.Collections.unmodifiableList(userBriefInfos_);
        } else {
          return userBriefInfosBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public int getUserBriefInfosCount() {
        if (userBriefInfosBuilder_ == null) {
          return userBriefInfos_.size();
        } else {
          return userBriefInfosBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfo getUserBriefInfos(int index) {
        if (userBriefInfosBuilder_ == null) {
          return userBriefInfos_.get(index);
        } else {
          return userBriefInfosBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder setUserBriefInfos(
          int index, org.zhangqi.proto.Common.UserBriefInfo value) {
        if (userBriefInfosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.set(index, value);
          onChanged();
        } else {
          userBriefInfosBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder setUserBriefInfos(
          int index, org.zhangqi.proto.Common.UserBriefInfo.Builder builderForValue) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.set(index, builderForValue.build());
          onChanged();
        } else {
          userBriefInfosBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addUserBriefInfos(org.zhangqi.proto.Common.UserBriefInfo value) {
        if (userBriefInfosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.add(value);
          onChanged();
        } else {
          userBriefInfosBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addUserBriefInfos(
          int index, org.zhangqi.proto.Common.UserBriefInfo value) {
        if (userBriefInfosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.add(index, value);
          onChanged();
        } else {
          userBriefInfosBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addUserBriefInfos(
          org.zhangqi.proto.Common.UserBriefInfo.Builder builderForValue) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.add(builderForValue.build());
          onChanged();
        } else {
          userBriefInfosBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addUserBriefInfos(
          int index, org.zhangqi.proto.Common.UserBriefInfo.Builder builderForValue) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.add(index, builderForValue.build());
          onChanged();
        } else {
          userBriefInfosBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addAllUserBriefInfos(
          java.lang.Iterable<? extends org.zhangqi.proto.Common.UserBriefInfo> values) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          super.addAll(values, userBriefInfos_);
          onChanged();
        } else {
          userBriefInfosBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder clearUserBriefInfos() {
        if (userBriefInfosBuilder_ == null) {
          userBriefInfos_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          userBriefInfosBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder removeUserBriefInfos(int index) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.remove(index);
          onChanged();
        } else {
          userBriefInfosBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfo.Builder getUserBriefInfosBuilder(
          int index) {
        return getUserBriefInfosFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfoOrBuilder getUserBriefInfosOrBuilder(
          int index) {
        if (userBriefInfosBuilder_ == null) {
          return userBriefInfos_.get(index);  } else {
          return userBriefInfosBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public java.util.List<? extends org.zhangqi.proto.Common.UserBriefInfoOrBuilder> 
           getUserBriefInfosOrBuilderList() {
        if (userBriefInfosBuilder_ != null) {
          return userBriefInfosBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(userBriefInfos_);
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfo.Builder addUserBriefInfosBuilder() {
        return getUserBriefInfosFieldBuilder().addBuilder(
            org.zhangqi.proto.Common.UserBriefInfo.getDefaultInstance());
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfo.Builder addUserBriefInfosBuilder(
          int index) {
        return getUserBriefInfosFieldBuilder().addBuilder(
            index, org.zhangqi.proto.Common.UserBriefInfo.getDefaultInstance());
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 1;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public java.util.List<org.zhangqi.proto.Common.UserBriefInfo.Builder> 
           getUserBriefInfosBuilderList() {
        return getUserBriefInfosFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.zhangqi.proto.Common.UserBriefInfo, org.zhangqi.proto.Common.UserBriefInfo.Builder, org.zhangqi.proto.Common.UserBriefInfoOrBuilder> 
          getUserBriefInfosFieldBuilder() {
        if (userBriefInfosBuilder_ == null) {
          userBriefInfosBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.zhangqi.proto.Common.UserBriefInfo, org.zhangqi.proto.Common.UserBriefInfo.Builder, org.zhangqi.proto.Common.UserBriefInfoOrBuilder>(
                  userBriefInfos_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          userBriefInfos_ = null;
        }
        return userBriefInfosBuilder_;
      }

      // optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;
      private org.zhangqi.proto.BaseBattle.CurrentTurnInfo currentTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.CurrentTurnInfo, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder, org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder> currentTurnInfoBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public boolean hasCurrentTurnInfo() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.CurrentTurnInfo getCurrentTurnInfo() {
        if (currentTurnInfoBuilder_ == null) {
          return currentTurnInfo_;
        } else {
          return currentTurnInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public Builder setCurrentTurnInfo(org.zhangqi.proto.BaseBattle.CurrentTurnInfo value) {
        if (currentTurnInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          currentTurnInfo_ = value;
          onChanged();
        } else {
          currentTurnInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public Builder setCurrentTurnInfo(
          org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder builderForValue) {
        if (currentTurnInfoBuilder_ == null) {
          currentTurnInfo_ = builderForValue.build();
          onChanged();
        } else {
          currentTurnInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public Builder mergeCurrentTurnInfo(org.zhangqi.proto.BaseBattle.CurrentTurnInfo value) {
        if (currentTurnInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              currentTurnInfo_ != org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance()) {
            currentTurnInfo_ =
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo.newBuilder(currentTurnInfo_).mergeFrom(value).buildPartial();
          } else {
            currentTurnInfo_ = value;
          }
          onChanged();
        } else {
          currentTurnInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public Builder clearCurrentTurnInfo() {
        if (currentTurnInfoBuilder_ == null) {
          currentTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
          onChanged();
        } else {
          currentTurnInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder getCurrentTurnInfoBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getCurrentTurnInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder getCurrentTurnInfoOrBuilder() {
        if (currentTurnInfoBuilder_ != null) {
          return currentTurnInfoBuilder_.getMessageOrBuilder();
        } else {
          return currentTurnInfo_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 2;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.CurrentTurnInfo, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder, org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder> 
          getCurrentTurnInfoFieldBuilder() {
        if (currentTurnInfoBuilder_ == null) {
          currentTurnInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder, org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder>(
                  currentTurnInfo_,
                  getParentForChildren(),
                  isClean());
          currentTurnInfo_ = null;
        }
        return currentTurnInfoBuilder_;
      }

      // repeated int32 battleCellInfo = 3;
      private java.util.List<java.lang.Integer> battleCellInfo_ = java.util.Collections.emptyList();
      private void ensureBattleCellInfoIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          battleCellInfo_ = new java.util.ArrayList<java.lang.Integer>(battleCellInfo_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated int32 battleCellInfo = 3;</code>
       *
       * <pre>
       * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getBattleCellInfoList() {
        return java.util.Collections.unmodifiableList(battleCellInfo_);
      }
      /**
       * <code>repeated int32 battleCellInfo = 3;</code>
       *
       * <pre>
       * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
       * </pre>
       */
      public int getBattleCellInfoCount() {
        return battleCellInfo_.size();
      }
      /**
       * <code>repeated int32 battleCellInfo = 3;</code>
       *
       * <pre>
       * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
       * </pre>
       */
      public int getBattleCellInfo(int index) {
        return battleCellInfo_.get(index);
      }
      /**
       * <code>repeated int32 battleCellInfo = 3;</code>
       *
       * <pre>
       * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
       * </pre>
       */
      public Builder setBattleCellInfo(
          int index, int value) {
        ensureBattleCellInfoIsMutable();
        battleCellInfo_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 battleCellInfo = 3;</code>
       *
       * <pre>
       * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
       * </pre>
       */
      public Builder addBattleCellInfo(int value) {
        ensureBattleCellInfoIsMutable();
        battleCellInfo_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 battleCellInfo = 3;</code>
       *
       * <pre>
       * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
       * </pre>
       */
      public Builder addAllBattleCellInfo(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureBattleCellInfoIsMutable();
        super.addAll(values, battleCellInfo_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 battleCellInfo = 3;</code>
       *
       * <pre>
       * 九宫格从左上角开始，下标为0，然后逐行逐列递增下标。没有棋子的位置值为0，否则值为先后手的行动顺序（先手为1，后手为2）
       * </pre>
       */
      public Builder clearBattleCellInfo() {
        battleCellInfo_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }

      // optional int64 battleStartTimestamp = 4;
      private long battleStartTimestamp_ ;
      /**
       * <code>optional int64 battleStartTimestamp = 4;</code>
       *
       * <pre>
       * 战斗开始的时间戳
       * </pre>
       */
      public boolean hasBattleStartTimestamp() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 battleStartTimestamp = 4;</code>
       *
       * <pre>
       * 战斗开始的时间戳
       * </pre>
       */
      public long getBattleStartTimestamp() {
        return battleStartTimestamp_;
      }
      /**
       * <code>optional int64 battleStartTimestamp = 4;</code>
       *
       * <pre>
       * 战斗开始的时间戳
       * </pre>
       */
      public Builder setBattleStartTimestamp(long value) {
        bitField0_ |= 0x00000008;
        battleStartTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 battleStartTimestamp = 4;</code>
       *
       * <pre>
       * 战斗开始的时间戳
       * </pre>
       */
      public Builder clearBattleStartTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000008);
        battleStartTimestamp_ = 0L;
        onChanged();
        return this;
      }

      // repeated int32 notReadyUserIds = 5;
      private java.util.List<java.lang.Integer> notReadyUserIds_ = java.util.Collections.emptyList();
      private void ensureNotReadyUserIdsIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          notReadyUserIds_ = new java.util.ArrayList<java.lang.Integer>(notReadyUserIds_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated int32 notReadyUserIds = 5;</code>
       *
       * <pre>
       * 尚未准备开始游戏的玩家
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getNotReadyUserIdsList() {
        return java.util.Collections.unmodifiableList(notReadyUserIds_);
      }
      /**
       * <code>repeated int32 notReadyUserIds = 5;</code>
       *
       * <pre>
       * 尚未准备开始游戏的玩家
       * </pre>
       */
      public int getNotReadyUserIdsCount() {
        return notReadyUserIds_.size();
      }
      /**
       * <code>repeated int32 notReadyUserIds = 5;</code>
       *
       * <pre>
       * 尚未准备开始游戏的玩家
       * </pre>
       */
      public int getNotReadyUserIds(int index) {
        return notReadyUserIds_.get(index);
      }
      /**
       * <code>repeated int32 notReadyUserIds = 5;</code>
       *
       * <pre>
       * 尚未准备开始游戏的玩家
       * </pre>
       */
      public Builder setNotReadyUserIds(
          int index, int value) {
        ensureNotReadyUserIdsIsMutable();
        notReadyUserIds_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 notReadyUserIds = 5;</code>
       *
       * <pre>
       * 尚未准备开始游戏的玩家
       * </pre>
       */
      public Builder addNotReadyUserIds(int value) {
        ensureNotReadyUserIdsIsMutable();
        notReadyUserIds_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 notReadyUserIds = 5;</code>
       *
       * <pre>
       * 尚未准备开始游戏的玩家
       * </pre>
       */
      public Builder addAllNotReadyUserIds(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureNotReadyUserIdsIsMutable();
        super.addAll(values, notReadyUserIds_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 notReadyUserIds = 5;</code>
       *
       * <pre>
       * 尚未准备开始游戏的玩家
       * </pre>
       */
      public Builder clearNotReadyUserIds() {
        notReadyUserIds_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }

      // optional int32 lastEventNum = 6;
      private int lastEventNum_ ;
      /**
       * <code>optional int32 lastEventNum = 6;</code>
       *
       * <pre>
       * 对局中上一个事件编号
       * </pre>
       */
      public boolean hasLastEventNum() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int32 lastEventNum = 6;</code>
       *
       * <pre>
       * 对局中上一个事件编号
       * </pre>
       */
      public int getLastEventNum() {
        return lastEventNum_;
      }
      /**
       * <code>optional int32 lastEventNum = 6;</code>
       *
       * <pre>
       * 对局中上一个事件编号
       * </pre>
       */
      public Builder setLastEventNum(int value) {
        bitField0_ |= 0x00000020;
        lastEventNum_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 lastEventNum = 6;</code>
       *
       * <pre>
       * 对局中上一个事件编号
       * </pre>
       */
      public Builder clearLastEventNum() {
        bitField0_ = (bitField0_ & ~0x00000020);
        lastEventNum_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.BattleInfo)
    }

    static {
      defaultInstance = new BattleInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.BattleInfo)
  }

  public interface CurrentTurnInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 turnCount = 1;
    /**
     * <code>optional int32 turnCount = 1;</code>
     *
     * <pre>
     * 当前回合数（开局后，先手首个回合为1，再轮到先手行动时，回合数+1）
     * </pre>
     */
    boolean hasTurnCount();
    /**
     * <code>optional int32 turnCount = 1;</code>
     *
     * <pre>
     * 当前回合数（开局后，先手首个回合为1，再轮到先手行动时，回合数+1）
     * </pre>
     */
    int getTurnCount();

    // optional int32 userId = 2;
    /**
     * <code>optional int32 userId = 2;</code>
     *
     * <pre>
     * 当前回合的玩家
     * </pre>
     */
    boolean hasUserId();
    /**
     * <code>optional int32 userId = 2;</code>
     *
     * <pre>
     * 当前回合的玩家
     * </pre>
     */
    int getUserId();

    // optional int64 turnStartTimestamp = 3;
    /**
     * <code>optional int64 turnStartTimestamp = 3;</code>
     *
     * <pre>
     * 当前回合开始的时间
     * </pre>
     */
    boolean hasTurnStartTimestamp();
    /**
     * <code>optional int64 turnStartTimestamp = 3;</code>
     *
     * <pre>
     * 当前回合开始的时间
     * </pre>
     */
    long getTurnStartTimestamp();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.CurrentTurnInfo}
   *
   * <pre>
   * 当前回合信息
   * </pre>
   */
  public static final class CurrentTurnInfo extends
      com.google.protobuf.GeneratedMessage
      implements CurrentTurnInfoOrBuilder {
    // Use CurrentTurnInfo.newBuilder() to construct.
    private CurrentTurnInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CurrentTurnInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final CurrentTurnInfo defaultInstance;
    public static CurrentTurnInfo getDefaultInstance() {
      return defaultInstance;
    }

    public CurrentTurnInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CurrentTurnInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              turnCount_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              userId_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              turnStartTimestamp_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_CurrentTurnInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_CurrentTurnInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo.class, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<CurrentTurnInfo> PARSER =
        new com.google.protobuf.AbstractParser<CurrentTurnInfo>() {
      public CurrentTurnInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CurrentTurnInfo(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<CurrentTurnInfo> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 turnCount = 1;
    public static final int TURNCOUNT_FIELD_NUMBER = 1;
    private int turnCount_;
    /**
     * <code>optional int32 turnCount = 1;</code>
     *
     * <pre>
     * 当前回合数（开局后，先手首个回合为1，再轮到先手行动时，回合数+1）
     * </pre>
     */
    public boolean hasTurnCount() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 turnCount = 1;</code>
     *
     * <pre>
     * 当前回合数（开局后，先手首个回合为1，再轮到先手行动时，回合数+1）
     * </pre>
     */
    public int getTurnCount() {
      return turnCount_;
    }

    // optional int32 userId = 2;
    public static final int USERID_FIELD_NUMBER = 2;
    private int userId_;
    /**
     * <code>optional int32 userId = 2;</code>
     *
     * <pre>
     * 当前回合的玩家
     * </pre>
     */
    public boolean hasUserId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 userId = 2;</code>
     *
     * <pre>
     * 当前回合的玩家
     * </pre>
     */
    public int getUserId() {
      return userId_;
    }

    // optional int64 turnStartTimestamp = 3;
    public static final int TURNSTARTTIMESTAMP_FIELD_NUMBER = 3;
    private long turnStartTimestamp_;
    /**
     * <code>optional int64 turnStartTimestamp = 3;</code>
     *
     * <pre>
     * 当前回合开始的时间
     * </pre>
     */
    public boolean hasTurnStartTimestamp() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 turnStartTimestamp = 3;</code>
     *
     * <pre>
     * 当前回合开始的时间
     * </pre>
     */
    public long getTurnStartTimestamp() {
      return turnStartTimestamp_;
    }

    private void initFields() {
      turnCount_ = 0;
      userId_ = 0;
      turnStartTimestamp_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, turnCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, userId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, turnStartTimestamp_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, turnCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, userId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, turnStartTimestamp_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.CurrentTurnInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.CurrentTurnInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.CurrentTurnInfo}
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_CurrentTurnInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_CurrentTurnInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.CurrentTurnInfo.class, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.CurrentTurnInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        turnCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        userId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        turnStartTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_CurrentTurnInfo_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.CurrentTurnInfo getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.CurrentTurnInfo build() {
        org.zhangqi.proto.BaseBattle.CurrentTurnInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.CurrentTurnInfo buildPartial() {
        org.zhangqi.proto.BaseBattle.CurrentTurnInfo result = new org.zhangqi.proto.BaseBattle.CurrentTurnInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.turnCount_ = turnCount_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.userId_ = userId_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.turnStartTimestamp_ = turnStartTimestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.CurrentTurnInfo) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.CurrentTurnInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.CurrentTurnInfo other) {
        if (other == org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance()) return this;
        if (other.hasTurnCount()) {
          setTurnCount(other.getTurnCount());
        }
        if (other.hasUserId()) {
          setUserId(other.getUserId());
        }
        if (other.hasTurnStartTimestamp()) {
          setTurnStartTimestamp(other.getTurnStartTimestamp());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.CurrentTurnInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.CurrentTurnInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 turnCount = 1;
      private int turnCount_ ;
      /**
       * <code>optional int32 turnCount = 1;</code>
       *
       * <pre>
       * 当前回合数（开局后，先手首个回合为1，再轮到先手行动时，回合数+1）
       * </pre>
       */
      public boolean hasTurnCount() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 turnCount = 1;</code>
       *
       * <pre>
       * 当前回合数（开局后，先手首个回合为1，再轮到先手行动时，回合数+1）
       * </pre>
       */
      public int getTurnCount() {
        return turnCount_;
      }
      /**
       * <code>optional int32 turnCount = 1;</code>
       *
       * <pre>
       * 当前回合数（开局后，先手首个回合为1，再轮到先手行动时，回合数+1）
       * </pre>
       */
      public Builder setTurnCount(int value) {
        bitField0_ |= 0x00000001;
        turnCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 turnCount = 1;</code>
       *
       * <pre>
       * 当前回合数（开局后，先手首个回合为1，再轮到先手行动时，回合数+1）
       * </pre>
       */
      public Builder clearTurnCount() {
        bitField0_ = (bitField0_ & ~0x00000001);
        turnCount_ = 0;
        onChanged();
        return this;
      }

      // optional int32 userId = 2;
      private int userId_ ;
      /**
       * <code>optional int32 userId = 2;</code>
       *
       * <pre>
       * 当前回合的玩家
       * </pre>
       */
      public boolean hasUserId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 userId = 2;</code>
       *
       * <pre>
       * 当前回合的玩家
       * </pre>
       */
      public int getUserId() {
        return userId_;
      }
      /**
       * <code>optional int32 userId = 2;</code>
       *
       * <pre>
       * 当前回合的玩家
       * </pre>
       */
      public Builder setUserId(int value) {
        bitField0_ |= 0x00000002;
        userId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 userId = 2;</code>
       *
       * <pre>
       * 当前回合的玩家
       * </pre>
       */
      public Builder clearUserId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        userId_ = 0;
        onChanged();
        return this;
      }

      // optional int64 turnStartTimestamp = 3;
      private long turnStartTimestamp_ ;
      /**
       * <code>optional int64 turnStartTimestamp = 3;</code>
       *
       * <pre>
       * 当前回合开始的时间
       * </pre>
       */
      public boolean hasTurnStartTimestamp() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 turnStartTimestamp = 3;</code>
       *
       * <pre>
       * 当前回合开始的时间
       * </pre>
       */
      public long getTurnStartTimestamp() {
        return turnStartTimestamp_;
      }
      /**
       * <code>optional int64 turnStartTimestamp = 3;</code>
       *
       * <pre>
       * 当前回合开始的时间
       * </pre>
       */
      public Builder setTurnStartTimestamp(long value) {
        bitField0_ |= 0x00000004;
        turnStartTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 turnStartTimestamp = 3;</code>
       *
       * <pre>
       * 当前回合开始的时间
       * </pre>
       */
      public Builder clearTurnStartTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000004);
        turnStartTimestamp_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.CurrentTurnInfo)
    }

    static {
      defaultInstance = new CurrentTurnInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.CurrentTurnInfo)
  }

  public interface BattleRecordDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;
    /**
     * <code>optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;</code>
     */
    boolean hasBattleType();
    /**
     * <code>optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;</code>
     */
    org.zhangqi.proto.Common.BattleTypeEnum getBattleType();

    // optional string battleId = 2;
    /**
     * <code>optional string battleId = 2;</code>
     */
    boolean hasBattleId();
    /**
     * <code>optional string battleId = 2;</code>
     */
    java.lang.String getBattleId();
    /**
     * <code>optional string battleId = 2;</code>
     */
    com.google.protobuf.ByteString
        getBattleIdBytes();

    // repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    java.util.List<org.zhangqi.proto.Common.UserBriefInfo> 
        getUserBriefInfosList();
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    org.zhangqi.proto.Common.UserBriefInfo getUserBriefInfos(int index);
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    int getUserBriefInfosCount();
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    java.util.List<? extends org.zhangqi.proto.Common.UserBriefInfoOrBuilder> 
        getUserBriefInfosOrBuilderList();
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    org.zhangqi.proto.Common.UserBriefInfoOrBuilder getUserBriefInfosOrBuilder(
        int index);

    // optional int64 battleStartTimestamp = 4;
    /**
     * <code>optional int64 battleStartTimestamp = 4;</code>
     *
     * <pre>
     * 战斗开始的时间戳
     * </pre>
     */
    boolean hasBattleStartTimestamp();
    /**
     * <code>optional int64 battleStartTimestamp = 4;</code>
     *
     * <pre>
     * 战斗开始的时间戳
     * </pre>
     */
    long getBattleStartTimestamp();

    // optional int64 battleEndTimestamp = 5;
    /**
     * <code>optional int64 battleEndTimestamp = 5;</code>
     *
     * <pre>
     * 战斗结束的时间戳
     * </pre>
     */
    boolean hasBattleEndTimestamp();
    /**
     * <code>optional int64 battleEndTimestamp = 5;</code>
     *
     * <pre>
     * 战斗结束的时间戳
     * </pre>
     */
    long getBattleEndTimestamp();

    // optional int32 turnCount = 6;
    /**
     * <code>optional int32 turnCount = 6;</code>
     *
     * <pre>
     * 对战了几回合
     * </pre>
     */
    boolean hasTurnCount();
    /**
     * <code>optional int32 turnCount = 6;</code>
     *
     * <pre>
     * 对战了几回合
     * </pre>
     */
    int getTurnCount();

    // optional int32 winnerUserId = 7;
    /**
     * <code>optional int32 winnerUserId = 7;</code>
     *
     * <pre>
     * 获胜者的userId（平局为0）
     * </pre>
     */
    boolean hasWinnerUserId();
    /**
     * <code>optional int32 winnerUserId = 7;</code>
     *
     * <pre>
     * 获胜者的userId（平局为0）
     * </pre>
     */
    int getWinnerUserId();

    // optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;
    /**
     * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;</code>
     *
     * <pre>
     * 游戏结束的原因
     * </pre>
     */
    boolean hasGameOverReason();
    /**
     * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;</code>
     *
     * <pre>
     * 游戏结束的原因
     * </pre>
     */
    org.zhangqi.proto.BaseBattle.GameOverReasonEnum getGameOverReason();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.BattleRecordData}
   */
  public static final class BattleRecordData extends
      com.google.protobuf.GeneratedMessage
      implements BattleRecordDataOrBuilder {
    // Use BattleRecordData.newBuilder() to construct.
    private BattleRecordData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BattleRecordData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final BattleRecordData defaultInstance;
    public static BattleRecordData getDefaultInstance() {
      return defaultInstance;
    }

    public BattleRecordData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BattleRecordData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              org.zhangqi.proto.Common.BattleTypeEnum value = org.zhangqi.proto.Common.BattleTypeEnum.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                battleType_ = value;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              battleId_ = input.readBytes();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                userBriefInfos_ = new java.util.ArrayList<org.zhangqi.proto.Common.UserBriefInfo>();
                mutable_bitField0_ |= 0x00000004;
              }
              userBriefInfos_.add(input.readMessage(org.zhangqi.proto.Common.UserBriefInfo.PARSER, extensionRegistry));
              break;
            }
            case 32: {
              bitField0_ |= 0x00000004;
              battleStartTimestamp_ = input.readInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000008;
              battleEndTimestamp_ = input.readInt64();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000010;
              turnCount_ = input.readInt32();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000020;
              winnerUserId_ = input.readInt32();
              break;
            }
            case 64: {
              int rawValue = input.readEnum();
              org.zhangqi.proto.BaseBattle.GameOverReasonEnum value = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(8, rawValue);
              } else {
                bitField0_ |= 0x00000040;
                gameOverReason_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          userBriefInfos_ = java.util.Collections.unmodifiableList(userBriefInfos_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleRecordData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleRecordData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.BattleRecordData.class, org.zhangqi.proto.BaseBattle.BattleRecordData.Builder.class);
    }

    public static com.google.protobuf.Parser<BattleRecordData> PARSER =
        new com.google.protobuf.AbstractParser<BattleRecordData>() {
      public BattleRecordData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new BattleRecordData(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<BattleRecordData> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;
    public static final int BATTLETYPE_FIELD_NUMBER = 1;
    private org.zhangqi.proto.Common.BattleTypeEnum battleType_;
    /**
     * <code>optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;</code>
     */
    public boolean hasBattleType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;</code>
     */
    public org.zhangqi.proto.Common.BattleTypeEnum getBattleType() {
      return battleType_;
    }

    // optional string battleId = 2;
    public static final int BATTLEID_FIELD_NUMBER = 2;
    private java.lang.Object battleId_;
    /**
     * <code>optional string battleId = 2;</code>
     */
    public boolean hasBattleId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string battleId = 2;</code>
     */
    public java.lang.String getBattleId() {
      java.lang.Object ref = battleId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          battleId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string battleId = 2;</code>
     */
    public com.google.protobuf.ByteString
        getBattleIdBytes() {
      java.lang.Object ref = battleId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        battleId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;
    public static final int USERBRIEFINFOS_FIELD_NUMBER = 3;
    private java.util.List<org.zhangqi.proto.Common.UserBriefInfo> userBriefInfos_;
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public java.util.List<org.zhangqi.proto.Common.UserBriefInfo> getUserBriefInfosList() {
      return userBriefInfos_;
    }
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public java.util.List<? extends org.zhangqi.proto.Common.UserBriefInfoOrBuilder> 
        getUserBriefInfosOrBuilderList() {
      return userBriefInfos_;
    }
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public int getUserBriefInfosCount() {
      return userBriefInfos_.size();
    }
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public org.zhangqi.proto.Common.UserBriefInfo getUserBriefInfos(int index) {
      return userBriefInfos_.get(index);
    }
    /**
     * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
     *
     * <pre>
     * 玩家简略信息（按行动顺序排列）
     * </pre>
     */
    public org.zhangqi.proto.Common.UserBriefInfoOrBuilder getUserBriefInfosOrBuilder(
        int index) {
      return userBriefInfos_.get(index);
    }

    // optional int64 battleStartTimestamp = 4;
    public static final int BATTLESTARTTIMESTAMP_FIELD_NUMBER = 4;
    private long battleStartTimestamp_;
    /**
     * <code>optional int64 battleStartTimestamp = 4;</code>
     *
     * <pre>
     * 战斗开始的时间戳
     * </pre>
     */
    public boolean hasBattleStartTimestamp() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 battleStartTimestamp = 4;</code>
     *
     * <pre>
     * 战斗开始的时间戳
     * </pre>
     */
    public long getBattleStartTimestamp() {
      return battleStartTimestamp_;
    }

    // optional int64 battleEndTimestamp = 5;
    public static final int BATTLEENDTIMESTAMP_FIELD_NUMBER = 5;
    private long battleEndTimestamp_;
    /**
     * <code>optional int64 battleEndTimestamp = 5;</code>
     *
     * <pre>
     * 战斗结束的时间戳
     * </pre>
     */
    public boolean hasBattleEndTimestamp() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 battleEndTimestamp = 5;</code>
     *
     * <pre>
     * 战斗结束的时间戳
     * </pre>
     */
    public long getBattleEndTimestamp() {
      return battleEndTimestamp_;
    }

    // optional int32 turnCount = 6;
    public static final int TURNCOUNT_FIELD_NUMBER = 6;
    private int turnCount_;
    /**
     * <code>optional int32 turnCount = 6;</code>
     *
     * <pre>
     * 对战了几回合
     * </pre>
     */
    public boolean hasTurnCount() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int32 turnCount = 6;</code>
     *
     * <pre>
     * 对战了几回合
     * </pre>
     */
    public int getTurnCount() {
      return turnCount_;
    }

    // optional int32 winnerUserId = 7;
    public static final int WINNERUSERID_FIELD_NUMBER = 7;
    private int winnerUserId_;
    /**
     * <code>optional int32 winnerUserId = 7;</code>
     *
     * <pre>
     * 获胜者的userId（平局为0）
     * </pre>
     */
    public boolean hasWinnerUserId() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int32 winnerUserId = 7;</code>
     *
     * <pre>
     * 获胜者的userId（平局为0）
     * </pre>
     */
    public int getWinnerUserId() {
      return winnerUserId_;
    }

    // optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;
    public static final int GAMEOVERREASON_FIELD_NUMBER = 8;
    private org.zhangqi.proto.BaseBattle.GameOverReasonEnum gameOverReason_;
    /**
     * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;</code>
     *
     * <pre>
     * 游戏结束的原因
     * </pre>
     */
    public boolean hasGameOverReason() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;</code>
     *
     * <pre>
     * 游戏结束的原因
     * </pre>
     */
    public org.zhangqi.proto.BaseBattle.GameOverReasonEnum getGameOverReason() {
      return gameOverReason_;
    }

    private void initFields() {
      battleType_ = org.zhangqi.proto.Common.BattleTypeEnum.BattleTypeTwoPlayer;
      battleId_ = "";
      userBriefInfos_ = java.util.Collections.emptyList();
      battleStartTimestamp_ = 0L;
      battleEndTimestamp_ = 0L;
      turnCount_ = 0;
      winnerUserId_ = 0;
      gameOverReason_ = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.GameOverPlayerWin;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, battleType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getBattleIdBytes());
      }
      for (int i = 0; i < userBriefInfos_.size(); i++) {
        output.writeMessage(3, userBriefInfos_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(4, battleStartTimestamp_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(5, battleEndTimestamp_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(6, turnCount_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(7, winnerUserId_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeEnum(8, gameOverReason_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, battleType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getBattleIdBytes());
      }
      for (int i = 0; i < userBriefInfos_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, userBriefInfos_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, battleStartTimestamp_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, battleEndTimestamp_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, turnCount_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, winnerUserId_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(8, gameOverReason_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.BattleRecordData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.BattleRecordData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.BattleRecordData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.BattleRecordDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleRecordData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleRecordData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.BattleRecordData.class, org.zhangqi.proto.BaseBattle.BattleRecordData.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.BattleRecordData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUserBriefInfosFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        battleType_ = org.zhangqi.proto.Common.BattleTypeEnum.BattleTypeTwoPlayer;
        bitField0_ = (bitField0_ & ~0x00000001);
        battleId_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (userBriefInfosBuilder_ == null) {
          userBriefInfos_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          userBriefInfosBuilder_.clear();
        }
        battleStartTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        battleEndTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        turnCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        winnerUserId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        gameOverReason_ = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.GameOverPlayerWin;
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleRecordData_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.BattleRecordData getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.BattleRecordData.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.BattleRecordData build() {
        org.zhangqi.proto.BaseBattle.BattleRecordData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.BattleRecordData buildPartial() {
        org.zhangqi.proto.BaseBattle.BattleRecordData result = new org.zhangqi.proto.BaseBattle.BattleRecordData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.battleType_ = battleType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.battleId_ = battleId_;
        if (userBriefInfosBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            userBriefInfos_ = java.util.Collections.unmodifiableList(userBriefInfos_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.userBriefInfos_ = userBriefInfos_;
        } else {
          result.userBriefInfos_ = userBriefInfosBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.battleStartTimestamp_ = battleStartTimestamp_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.battleEndTimestamp_ = battleEndTimestamp_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.turnCount_ = turnCount_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.winnerUserId_ = winnerUserId_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000040;
        }
        result.gameOverReason_ = gameOverReason_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.BattleRecordData) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.BattleRecordData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.BattleRecordData other) {
        if (other == org.zhangqi.proto.BaseBattle.BattleRecordData.getDefaultInstance()) return this;
        if (other.hasBattleType()) {
          setBattleType(other.getBattleType());
        }
        if (other.hasBattleId()) {
          bitField0_ |= 0x00000002;
          battleId_ = other.battleId_;
          onChanged();
        }
        if (userBriefInfosBuilder_ == null) {
          if (!other.userBriefInfos_.isEmpty()) {
            if (userBriefInfos_.isEmpty()) {
              userBriefInfos_ = other.userBriefInfos_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureUserBriefInfosIsMutable();
              userBriefInfos_.addAll(other.userBriefInfos_);
            }
            onChanged();
          }
        } else {
          if (!other.userBriefInfos_.isEmpty()) {
            if (userBriefInfosBuilder_.isEmpty()) {
              userBriefInfosBuilder_.dispose();
              userBriefInfosBuilder_ = null;
              userBriefInfos_ = other.userBriefInfos_;
              bitField0_ = (bitField0_ & ~0x00000004);
              userBriefInfosBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUserBriefInfosFieldBuilder() : null;
            } else {
              userBriefInfosBuilder_.addAllMessages(other.userBriefInfos_);
            }
          }
        }
        if (other.hasBattleStartTimestamp()) {
          setBattleStartTimestamp(other.getBattleStartTimestamp());
        }
        if (other.hasBattleEndTimestamp()) {
          setBattleEndTimestamp(other.getBattleEndTimestamp());
        }
        if (other.hasTurnCount()) {
          setTurnCount(other.getTurnCount());
        }
        if (other.hasWinnerUserId()) {
          setWinnerUserId(other.getWinnerUserId());
        }
        if (other.hasGameOverReason()) {
          setGameOverReason(other.getGameOverReason());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.BattleRecordData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.BattleRecordData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;
      private org.zhangqi.proto.Common.BattleTypeEnum battleType_ = org.zhangqi.proto.Common.BattleTypeEnum.BattleTypeTwoPlayer;
      /**
       * <code>optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;</code>
       */
      public boolean hasBattleType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;</code>
       */
      public org.zhangqi.proto.Common.BattleTypeEnum getBattleType() {
        return battleType_;
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;</code>
       */
      public Builder setBattleType(org.zhangqi.proto.Common.BattleTypeEnum value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        battleType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleTypeEnum battleType = 1;</code>
       */
      public Builder clearBattleType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        battleType_ = org.zhangqi.proto.Common.BattleTypeEnum.BattleTypeTwoPlayer;
        onChanged();
        return this;
      }

      // optional string battleId = 2;
      private java.lang.Object battleId_ = "";
      /**
       * <code>optional string battleId = 2;</code>
       */
      public boolean hasBattleId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string battleId = 2;</code>
       */
      public java.lang.String getBattleId() {
        java.lang.Object ref = battleId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          battleId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string battleId = 2;</code>
       */
      public com.google.protobuf.ByteString
          getBattleIdBytes() {
        java.lang.Object ref = battleId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          battleId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string battleId = 2;</code>
       */
      public Builder setBattleId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        battleId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string battleId = 2;</code>
       */
      public Builder clearBattleId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        battleId_ = getDefaultInstance().getBattleId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string battleId = 2;</code>
       */
      public Builder setBattleIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        battleId_ = value;
        onChanged();
        return this;
      }

      // repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;
      private java.util.List<org.zhangqi.proto.Common.UserBriefInfo> userBriefInfos_ =
        java.util.Collections.emptyList();
      private void ensureUserBriefInfosIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          userBriefInfos_ = new java.util.ArrayList<org.zhangqi.proto.Common.UserBriefInfo>(userBriefInfos_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.zhangqi.proto.Common.UserBriefInfo, org.zhangqi.proto.Common.UserBriefInfo.Builder, org.zhangqi.proto.Common.UserBriefInfoOrBuilder> userBriefInfosBuilder_;

      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public java.util.List<org.zhangqi.proto.Common.UserBriefInfo> getUserBriefInfosList() {
        if (userBriefInfosBuilder_ == null) {
          return java.util.Collections.unmodifiableList(userBriefInfos_);
        } else {
          return userBriefInfosBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public int getUserBriefInfosCount() {
        if (userBriefInfosBuilder_ == null) {
          return userBriefInfos_.size();
        } else {
          return userBriefInfosBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfo getUserBriefInfos(int index) {
        if (userBriefInfosBuilder_ == null) {
          return userBriefInfos_.get(index);
        } else {
          return userBriefInfosBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder setUserBriefInfos(
          int index, org.zhangqi.proto.Common.UserBriefInfo value) {
        if (userBriefInfosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.set(index, value);
          onChanged();
        } else {
          userBriefInfosBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder setUserBriefInfos(
          int index, org.zhangqi.proto.Common.UserBriefInfo.Builder builderForValue) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.set(index, builderForValue.build());
          onChanged();
        } else {
          userBriefInfosBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addUserBriefInfos(org.zhangqi.proto.Common.UserBriefInfo value) {
        if (userBriefInfosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.add(value);
          onChanged();
        } else {
          userBriefInfosBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addUserBriefInfos(
          int index, org.zhangqi.proto.Common.UserBriefInfo value) {
        if (userBriefInfosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.add(index, value);
          onChanged();
        } else {
          userBriefInfosBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addUserBriefInfos(
          org.zhangqi.proto.Common.UserBriefInfo.Builder builderForValue) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.add(builderForValue.build());
          onChanged();
        } else {
          userBriefInfosBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addUserBriefInfos(
          int index, org.zhangqi.proto.Common.UserBriefInfo.Builder builderForValue) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.add(index, builderForValue.build());
          onChanged();
        } else {
          userBriefInfosBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder addAllUserBriefInfos(
          java.lang.Iterable<? extends org.zhangqi.proto.Common.UserBriefInfo> values) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          super.addAll(values, userBriefInfos_);
          onChanged();
        } else {
          userBriefInfosBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder clearUserBriefInfos() {
        if (userBriefInfosBuilder_ == null) {
          userBriefInfos_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          userBriefInfosBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public Builder removeUserBriefInfos(int index) {
        if (userBriefInfosBuilder_ == null) {
          ensureUserBriefInfosIsMutable();
          userBriefInfos_.remove(index);
          onChanged();
        } else {
          userBriefInfosBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfo.Builder getUserBriefInfosBuilder(
          int index) {
        return getUserBriefInfosFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfoOrBuilder getUserBriefInfosOrBuilder(
          int index) {
        if (userBriefInfosBuilder_ == null) {
          return userBriefInfos_.get(index);  } else {
          return userBriefInfosBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public java.util.List<? extends org.zhangqi.proto.Common.UserBriefInfoOrBuilder> 
           getUserBriefInfosOrBuilderList() {
        if (userBriefInfosBuilder_ != null) {
          return userBriefInfosBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(userBriefInfos_);
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfo.Builder addUserBriefInfosBuilder() {
        return getUserBriefInfosFieldBuilder().addBuilder(
            org.zhangqi.proto.Common.UserBriefInfo.getDefaultInstance());
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public org.zhangqi.proto.Common.UserBriefInfo.Builder addUserBriefInfosBuilder(
          int index) {
        return getUserBriefInfosFieldBuilder().addBuilder(
            index, org.zhangqi.proto.Common.UserBriefInfo.getDefaultInstance());
      }
      /**
       * <code>repeated .org.zhangqi.proto.UserBriefInfo userBriefInfos = 3;</code>
       *
       * <pre>
       * 玩家简略信息（按行动顺序排列）
       * </pre>
       */
      public java.util.List<org.zhangqi.proto.Common.UserBriefInfo.Builder> 
           getUserBriefInfosBuilderList() {
        return getUserBriefInfosFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.zhangqi.proto.Common.UserBriefInfo, org.zhangqi.proto.Common.UserBriefInfo.Builder, org.zhangqi.proto.Common.UserBriefInfoOrBuilder> 
          getUserBriefInfosFieldBuilder() {
        if (userBriefInfosBuilder_ == null) {
          userBriefInfosBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.zhangqi.proto.Common.UserBriefInfo, org.zhangqi.proto.Common.UserBriefInfo.Builder, org.zhangqi.proto.Common.UserBriefInfoOrBuilder>(
                  userBriefInfos_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          userBriefInfos_ = null;
        }
        return userBriefInfosBuilder_;
      }

      // optional int64 battleStartTimestamp = 4;
      private long battleStartTimestamp_ ;
      /**
       * <code>optional int64 battleStartTimestamp = 4;</code>
       *
       * <pre>
       * 战斗开始的时间戳
       * </pre>
       */
      public boolean hasBattleStartTimestamp() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 battleStartTimestamp = 4;</code>
       *
       * <pre>
       * 战斗开始的时间戳
       * </pre>
       */
      public long getBattleStartTimestamp() {
        return battleStartTimestamp_;
      }
      /**
       * <code>optional int64 battleStartTimestamp = 4;</code>
       *
       * <pre>
       * 战斗开始的时间戳
       * </pre>
       */
      public Builder setBattleStartTimestamp(long value) {
        bitField0_ |= 0x00000008;
        battleStartTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 battleStartTimestamp = 4;</code>
       *
       * <pre>
       * 战斗开始的时间戳
       * </pre>
       */
      public Builder clearBattleStartTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000008);
        battleStartTimestamp_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 battleEndTimestamp = 5;
      private long battleEndTimestamp_ ;
      /**
       * <code>optional int64 battleEndTimestamp = 5;</code>
       *
       * <pre>
       * 战斗结束的时间戳
       * </pre>
       */
      public boolean hasBattleEndTimestamp() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 battleEndTimestamp = 5;</code>
       *
       * <pre>
       * 战斗结束的时间戳
       * </pre>
       */
      public long getBattleEndTimestamp() {
        return battleEndTimestamp_;
      }
      /**
       * <code>optional int64 battleEndTimestamp = 5;</code>
       *
       * <pre>
       * 战斗结束的时间戳
       * </pre>
       */
      public Builder setBattleEndTimestamp(long value) {
        bitField0_ |= 0x00000010;
        battleEndTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 battleEndTimestamp = 5;</code>
       *
       * <pre>
       * 战斗结束的时间戳
       * </pre>
       */
      public Builder clearBattleEndTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000010);
        battleEndTimestamp_ = 0L;
        onChanged();
        return this;
      }

      // optional int32 turnCount = 6;
      private int turnCount_ ;
      /**
       * <code>optional int32 turnCount = 6;</code>
       *
       * <pre>
       * 对战了几回合
       * </pre>
       */
      public boolean hasTurnCount() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int32 turnCount = 6;</code>
       *
       * <pre>
       * 对战了几回合
       * </pre>
       */
      public int getTurnCount() {
        return turnCount_;
      }
      /**
       * <code>optional int32 turnCount = 6;</code>
       *
       * <pre>
       * 对战了几回合
       * </pre>
       */
      public Builder setTurnCount(int value) {
        bitField0_ |= 0x00000020;
        turnCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 turnCount = 6;</code>
       *
       * <pre>
       * 对战了几回合
       * </pre>
       */
      public Builder clearTurnCount() {
        bitField0_ = (bitField0_ & ~0x00000020);
        turnCount_ = 0;
        onChanged();
        return this;
      }

      // optional int32 winnerUserId = 7;
      private int winnerUserId_ ;
      /**
       * <code>optional int32 winnerUserId = 7;</code>
       *
       * <pre>
       * 获胜者的userId（平局为0）
       * </pre>
       */
      public boolean hasWinnerUserId() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int32 winnerUserId = 7;</code>
       *
       * <pre>
       * 获胜者的userId（平局为0）
       * </pre>
       */
      public int getWinnerUserId() {
        return winnerUserId_;
      }
      /**
       * <code>optional int32 winnerUserId = 7;</code>
       *
       * <pre>
       * 获胜者的userId（平局为0）
       * </pre>
       */
      public Builder setWinnerUserId(int value) {
        bitField0_ |= 0x00000040;
        winnerUserId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 winnerUserId = 7;</code>
       *
       * <pre>
       * 获胜者的userId（平局为0）
       * </pre>
       */
      public Builder clearWinnerUserId() {
        bitField0_ = (bitField0_ & ~0x00000040);
        winnerUserId_ = 0;
        onChanged();
        return this;
      }

      // optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;
      private org.zhangqi.proto.BaseBattle.GameOverReasonEnum gameOverReason_ = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.GameOverPlayerWin;
      /**
       * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;</code>
       *
       * <pre>
       * 游戏结束的原因
       * </pre>
       */
      public boolean hasGameOverReason() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;</code>
       *
       * <pre>
       * 游戏结束的原因
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.GameOverReasonEnum getGameOverReason() {
        return gameOverReason_;
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;</code>
       *
       * <pre>
       * 游戏结束的原因
       * </pre>
       */
      public Builder setGameOverReason(org.zhangqi.proto.BaseBattle.GameOverReasonEnum value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000080;
        gameOverReason_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 8;</code>
       *
       * <pre>
       * 游戏结束的原因
       * </pre>
       */
      public Builder clearGameOverReason() {
        bitField0_ = (bitField0_ & ~0x00000080);
        gameOverReason_ = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.GameOverPlayerWin;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.BattleRecordData)
    }

    static {
      defaultInstance = new BattleRecordData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.BattleRecordData)
  }

  public interface GetBattleInfoRequestOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.GetBattleInfoRequest}
   *
   * <pre>
   * 获取当前所在对局的信息（GetBattleInfo = 6001）
   * </pre>
   */
  public static final class GetBattleInfoRequest extends
      com.google.protobuf.GeneratedMessage
      implements GetBattleInfoRequestOrBuilder {
    // Use GetBattleInfoRequest.newBuilder() to construct.
    private GetBattleInfoRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetBattleInfoRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetBattleInfoRequest defaultInstance;
    public static GetBattleInfoRequest getDefaultInstance() {
      return defaultInstance;
    }

    public GetBattleInfoRequest getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetBattleInfoRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.GetBattleInfoRequest.class, org.zhangqi.proto.BaseBattle.GetBattleInfoRequest.Builder.class);
    }

    public static com.google.protobuf.Parser<GetBattleInfoRequest> PARSER =
        new com.google.protobuf.AbstractParser<GetBattleInfoRequest>() {
      public GetBattleInfoRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetBattleInfoRequest(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetBattleInfoRequest> getParserForType() {
      return PARSER;
    }

    private void initFields() {
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.GetBattleInfoRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.GetBattleInfoRequest}
     *
     * <pre>
     * 获取当前所在对局的信息（GetBattleInfo = 6001）
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.GetBattleInfoRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.GetBattleInfoRequest.class, org.zhangqi.proto.BaseBattle.GetBattleInfoRequest.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.GetBattleInfoRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoRequest_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.GetBattleInfoRequest getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.GetBattleInfoRequest.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.GetBattleInfoRequest build() {
        org.zhangqi.proto.BaseBattle.GetBattleInfoRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.GetBattleInfoRequest buildPartial() {
        org.zhangqi.proto.BaseBattle.GetBattleInfoRequest result = new org.zhangqi.proto.BaseBattle.GetBattleInfoRequest(this);
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.GetBattleInfoRequest) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.GetBattleInfoRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.GetBattleInfoRequest other) {
        if (other == org.zhangqi.proto.BaseBattle.GetBattleInfoRequest.getDefaultInstance()) return this;
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.GetBattleInfoRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.GetBattleInfoRequest) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.GetBattleInfoRequest)
    }

    static {
      defaultInstance = new GetBattleInfoRequest(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.GetBattleInfoRequest)
  }

  public interface GetBattleInfoResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .org.zhangqi.proto.BattleInfo battleInfo = 1;
    /**
     * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
     */
    boolean hasBattleInfo();
    /**
     * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.BattleInfo getBattleInfo();
    /**
     * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.BattleInfoOrBuilder getBattleInfoOrBuilder();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.GetBattleInfoResponse}
   */
  public static final class GetBattleInfoResponse extends
      com.google.protobuf.GeneratedMessage
      implements GetBattleInfoResponseOrBuilder {
    // Use GetBattleInfoResponse.newBuilder() to construct.
    private GetBattleInfoResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetBattleInfoResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetBattleInfoResponse defaultInstance;
    public static GetBattleInfoResponse getDefaultInstance() {
      return defaultInstance;
    }

    public GetBattleInfoResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetBattleInfoResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              org.zhangqi.proto.BaseBattle.BattleInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = battleInfo_.toBuilder();
              }
              battleInfo_ = input.readMessage(org.zhangqi.proto.BaseBattle.BattleInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(battleInfo_);
                battleInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.GetBattleInfoResponse.class, org.zhangqi.proto.BaseBattle.GetBattleInfoResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<GetBattleInfoResponse> PARSER =
        new com.google.protobuf.AbstractParser<GetBattleInfoResponse>() {
      public GetBattleInfoResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetBattleInfoResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetBattleInfoResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .org.zhangqi.proto.BattleInfo battleInfo = 1;
    public static final int BATTLEINFO_FIELD_NUMBER = 1;
    private org.zhangqi.proto.BaseBattle.BattleInfo battleInfo_;
    /**
     * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
     */
    public boolean hasBattleInfo() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.BattleInfo getBattleInfo() {
      return battleInfo_;
    }
    /**
     * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.BattleInfoOrBuilder getBattleInfoOrBuilder() {
      return battleInfo_;
    }

    private void initFields() {
      battleInfo_ = org.zhangqi.proto.BaseBattle.BattleInfo.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, battleInfo_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, battleInfo_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.GetBattleInfoResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.GetBattleInfoResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.GetBattleInfoResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.GetBattleInfoResponse.class, org.zhangqi.proto.BaseBattle.GetBattleInfoResponse.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.GetBattleInfoResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getBattleInfoFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (battleInfoBuilder_ == null) {
          battleInfo_ = org.zhangqi.proto.BaseBattle.BattleInfo.getDefaultInstance();
        } else {
          battleInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GetBattleInfoResponse_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.GetBattleInfoResponse getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.GetBattleInfoResponse.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.GetBattleInfoResponse build() {
        org.zhangqi.proto.BaseBattle.GetBattleInfoResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.GetBattleInfoResponse buildPartial() {
        org.zhangqi.proto.BaseBattle.GetBattleInfoResponse result = new org.zhangqi.proto.BaseBattle.GetBattleInfoResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (battleInfoBuilder_ == null) {
          result.battleInfo_ = battleInfo_;
        } else {
          result.battleInfo_ = battleInfoBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.GetBattleInfoResponse) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.GetBattleInfoResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.GetBattleInfoResponse other) {
        if (other == org.zhangqi.proto.BaseBattle.GetBattleInfoResponse.getDefaultInstance()) return this;
        if (other.hasBattleInfo()) {
          mergeBattleInfo(other.getBattleInfo());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.GetBattleInfoResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.GetBattleInfoResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .org.zhangqi.proto.BattleInfo battleInfo = 1;
      private org.zhangqi.proto.BaseBattle.BattleInfo battleInfo_ = org.zhangqi.proto.BaseBattle.BattleInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.BattleInfo, org.zhangqi.proto.BaseBattle.BattleInfo.Builder, org.zhangqi.proto.BaseBattle.BattleInfoOrBuilder> battleInfoBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
       */
      public boolean hasBattleInfo() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.BattleInfo getBattleInfo() {
        if (battleInfoBuilder_ == null) {
          return battleInfo_;
        } else {
          return battleInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
       */
      public Builder setBattleInfo(org.zhangqi.proto.BaseBattle.BattleInfo value) {
        if (battleInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          battleInfo_ = value;
          onChanged();
        } else {
          battleInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
       */
      public Builder setBattleInfo(
          org.zhangqi.proto.BaseBattle.BattleInfo.Builder builderForValue) {
        if (battleInfoBuilder_ == null) {
          battleInfo_ = builderForValue.build();
          onChanged();
        } else {
          battleInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
       */
      public Builder mergeBattleInfo(org.zhangqi.proto.BaseBattle.BattleInfo value) {
        if (battleInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              battleInfo_ != org.zhangqi.proto.BaseBattle.BattleInfo.getDefaultInstance()) {
            battleInfo_ =
              org.zhangqi.proto.BaseBattle.BattleInfo.newBuilder(battleInfo_).mergeFrom(value).buildPartial();
          } else {
            battleInfo_ = value;
          }
          onChanged();
        } else {
          battleInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
       */
      public Builder clearBattleInfo() {
        if (battleInfoBuilder_ == null) {
          battleInfo_ = org.zhangqi.proto.BaseBattle.BattleInfo.getDefaultInstance();
          onChanged();
        } else {
          battleInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.BattleInfo.Builder getBattleInfoBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getBattleInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.BattleInfoOrBuilder getBattleInfoOrBuilder() {
        if (battleInfoBuilder_ != null) {
          return battleInfoBuilder_.getMessageOrBuilder();
        } else {
          return battleInfo_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.BattleInfo battleInfo = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.BattleInfo, org.zhangqi.proto.BaseBattle.BattleInfo.Builder, org.zhangqi.proto.BaseBattle.BattleInfoOrBuilder> 
          getBattleInfoFieldBuilder() {
        if (battleInfoBuilder_ == null) {
          battleInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.BattleInfo, org.zhangqi.proto.BaseBattle.BattleInfo.Builder, org.zhangqi.proto.BaseBattle.BattleInfoOrBuilder>(
                  battleInfo_,
                  getParentForChildren(),
                  isClean());
          battleInfo_ = null;
        }
        return battleInfoBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.GetBattleInfoResponse)
    }

    static {
      defaultInstance = new GetBattleInfoResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.GetBattleInfoResponse)
  }

  public interface ConcedeRequestOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.ConcedeRequest}
   *
   * <pre>
   * 投降认输（Concede = 6002）
   * </pre>
   */
  public static final class ConcedeRequest extends
      com.google.protobuf.GeneratedMessage
      implements ConcedeRequestOrBuilder {
    // Use ConcedeRequest.newBuilder() to construct.
    private ConcedeRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ConcedeRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ConcedeRequest defaultInstance;
    public static ConcedeRequest getDefaultInstance() {
      return defaultInstance;
    }

    public ConcedeRequest getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ConcedeRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.ConcedeRequest.class, org.zhangqi.proto.BaseBattle.ConcedeRequest.Builder.class);
    }

    public static com.google.protobuf.Parser<ConcedeRequest> PARSER =
        new com.google.protobuf.AbstractParser<ConcedeRequest>() {
      public ConcedeRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ConcedeRequest(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ConcedeRequest> getParserForType() {
      return PARSER;
    }

    private void initFields() {
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.ConcedeRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.ConcedeRequest}
     *
     * <pre>
     * 投降认输（Concede = 6002）
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.ConcedeRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.ConcedeRequest.class, org.zhangqi.proto.BaseBattle.ConcedeRequest.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.ConcedeRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeRequest_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.ConcedeRequest getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.ConcedeRequest.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.ConcedeRequest build() {
        org.zhangqi.proto.BaseBattle.ConcedeRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.ConcedeRequest buildPartial() {
        org.zhangqi.proto.BaseBattle.ConcedeRequest result = new org.zhangqi.proto.BaseBattle.ConcedeRequest(this);
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.ConcedeRequest) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.ConcedeRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.ConcedeRequest other) {
        if (other == org.zhangqi.proto.BaseBattle.ConcedeRequest.getDefaultInstance()) return this;
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.ConcedeRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.ConcedeRequest) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.ConcedeRequest)
    }

    static {
      defaultInstance = new ConcedeRequest(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.ConcedeRequest)
  }

  public interface ConcedeResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .org.zhangqi.proto.EventMsgList eventList = 1;
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    boolean hasEventList();
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.EventMsgList getEventList();
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder getEventListOrBuilder();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.ConcedeResponse}
   */
  public static final class ConcedeResponse extends
      com.google.protobuf.GeneratedMessage
      implements ConcedeResponseOrBuilder {
    // Use ConcedeResponse.newBuilder() to construct.
    private ConcedeResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ConcedeResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ConcedeResponse defaultInstance;
    public static ConcedeResponse getDefaultInstance() {
      return defaultInstance;
    }

    public ConcedeResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ConcedeResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              org.zhangqi.proto.BaseBattle.EventMsgList.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = eventList_.toBuilder();
              }
              eventList_ = input.readMessage(org.zhangqi.proto.BaseBattle.EventMsgList.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(eventList_);
                eventList_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.ConcedeResponse.class, org.zhangqi.proto.BaseBattle.ConcedeResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<ConcedeResponse> PARSER =
        new com.google.protobuf.AbstractParser<ConcedeResponse>() {
      public ConcedeResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ConcedeResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ConcedeResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .org.zhangqi.proto.EventMsgList eventList = 1;
    public static final int EVENTLIST_FIELD_NUMBER = 1;
    private org.zhangqi.proto.BaseBattle.EventMsgList eventList_;
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    public boolean hasEventList() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.EventMsgList getEventList() {
      return eventList_;
    }
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder getEventListOrBuilder() {
      return eventList_;
    }

    private void initFields() {
      eventList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, eventList_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, eventList_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ConcedeResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.ConcedeResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.ConcedeResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.ConcedeResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.ConcedeResponse.class, org.zhangqi.proto.BaseBattle.ConcedeResponse.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.ConcedeResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getEventListFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (eventListBuilder_ == null) {
          eventList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
        } else {
          eventListBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ConcedeResponse_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.ConcedeResponse getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.ConcedeResponse.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.ConcedeResponse build() {
        org.zhangqi.proto.BaseBattle.ConcedeResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.ConcedeResponse buildPartial() {
        org.zhangqi.proto.BaseBattle.ConcedeResponse result = new org.zhangqi.proto.BaseBattle.ConcedeResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (eventListBuilder_ == null) {
          result.eventList_ = eventList_;
        } else {
          result.eventList_ = eventListBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.ConcedeResponse) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.ConcedeResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.ConcedeResponse other) {
        if (other == org.zhangqi.proto.BaseBattle.ConcedeResponse.getDefaultInstance()) return this;
        if (other.hasEventList()) {
          mergeEventList(other.getEventList());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.ConcedeResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.ConcedeResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .org.zhangqi.proto.EventMsgList eventList = 1;
      private org.zhangqi.proto.BaseBattle.EventMsgList eventList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.EventMsgList, org.zhangqi.proto.BaseBattle.EventMsgList.Builder, org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder> eventListBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public boolean hasEventList() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgList getEventList() {
        if (eventListBuilder_ == null) {
          return eventList_;
        } else {
          return eventListBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public Builder setEventList(org.zhangqi.proto.BaseBattle.EventMsgList value) {
        if (eventListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          eventList_ = value;
          onChanged();
        } else {
          eventListBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public Builder setEventList(
          org.zhangqi.proto.BaseBattle.EventMsgList.Builder builderForValue) {
        if (eventListBuilder_ == null) {
          eventList_ = builderForValue.build();
          onChanged();
        } else {
          eventListBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public Builder mergeEventList(org.zhangqi.proto.BaseBattle.EventMsgList value) {
        if (eventListBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              eventList_ != org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance()) {
            eventList_ =
              org.zhangqi.proto.BaseBattle.EventMsgList.newBuilder(eventList_).mergeFrom(value).buildPartial();
          } else {
            eventList_ = value;
          }
          onChanged();
        } else {
          eventListBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public Builder clearEventList() {
        if (eventListBuilder_ == null) {
          eventList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
          onChanged();
        } else {
          eventListBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgList.Builder getEventListBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getEventListFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder getEventListOrBuilder() {
        if (eventListBuilder_ != null) {
          return eventListBuilder_.getMessageOrBuilder();
        } else {
          return eventList_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.EventMsgList, org.zhangqi.proto.BaseBattle.EventMsgList.Builder, org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder> 
          getEventListFieldBuilder() {
        if (eventListBuilder_ == null) {
          eventListBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.EventMsgList, org.zhangqi.proto.BaseBattle.EventMsgList.Builder, org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder>(
                  eventList_,
                  getParentForChildren(),
                  isClean());
          eventList_ = null;
        }
        return eventListBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.ConcedeResponse)
    }

    static {
      defaultInstance = new ConcedeResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.ConcedeResponse)
  }

  public interface PlacePiecesRequestOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 lastEventNum = 1;
    /**
     * <code>optional int32 lastEventNum = 1;</code>
     *
     * <pre>
     * 对局中上一个事件编号，以此可知客户端是否已同步最新对局信息
     * </pre>
     */
    boolean hasLastEventNum();
    /**
     * <code>optional int32 lastEventNum = 1;</code>
     *
     * <pre>
     * 对局中上一个事件编号，以此可知客户端是否已同步最新对局信息
     * </pre>
     */
    int getLastEventNum();

    // optional int32 index = 2;
    /**
     * <code>optional int32 index = 2;</code>
     *
     * <pre>
     * 落在哪个位置（九宫格0-8的下标位置）
     * </pre>
     */
    boolean hasIndex();
    /**
     * <code>optional int32 index = 2;</code>
     *
     * <pre>
     * 落在哪个位置（九宫格0-8的下标位置）
     * </pre>
     */
    int getIndex();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.PlacePiecesRequest}
   *
   * <pre>
   * 落子（PlacePieces = 6003）
   * </pre>
   */
  public static final class PlacePiecesRequest extends
      com.google.protobuf.GeneratedMessage
      implements PlacePiecesRequestOrBuilder {
    // Use PlacePiecesRequest.newBuilder() to construct.
    private PlacePiecesRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PlacePiecesRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PlacePiecesRequest defaultInstance;
    public static PlacePiecesRequest getDefaultInstance() {
      return defaultInstance;
    }

    public PlacePiecesRequest getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PlacePiecesRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              lastEventNum_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              index_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.PlacePiecesRequest.class, org.zhangqi.proto.BaseBattle.PlacePiecesRequest.Builder.class);
    }

    public static com.google.protobuf.Parser<PlacePiecesRequest> PARSER =
        new com.google.protobuf.AbstractParser<PlacePiecesRequest>() {
      public PlacePiecesRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PlacePiecesRequest(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<PlacePiecesRequest> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 lastEventNum = 1;
    public static final int LASTEVENTNUM_FIELD_NUMBER = 1;
    private int lastEventNum_;
    /**
     * <code>optional int32 lastEventNum = 1;</code>
     *
     * <pre>
     * 对局中上一个事件编号，以此可知客户端是否已同步最新对局信息
     * </pre>
     */
    public boolean hasLastEventNum() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 lastEventNum = 1;</code>
     *
     * <pre>
     * 对局中上一个事件编号，以此可知客户端是否已同步最新对局信息
     * </pre>
     */
    public int getLastEventNum() {
      return lastEventNum_;
    }

    // optional int32 index = 2;
    public static final int INDEX_FIELD_NUMBER = 2;
    private int index_;
    /**
     * <code>optional int32 index = 2;</code>
     *
     * <pre>
     * 落在哪个位置（九宫格0-8的下标位置）
     * </pre>
     */
    public boolean hasIndex() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 index = 2;</code>
     *
     * <pre>
     * 落在哪个位置（九宫格0-8的下标位置）
     * </pre>
     */
    public int getIndex() {
      return index_;
    }

    private void initFields() {
      lastEventNum_ = 0;
      index_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, lastEventNum_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, index_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, lastEventNum_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, index_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.PlacePiecesRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.PlacePiecesRequest}
     *
     * <pre>
     * 落子（PlacePieces = 6003）
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.PlacePiecesRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.PlacePiecesRequest.class, org.zhangqi.proto.BaseBattle.PlacePiecesRequest.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.PlacePiecesRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        lastEventNum_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        index_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesRequest_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.PlacePiecesRequest getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.PlacePiecesRequest.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.PlacePiecesRequest build() {
        org.zhangqi.proto.BaseBattle.PlacePiecesRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.PlacePiecesRequest buildPartial() {
        org.zhangqi.proto.BaseBattle.PlacePiecesRequest result = new org.zhangqi.proto.BaseBattle.PlacePiecesRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.lastEventNum_ = lastEventNum_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.index_ = index_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.PlacePiecesRequest) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.PlacePiecesRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.PlacePiecesRequest other) {
        if (other == org.zhangqi.proto.BaseBattle.PlacePiecesRequest.getDefaultInstance()) return this;
        if (other.hasLastEventNum()) {
          setLastEventNum(other.getLastEventNum());
        }
        if (other.hasIndex()) {
          setIndex(other.getIndex());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.PlacePiecesRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.PlacePiecesRequest) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 lastEventNum = 1;
      private int lastEventNum_ ;
      /**
       * <code>optional int32 lastEventNum = 1;</code>
       *
       * <pre>
       * 对局中上一个事件编号，以此可知客户端是否已同步最新对局信息
       * </pre>
       */
      public boolean hasLastEventNum() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 lastEventNum = 1;</code>
       *
       * <pre>
       * 对局中上一个事件编号，以此可知客户端是否已同步最新对局信息
       * </pre>
       */
      public int getLastEventNum() {
        return lastEventNum_;
      }
      /**
       * <code>optional int32 lastEventNum = 1;</code>
       *
       * <pre>
       * 对局中上一个事件编号，以此可知客户端是否已同步最新对局信息
       * </pre>
       */
      public Builder setLastEventNum(int value) {
        bitField0_ |= 0x00000001;
        lastEventNum_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 lastEventNum = 1;</code>
       *
       * <pre>
       * 对局中上一个事件编号，以此可知客户端是否已同步最新对局信息
       * </pre>
       */
      public Builder clearLastEventNum() {
        bitField0_ = (bitField0_ & ~0x00000001);
        lastEventNum_ = 0;
        onChanged();
        return this;
      }

      // optional int32 index = 2;
      private int index_ ;
      /**
       * <code>optional int32 index = 2;</code>
       *
       * <pre>
       * 落在哪个位置（九宫格0-8的下标位置）
       * </pre>
       */
      public boolean hasIndex() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 index = 2;</code>
       *
       * <pre>
       * 落在哪个位置（九宫格0-8的下标位置）
       * </pre>
       */
      public int getIndex() {
        return index_;
      }
      /**
       * <code>optional int32 index = 2;</code>
       *
       * <pre>
       * 落在哪个位置（九宫格0-8的下标位置）
       * </pre>
       */
      public Builder setIndex(int value) {
        bitField0_ |= 0x00000002;
        index_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 index = 2;</code>
       *
       * <pre>
       * 落在哪个位置（九宫格0-8的下标位置）
       * </pre>
       */
      public Builder clearIndex() {
        bitField0_ = (bitField0_ & ~0x00000002);
        index_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.PlacePiecesRequest)
    }

    static {
      defaultInstance = new PlacePiecesRequest(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.PlacePiecesRequest)
  }

  public interface PlacePiecesResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .org.zhangqi.proto.EventMsgList eventList = 1;
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    boolean hasEventList();
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.EventMsgList getEventList();
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder getEventListOrBuilder();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.PlacePiecesResponse}
   */
  public static final class PlacePiecesResponse extends
      com.google.protobuf.GeneratedMessage
      implements PlacePiecesResponseOrBuilder {
    // Use PlacePiecesResponse.newBuilder() to construct.
    private PlacePiecesResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PlacePiecesResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PlacePiecesResponse defaultInstance;
    public static PlacePiecesResponse getDefaultInstance() {
      return defaultInstance;
    }

    public PlacePiecesResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PlacePiecesResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              org.zhangqi.proto.BaseBattle.EventMsgList.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = eventList_.toBuilder();
              }
              eventList_ = input.readMessage(org.zhangqi.proto.BaseBattle.EventMsgList.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(eventList_);
                eventList_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.PlacePiecesResponse.class, org.zhangqi.proto.BaseBattle.PlacePiecesResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<PlacePiecesResponse> PARSER =
        new com.google.protobuf.AbstractParser<PlacePiecesResponse>() {
      public PlacePiecesResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PlacePiecesResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<PlacePiecesResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .org.zhangqi.proto.EventMsgList eventList = 1;
    public static final int EVENTLIST_FIELD_NUMBER = 1;
    private org.zhangqi.proto.BaseBattle.EventMsgList eventList_;
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    public boolean hasEventList() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.EventMsgList getEventList() {
      return eventList_;
    }
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder getEventListOrBuilder() {
      return eventList_;
    }

    private void initFields() {
      eventList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, eventList_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, eventList_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.PlacePiecesResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.PlacePiecesResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.PlacePiecesResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.PlacePiecesResponse.class, org.zhangqi.proto.BaseBattle.PlacePiecesResponse.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.PlacePiecesResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getEventListFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (eventListBuilder_ == null) {
          eventList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
        } else {
          eventListBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesResponse_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.PlacePiecesResponse getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.PlacePiecesResponse.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.PlacePiecesResponse build() {
        org.zhangqi.proto.BaseBattle.PlacePiecesResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.PlacePiecesResponse buildPartial() {
        org.zhangqi.proto.BaseBattle.PlacePiecesResponse result = new org.zhangqi.proto.BaseBattle.PlacePiecesResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (eventListBuilder_ == null) {
          result.eventList_ = eventList_;
        } else {
          result.eventList_ = eventListBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.PlacePiecesResponse) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.PlacePiecesResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.PlacePiecesResponse other) {
        if (other == org.zhangqi.proto.BaseBattle.PlacePiecesResponse.getDefaultInstance()) return this;
        if (other.hasEventList()) {
          mergeEventList(other.getEventList());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.PlacePiecesResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.PlacePiecesResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .org.zhangqi.proto.EventMsgList eventList = 1;
      private org.zhangqi.proto.BaseBattle.EventMsgList eventList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.EventMsgList, org.zhangqi.proto.BaseBattle.EventMsgList.Builder, org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder> eventListBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public boolean hasEventList() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgList getEventList() {
        if (eventListBuilder_ == null) {
          return eventList_;
        } else {
          return eventListBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public Builder setEventList(org.zhangqi.proto.BaseBattle.EventMsgList value) {
        if (eventListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          eventList_ = value;
          onChanged();
        } else {
          eventListBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public Builder setEventList(
          org.zhangqi.proto.BaseBattle.EventMsgList.Builder builderForValue) {
        if (eventListBuilder_ == null) {
          eventList_ = builderForValue.build();
          onChanged();
        } else {
          eventListBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public Builder mergeEventList(org.zhangqi.proto.BaseBattle.EventMsgList value) {
        if (eventListBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              eventList_ != org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance()) {
            eventList_ =
              org.zhangqi.proto.BaseBattle.EventMsgList.newBuilder(eventList_).mergeFrom(value).buildPartial();
          } else {
            eventList_ = value;
          }
          onChanged();
        } else {
          eventListBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public Builder clearEventList() {
        if (eventListBuilder_ == null) {
          eventList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
          onChanged();
        } else {
          eventListBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgList.Builder getEventListBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getEventListFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder getEventListOrBuilder() {
        if (eventListBuilder_ != null) {
          return eventListBuilder_.getMessageOrBuilder();
        } else {
          return eventList_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventList = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.EventMsgList, org.zhangqi.proto.BaseBattle.EventMsgList.Builder, org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder> 
          getEventListFieldBuilder() {
        if (eventListBuilder_ == null) {
          eventListBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.EventMsgList, org.zhangqi.proto.BaseBattle.EventMsgList.Builder, org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder>(
                  eventList_,
                  getParentForChildren(),
                  isClean());
          eventList_ = null;
        }
        return eventListBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.PlacePiecesResponse)
    }

    static {
      defaultInstance = new PlacePiecesResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.PlacePiecesResponse)
  }

  public interface ForceEndTurnRequestOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
     *
     * <pre>
     * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
     * </pre>
     */
    boolean hasForceEndTurnInfo();
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
     *
     * <pre>
     * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
     * </pre>
     */
    org.zhangqi.proto.BaseBattle.CurrentTurnInfo getForceEndTurnInfo();
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
     *
     * <pre>
     * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
     * </pre>
     */
    org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder getForceEndTurnInfoOrBuilder();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.ForceEndTurnRequest}
   *
   * <pre>
   * 客户端发现当前回合玩家超时未行动，请求服务器强制结束回合（ForceEndTurn = 6004）
   * </pre>
   */
  public static final class ForceEndTurnRequest extends
      com.google.protobuf.GeneratedMessage
      implements ForceEndTurnRequestOrBuilder {
    // Use ForceEndTurnRequest.newBuilder() to construct.
    private ForceEndTurnRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ForceEndTurnRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ForceEndTurnRequest defaultInstance;
    public static ForceEndTurnRequest getDefaultInstance() {
      return defaultInstance;
    }

    public ForceEndTurnRequest getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ForceEndTurnRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = forceEndTurnInfo_.toBuilder();
              }
              forceEndTurnInfo_ = input.readMessage(org.zhangqi.proto.BaseBattle.CurrentTurnInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(forceEndTurnInfo_);
                forceEndTurnInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.ForceEndTurnRequest.class, org.zhangqi.proto.BaseBattle.ForceEndTurnRequest.Builder.class);
    }

    public static com.google.protobuf.Parser<ForceEndTurnRequest> PARSER =
        new com.google.protobuf.AbstractParser<ForceEndTurnRequest>() {
      public ForceEndTurnRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ForceEndTurnRequest(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ForceEndTurnRequest> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;
    public static final int FORCEENDTURNINFO_FIELD_NUMBER = 1;
    private org.zhangqi.proto.BaseBattle.CurrentTurnInfo forceEndTurnInfo_;
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
     *
     * <pre>
     * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
     * </pre>
     */
    public boolean hasForceEndTurnInfo() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
     *
     * <pre>
     * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
     * </pre>
     */
    public org.zhangqi.proto.BaseBattle.CurrentTurnInfo getForceEndTurnInfo() {
      return forceEndTurnInfo_;
    }
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
     *
     * <pre>
     * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
     * </pre>
     */
    public org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder getForceEndTurnInfoOrBuilder() {
      return forceEndTurnInfo_;
    }

    private void initFields() {
      forceEndTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, forceEndTurnInfo_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, forceEndTurnInfo_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.ForceEndTurnRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.ForceEndTurnRequest}
     *
     * <pre>
     * 客户端发现当前回合玩家超时未行动，请求服务器强制结束回合（ForceEndTurn = 6004）
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.ForceEndTurnRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.ForceEndTurnRequest.class, org.zhangqi.proto.BaseBattle.ForceEndTurnRequest.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.ForceEndTurnRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getForceEndTurnInfoFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (forceEndTurnInfoBuilder_ == null) {
          forceEndTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
        } else {
          forceEndTurnInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnRequest_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.ForceEndTurnRequest getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.ForceEndTurnRequest.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.ForceEndTurnRequest build() {
        org.zhangqi.proto.BaseBattle.ForceEndTurnRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.ForceEndTurnRequest buildPartial() {
        org.zhangqi.proto.BaseBattle.ForceEndTurnRequest result = new org.zhangqi.proto.BaseBattle.ForceEndTurnRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (forceEndTurnInfoBuilder_ == null) {
          result.forceEndTurnInfo_ = forceEndTurnInfo_;
        } else {
          result.forceEndTurnInfo_ = forceEndTurnInfoBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.ForceEndTurnRequest) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.ForceEndTurnRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.ForceEndTurnRequest other) {
        if (other == org.zhangqi.proto.BaseBattle.ForceEndTurnRequest.getDefaultInstance()) return this;
        if (other.hasForceEndTurnInfo()) {
          mergeForceEndTurnInfo(other.getForceEndTurnInfo());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.ForceEndTurnRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.ForceEndTurnRequest) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;
      private org.zhangqi.proto.BaseBattle.CurrentTurnInfo forceEndTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.CurrentTurnInfo, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder, org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder> forceEndTurnInfoBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
       *
       * <pre>
       * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
       * </pre>
       */
      public boolean hasForceEndTurnInfo() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
       *
       * <pre>
       * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.CurrentTurnInfo getForceEndTurnInfo() {
        if (forceEndTurnInfoBuilder_ == null) {
          return forceEndTurnInfo_;
        } else {
          return forceEndTurnInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
       *
       * <pre>
       * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
       * </pre>
       */
      public Builder setForceEndTurnInfo(org.zhangqi.proto.BaseBattle.CurrentTurnInfo value) {
        if (forceEndTurnInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          forceEndTurnInfo_ = value;
          onChanged();
        } else {
          forceEndTurnInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
       *
       * <pre>
       * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
       * </pre>
       */
      public Builder setForceEndTurnInfo(
          org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder builderForValue) {
        if (forceEndTurnInfoBuilder_ == null) {
          forceEndTurnInfo_ = builderForValue.build();
          onChanged();
        } else {
          forceEndTurnInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
       *
       * <pre>
       * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
       * </pre>
       */
      public Builder mergeForceEndTurnInfo(org.zhangqi.proto.BaseBattle.CurrentTurnInfo value) {
        if (forceEndTurnInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              forceEndTurnInfo_ != org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance()) {
            forceEndTurnInfo_ =
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo.newBuilder(forceEndTurnInfo_).mergeFrom(value).buildPartial();
          } else {
            forceEndTurnInfo_ = value;
          }
          onChanged();
        } else {
          forceEndTurnInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
       *
       * <pre>
       * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
       * </pre>
       */
      public Builder clearForceEndTurnInfo() {
        if (forceEndTurnInfoBuilder_ == null) {
          forceEndTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
          onChanged();
        } else {
          forceEndTurnInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
       *
       * <pre>
       * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder getForceEndTurnInfoBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getForceEndTurnInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
       *
       * <pre>
       * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder getForceEndTurnInfoOrBuilder() {
        if (forceEndTurnInfoBuilder_ != null) {
          return forceEndTurnInfoBuilder_.getMessageOrBuilder();
        } else {
          return forceEndTurnInfo_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo forceEndTurnInfo = 1;</code>
       *
       * <pre>
       * 因为两个客户端监测到超时未操作时，都会请求服务器。而第一个请求被服务器处理后，就会开始下一个回合。请求时，带上此信息，服务器便可分辨此情况
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.CurrentTurnInfo, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder, org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder> 
          getForceEndTurnInfoFieldBuilder() {
        if (forceEndTurnInfoBuilder_ == null) {
          forceEndTurnInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder, org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder>(
                  forceEndTurnInfo_,
                  getParentForChildren(),
                  isClean());
          forceEndTurnInfo_ = null;
        }
        return forceEndTurnInfoBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.ForceEndTurnRequest)
    }

    static {
      defaultInstance = new ForceEndTurnRequest(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.ForceEndTurnRequest)
  }

  public interface ForceEndTurnResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool isChecked = 1;
    /**
     * <code>optional bool isChecked = 1;</code>
     *
     * <pre>
     * 是否通过服务器校验，确认确实应该强制结束回合
     * </pre>
     */
    boolean hasIsChecked();
    /**
     * <code>optional bool isChecked = 1;</code>
     *
     * <pre>
     * 是否通过服务器校验，确认确实应该强制结束回合
     * </pre>
     */
    boolean getIsChecked();

    // optional int64 forceEndTurnTimestamp = 2;
    /**
     * <code>optional int64 forceEndTurnTimestamp = 2;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端强制结束时的时间戳
     * </pre>
     */
    boolean hasForceEndTurnTimestamp();
    /**
     * <code>optional int64 forceEndTurnTimestamp = 2;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端强制结束时的时间戳
     * </pre>
     */
    long getForceEndTurnTimestamp();

    // optional int64 remainMsec = 3;
    /**
     * <code>optional int64 remainMsec = 3;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端此时距离强制结束回合剩余毫秒数
     * </pre>
     */
    boolean hasRemainMsec();
    /**
     * <code>optional int64 remainMsec = 3;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端此时距离强制结束回合剩余毫秒数
     * </pre>
     */
    long getRemainMsec();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.ForceEndTurnResponse}
   */
  public static final class ForceEndTurnResponse extends
      com.google.protobuf.GeneratedMessage
      implements ForceEndTurnResponseOrBuilder {
    // Use ForceEndTurnResponse.newBuilder() to construct.
    private ForceEndTurnResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ForceEndTurnResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ForceEndTurnResponse defaultInstance;
    public static ForceEndTurnResponse getDefaultInstance() {
      return defaultInstance;
    }

    public ForceEndTurnResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ForceEndTurnResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              isChecked_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              forceEndTurnTimestamp_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              remainMsec_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.ForceEndTurnResponse.class, org.zhangqi.proto.BaseBattle.ForceEndTurnResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<ForceEndTurnResponse> PARSER =
        new com.google.protobuf.AbstractParser<ForceEndTurnResponse>() {
      public ForceEndTurnResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ForceEndTurnResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ForceEndTurnResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool isChecked = 1;
    public static final int ISCHECKED_FIELD_NUMBER = 1;
    private boolean isChecked_;
    /**
     * <code>optional bool isChecked = 1;</code>
     *
     * <pre>
     * 是否通过服务器校验，确认确实应该强制结束回合
     * </pre>
     */
    public boolean hasIsChecked() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool isChecked = 1;</code>
     *
     * <pre>
     * 是否通过服务器校验，确认确实应该强制结束回合
     * </pre>
     */
    public boolean getIsChecked() {
      return isChecked_;
    }

    // optional int64 forceEndTurnTimestamp = 2;
    public static final int FORCEENDTURNTIMESTAMP_FIELD_NUMBER = 2;
    private long forceEndTurnTimestamp_;
    /**
     * <code>optional int64 forceEndTurnTimestamp = 2;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端强制结束时的时间戳
     * </pre>
     */
    public boolean hasForceEndTurnTimestamp() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 forceEndTurnTimestamp = 2;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端强制结束时的时间戳
     * </pre>
     */
    public long getForceEndTurnTimestamp() {
      return forceEndTurnTimestamp_;
    }

    // optional int64 remainMsec = 3;
    public static final int REMAINMSEC_FIELD_NUMBER = 3;
    private long remainMsec_;
    /**
     * <code>optional int64 remainMsec = 3;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端此时距离强制结束回合剩余毫秒数
     * </pre>
     */
    public boolean hasRemainMsec() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 remainMsec = 3;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端此时距离强制结束回合剩余毫秒数
     * </pre>
     */
    public long getRemainMsec() {
      return remainMsec_;
    }

    private void initFields() {
      isChecked_ = false;
      forceEndTurnTimestamp_ = 0L;
      remainMsec_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, isChecked_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, forceEndTurnTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, remainMsec_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, isChecked_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, forceEndTurnTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, remainMsec_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.ForceEndTurnResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.ForceEndTurnResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.ForceEndTurnResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.ForceEndTurnResponse.class, org.zhangqi.proto.BaseBattle.ForceEndTurnResponse.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.ForceEndTurnResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        isChecked_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        forceEndTurnTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        remainMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceEndTurnResponse_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.ForceEndTurnResponse getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.ForceEndTurnResponse.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.ForceEndTurnResponse build() {
        org.zhangqi.proto.BaseBattle.ForceEndTurnResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.ForceEndTurnResponse buildPartial() {
        org.zhangqi.proto.BaseBattle.ForceEndTurnResponse result = new org.zhangqi.proto.BaseBattle.ForceEndTurnResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.isChecked_ = isChecked_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.forceEndTurnTimestamp_ = forceEndTurnTimestamp_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.remainMsec_ = remainMsec_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.ForceEndTurnResponse) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.ForceEndTurnResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.ForceEndTurnResponse other) {
        if (other == org.zhangqi.proto.BaseBattle.ForceEndTurnResponse.getDefaultInstance()) return this;
        if (other.hasIsChecked()) {
          setIsChecked(other.getIsChecked());
        }
        if (other.hasForceEndTurnTimestamp()) {
          setForceEndTurnTimestamp(other.getForceEndTurnTimestamp());
        }
        if (other.hasRemainMsec()) {
          setRemainMsec(other.getRemainMsec());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.ForceEndTurnResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.ForceEndTurnResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool isChecked = 1;
      private boolean isChecked_ ;
      /**
       * <code>optional bool isChecked = 1;</code>
       *
       * <pre>
       * 是否通过服务器校验，确认确实应该强制结束回合
       * </pre>
       */
      public boolean hasIsChecked() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool isChecked = 1;</code>
       *
       * <pre>
       * 是否通过服务器校验，确认确实应该强制结束回合
       * </pre>
       */
      public boolean getIsChecked() {
        return isChecked_;
      }
      /**
       * <code>optional bool isChecked = 1;</code>
       *
       * <pre>
       * 是否通过服务器校验，确认确实应该强制结束回合
       * </pre>
       */
      public Builder setIsChecked(boolean value) {
        bitField0_ |= 0x00000001;
        isChecked_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool isChecked = 1;</code>
       *
       * <pre>
       * 是否通过服务器校验，确认确实应该强制结束回合
       * </pre>
       */
      public Builder clearIsChecked() {
        bitField0_ = (bitField0_ & ~0x00000001);
        isChecked_ = false;
        onChanged();
        return this;
      }

      // optional int64 forceEndTurnTimestamp = 2;
      private long forceEndTurnTimestamp_ ;
      /**
       * <code>optional int64 forceEndTurnTimestamp = 2;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端强制结束时的时间戳
       * </pre>
       */
      public boolean hasForceEndTurnTimestamp() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 forceEndTurnTimestamp = 2;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端强制结束时的时间戳
       * </pre>
       */
      public long getForceEndTurnTimestamp() {
        return forceEndTurnTimestamp_;
      }
      /**
       * <code>optional int64 forceEndTurnTimestamp = 2;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端强制结束时的时间戳
       * </pre>
       */
      public Builder setForceEndTurnTimestamp(long value) {
        bitField0_ |= 0x00000002;
        forceEndTurnTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 forceEndTurnTimestamp = 2;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端强制结束时的时间戳
       * </pre>
       */
      public Builder clearForceEndTurnTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        forceEndTurnTimestamp_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 remainMsec = 3;
      private long remainMsec_ ;
      /**
       * <code>optional int64 remainMsec = 3;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端此时距离强制结束回合剩余毫秒数
       * </pre>
       */
      public boolean hasRemainMsec() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 remainMsec = 3;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端此时距离强制结束回合剩余毫秒数
       * </pre>
       */
      public long getRemainMsec() {
        return remainMsec_;
      }
      /**
       * <code>optional int64 remainMsec = 3;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端此时距离强制结束回合剩余毫秒数
       * </pre>
       */
      public Builder setRemainMsec(long value) {
        bitField0_ |= 0x00000004;
        remainMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 remainMsec = 3;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端此时距离强制结束回合剩余毫秒数
       * </pre>
       */
      public Builder clearRemainMsec() {
        bitField0_ = (bitField0_ & ~0x00000004);
        remainMsec_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.ForceEndTurnResponse)
    }

    static {
      defaultInstance = new ForceEndTurnResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.ForceEndTurnResponse)
  }

  public interface ReadyToStartGameRequestOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.ReadyToStartGameRequest}
   *
   * <pre>
   * 确认可以开始游戏（ReadyToStartGame = 6005）
   * </pre>
   */
  public static final class ReadyToStartGameRequest extends
      com.google.protobuf.GeneratedMessage
      implements ReadyToStartGameRequestOrBuilder {
    // Use ReadyToStartGameRequest.newBuilder() to construct.
    private ReadyToStartGameRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ReadyToStartGameRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ReadyToStartGameRequest defaultInstance;
    public static ReadyToStartGameRequest getDefaultInstance() {
      return defaultInstance;
    }

    public ReadyToStartGameRequest getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ReadyToStartGameRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest.class, org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest.Builder.class);
    }

    public static com.google.protobuf.Parser<ReadyToStartGameRequest> PARSER =
        new com.google.protobuf.AbstractParser<ReadyToStartGameRequest>() {
      public ReadyToStartGameRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ReadyToStartGameRequest(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ReadyToStartGameRequest> getParserForType() {
      return PARSER;
    }

    private void initFields() {
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.ReadyToStartGameRequest}
     *
     * <pre>
     * 确认可以开始游戏（ReadyToStartGame = 6005）
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.ReadyToStartGameRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest.class, org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameRequest_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest build() {
        org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest buildPartial() {
        org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest result = new org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest(this);
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest other) {
        if (other == org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest.getDefaultInstance()) return this;
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.ReadyToStartGameRequest) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.ReadyToStartGameRequest)
    }

    static {
      defaultInstance = new ReadyToStartGameRequest(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.ReadyToStartGameRequest)
  }

  public interface ReadyToStartGameResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.ReadyToStartGameResponse}
   */
  public static final class ReadyToStartGameResponse extends
      com.google.protobuf.GeneratedMessage
      implements ReadyToStartGameResponseOrBuilder {
    // Use ReadyToStartGameResponse.newBuilder() to construct.
    private ReadyToStartGameResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ReadyToStartGameResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ReadyToStartGameResponse defaultInstance;
    public static ReadyToStartGameResponse getDefaultInstance() {
      return defaultInstance;
    }

    public ReadyToStartGameResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ReadyToStartGameResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse.class, org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<ReadyToStartGameResponse> PARSER =
        new com.google.protobuf.AbstractParser<ReadyToStartGameResponse>() {
      public ReadyToStartGameResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ReadyToStartGameResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ReadyToStartGameResponse> getParserForType() {
      return PARSER;
    }

    private void initFields() {
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.ReadyToStartGameResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.ReadyToStartGameResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse.class, org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ReadyToStartGameResponse_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse build() {
        org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse buildPartial() {
        org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse result = new org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse(this);
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse other) {
        if (other == org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse.getDefaultInstance()) return this;
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.ReadyToStartGameResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.ReadyToStartGameResponse)
    }

    static {
      defaultInstance = new ReadyToStartGameResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.ReadyToStartGameResponse)
  }

  public interface ForceReadyToStartGameRequestOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.ForceReadyToStartGameRequest}
   *
   * <pre>
   * 超时未确认可以开始游戏，则强制开始游戏（ForceReadyToStartGame = 6006）
   * </pre>
   */
  public static final class ForceReadyToStartGameRequest extends
      com.google.protobuf.GeneratedMessage
      implements ForceReadyToStartGameRequestOrBuilder {
    // Use ForceReadyToStartGameRequest.newBuilder() to construct.
    private ForceReadyToStartGameRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ForceReadyToStartGameRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ForceReadyToStartGameRequest defaultInstance;
    public static ForceReadyToStartGameRequest getDefaultInstance() {
      return defaultInstance;
    }

    public ForceReadyToStartGameRequest getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ForceReadyToStartGameRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest.class, org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest.Builder.class);
    }

    public static com.google.protobuf.Parser<ForceReadyToStartGameRequest> PARSER =
        new com.google.protobuf.AbstractParser<ForceReadyToStartGameRequest>() {
      public ForceReadyToStartGameRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ForceReadyToStartGameRequest(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ForceReadyToStartGameRequest> getParserForType() {
      return PARSER;
    }

    private void initFields() {
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.ForceReadyToStartGameRequest}
     *
     * <pre>
     * 超时未确认可以开始游戏，则强制开始游戏（ForceReadyToStartGame = 6006）
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest.class, org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest build() {
        org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest buildPartial() {
        org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest result = new org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest(this);
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest other) {
        if (other == org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest.getDefaultInstance()) return this;
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.ForceReadyToStartGameRequest) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.ForceReadyToStartGameRequest)
    }

    static {
      defaultInstance = new ForceReadyToStartGameRequest(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.ForceReadyToStartGameRequest)
  }

  public interface ForceReadyToStartGameResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool isChecked = 1;
    /**
     * <code>optional bool isChecked = 1;</code>
     *
     * <pre>
     * 是否通过服务器校验，确认确实应该强制开始游戏
     * </pre>
     */
    boolean hasIsChecked();
    /**
     * <code>optional bool isChecked = 1;</code>
     *
     * <pre>
     * 是否通过服务器校验，确认确实应该强制开始游戏
     * </pre>
     */
    boolean getIsChecked();

    // optional int64 forceStartGameTimestamp = 2;
    /**
     * <code>optional int64 forceStartGameTimestamp = 2;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端强制开始游戏时的时间戳
     * </pre>
     */
    boolean hasForceStartGameTimestamp();
    /**
     * <code>optional int64 forceStartGameTimestamp = 2;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端强制开始游戏时的时间戳
     * </pre>
     */
    long getForceStartGameTimestamp();

    // optional int64 remainMsec = 3;
    /**
     * <code>optional int64 remainMsec = 3;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端此时距离强制开始游戏剩余毫秒数
     * </pre>
     */
    boolean hasRemainMsec();
    /**
     * <code>optional int64 remainMsec = 3;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端此时距离强制开始游戏剩余毫秒数
     * </pre>
     */
    long getRemainMsec();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.ForceReadyToStartGameResponse}
   */
  public static final class ForceReadyToStartGameResponse extends
      com.google.protobuf.GeneratedMessage
      implements ForceReadyToStartGameResponseOrBuilder {
    // Use ForceReadyToStartGameResponse.newBuilder() to construct.
    private ForceReadyToStartGameResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ForceReadyToStartGameResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ForceReadyToStartGameResponse defaultInstance;
    public static ForceReadyToStartGameResponse getDefaultInstance() {
      return defaultInstance;
    }

    public ForceReadyToStartGameResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ForceReadyToStartGameResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              isChecked_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              forceStartGameTimestamp_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              remainMsec_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse.class, org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<ForceReadyToStartGameResponse> PARSER =
        new com.google.protobuf.AbstractParser<ForceReadyToStartGameResponse>() {
      public ForceReadyToStartGameResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ForceReadyToStartGameResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ForceReadyToStartGameResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool isChecked = 1;
    public static final int ISCHECKED_FIELD_NUMBER = 1;
    private boolean isChecked_;
    /**
     * <code>optional bool isChecked = 1;</code>
     *
     * <pre>
     * 是否通过服务器校验，确认确实应该强制开始游戏
     * </pre>
     */
    public boolean hasIsChecked() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool isChecked = 1;</code>
     *
     * <pre>
     * 是否通过服务器校验，确认确实应该强制开始游戏
     * </pre>
     */
    public boolean getIsChecked() {
      return isChecked_;
    }

    // optional int64 forceStartGameTimestamp = 2;
    public static final int FORCESTARTGAMETIMESTAMP_FIELD_NUMBER = 2;
    private long forceStartGameTimestamp_;
    /**
     * <code>optional int64 forceStartGameTimestamp = 2;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端强制开始游戏时的时间戳
     * </pre>
     */
    public boolean hasForceStartGameTimestamp() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 forceStartGameTimestamp = 2;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端强制开始游戏时的时间戳
     * </pre>
     */
    public long getForceStartGameTimestamp() {
      return forceStartGameTimestamp_;
    }

    // optional int64 remainMsec = 3;
    public static final int REMAINMSEC_FIELD_NUMBER = 3;
    private long remainMsec_;
    /**
     * <code>optional int64 remainMsec = 3;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端此时距离强制开始游戏剩余毫秒数
     * </pre>
     */
    public boolean hasRemainMsec() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 remainMsec = 3;</code>
     *
     * <pre>
     * 如果服务器认为还没有到时间，告知客户端此时距离强制开始游戏剩余毫秒数
     * </pre>
     */
    public long getRemainMsec() {
      return remainMsec_;
    }

    private void initFields() {
      isChecked_ = false;
      forceStartGameTimestamp_ = 0L;
      remainMsec_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, isChecked_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, forceStartGameTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, remainMsec_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, isChecked_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, forceStartGameTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, remainMsec_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.ForceReadyToStartGameResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse.class, org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        isChecked_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        forceStartGameTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        remainMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse build() {
        org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse buildPartial() {
        org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse result = new org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.isChecked_ = isChecked_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.forceStartGameTimestamp_ = forceStartGameTimestamp_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.remainMsec_ = remainMsec_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse other) {
        if (other == org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse.getDefaultInstance()) return this;
        if (other.hasIsChecked()) {
          setIsChecked(other.getIsChecked());
        }
        if (other.hasForceStartGameTimestamp()) {
          setForceStartGameTimestamp(other.getForceStartGameTimestamp());
        }
        if (other.hasRemainMsec()) {
          setRemainMsec(other.getRemainMsec());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.ForceReadyToStartGameResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool isChecked = 1;
      private boolean isChecked_ ;
      /**
       * <code>optional bool isChecked = 1;</code>
       *
       * <pre>
       * 是否通过服务器校验，确认确实应该强制开始游戏
       * </pre>
       */
      public boolean hasIsChecked() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool isChecked = 1;</code>
       *
       * <pre>
       * 是否通过服务器校验，确认确实应该强制开始游戏
       * </pre>
       */
      public boolean getIsChecked() {
        return isChecked_;
      }
      /**
       * <code>optional bool isChecked = 1;</code>
       *
       * <pre>
       * 是否通过服务器校验，确认确实应该强制开始游戏
       * </pre>
       */
      public Builder setIsChecked(boolean value) {
        bitField0_ |= 0x00000001;
        isChecked_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool isChecked = 1;</code>
       *
       * <pre>
       * 是否通过服务器校验，确认确实应该强制开始游戏
       * </pre>
       */
      public Builder clearIsChecked() {
        bitField0_ = (bitField0_ & ~0x00000001);
        isChecked_ = false;
        onChanged();
        return this;
      }

      // optional int64 forceStartGameTimestamp = 2;
      private long forceStartGameTimestamp_ ;
      /**
       * <code>optional int64 forceStartGameTimestamp = 2;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端强制开始游戏时的时间戳
       * </pre>
       */
      public boolean hasForceStartGameTimestamp() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 forceStartGameTimestamp = 2;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端强制开始游戏时的时间戳
       * </pre>
       */
      public long getForceStartGameTimestamp() {
        return forceStartGameTimestamp_;
      }
      /**
       * <code>optional int64 forceStartGameTimestamp = 2;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端强制开始游戏时的时间戳
       * </pre>
       */
      public Builder setForceStartGameTimestamp(long value) {
        bitField0_ |= 0x00000002;
        forceStartGameTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 forceStartGameTimestamp = 2;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端强制开始游戏时的时间戳
       * </pre>
       */
      public Builder clearForceStartGameTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        forceStartGameTimestamp_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 remainMsec = 3;
      private long remainMsec_ ;
      /**
       * <code>optional int64 remainMsec = 3;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端此时距离强制开始游戏剩余毫秒数
       * </pre>
       */
      public boolean hasRemainMsec() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 remainMsec = 3;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端此时距离强制开始游戏剩余毫秒数
       * </pre>
       */
      public long getRemainMsec() {
        return remainMsec_;
      }
      /**
       * <code>optional int64 remainMsec = 3;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端此时距离强制开始游戏剩余毫秒数
       * </pre>
       */
      public Builder setRemainMsec(long value) {
        bitField0_ |= 0x00000004;
        remainMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 remainMsec = 3;</code>
       *
       * <pre>
       * 如果服务器认为还没有到时间，告知客户端此时距离强制开始游戏剩余毫秒数
       * </pre>
       */
      public Builder clearRemainMsec() {
        bitField0_ = (bitField0_ & ~0x00000004);
        remainMsec_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.ForceReadyToStartGameResponse)
    }

    static {
      defaultInstance = new ForceReadyToStartGameResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.ForceReadyToStartGameResponse)
  }

  public interface EventMsgOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 eventNum = 1;
    /**
     * <code>optional int32 eventNum = 1;</code>
     *
     * <pre>
     * 事件编号（从1计，一局游戏第1个事件为先手玩家的StartTurnEvent事件）
     * </pre>
     */
    boolean hasEventNum();
    /**
     * <code>optional int32 eventNum = 1;</code>
     *
     * <pre>
     * 事件编号（从1计，一局游戏第1个事件为先手玩家的StartTurnEvent事件）
     * </pre>
     */
    int getEventNum();

    // optional .org.zhangqi.proto.EventTypeEnum eventType = 2;
    /**
     * <code>optional .org.zhangqi.proto.EventTypeEnum eventType = 2;</code>
     *
     * <pre>
     * 事件类型
     * </pre>
     */
    boolean hasEventType();
    /**
     * <code>optional .org.zhangqi.proto.EventTypeEnum eventType = 2;</code>
     *
     * <pre>
     * 事件类型
     * </pre>
     */
    org.zhangqi.proto.BaseBattle.EventTypeEnum getEventType();

    // optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;
    /**
     * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
     */
    boolean hasGameOverEvent();
    /**
     * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
     */
    org.zhangqi.proto.BaseBattle.GameOverEvent getGameOverEvent();
    /**
     * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
     */
    org.zhangqi.proto.BaseBattle.GameOverEventOrBuilder getGameOverEventOrBuilder();

    // optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;
    /**
     * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
     */
    boolean hasStartTurnEvent();
    /**
     * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
     */
    org.zhangqi.proto.BaseBattle.StartTurnEvent getStartTurnEvent();
    /**
     * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
     */
    org.zhangqi.proto.BaseBattle.StartTurnEventOrBuilder getStartTurnEventOrBuilder();

    // optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;
    /**
     * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
     */
    boolean hasEndTurnEvent();
    /**
     * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
     */
    org.zhangqi.proto.BaseBattle.EndTurnEvent getEndTurnEvent();
    /**
     * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
     */
    org.zhangqi.proto.BaseBattle.EndTurnEventOrBuilder getEndTurnEventOrBuilder();

    // optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;
    /**
     * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
     */
    boolean hasPlacePiecesEvent();
    /**
     * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
     */
    org.zhangqi.proto.BaseBattle.PlacePiecesEvent getPlacePiecesEvent();
    /**
     * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
     */
    org.zhangqi.proto.BaseBattle.PlacePiecesEventOrBuilder getPlacePiecesEventOrBuilder();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.EventMsg}
   *
   * <pre>
   * 一个事件消息
   * </pre>
   */
  public static final class EventMsg extends
      com.google.protobuf.GeneratedMessage
      implements EventMsgOrBuilder {
    // Use EventMsg.newBuilder() to construct.
    private EventMsg(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EventMsg(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EventMsg defaultInstance;
    public static EventMsg getDefaultInstance() {
      return defaultInstance;
    }

    public EventMsg getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EventMsg(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              eventNum_ = input.readInt32();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              org.zhangqi.proto.BaseBattle.EventTypeEnum value = org.zhangqi.proto.BaseBattle.EventTypeEnum.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                eventType_ = value;
              }
              break;
            }
            case 50: {
              org.zhangqi.proto.BaseBattle.GameOverEvent.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = gameOverEvent_.toBuilder();
              }
              gameOverEvent_ = input.readMessage(org.zhangqi.proto.BaseBattle.GameOverEvent.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(gameOverEvent_);
                gameOverEvent_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 58: {
              org.zhangqi.proto.BaseBattle.StartTurnEvent.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = startTurnEvent_.toBuilder();
              }
              startTurnEvent_ = input.readMessage(org.zhangqi.proto.BaseBattle.StartTurnEvent.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(startTurnEvent_);
                startTurnEvent_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 66: {
              org.zhangqi.proto.BaseBattle.EndTurnEvent.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = endTurnEvent_.toBuilder();
              }
              endTurnEvent_ = input.readMessage(org.zhangqi.proto.BaseBattle.EndTurnEvent.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(endTurnEvent_);
                endTurnEvent_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 74: {
              org.zhangqi.proto.BaseBattle.PlacePiecesEvent.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = placePiecesEvent_.toBuilder();
              }
              placePiecesEvent_ = input.readMessage(org.zhangqi.proto.BaseBattle.PlacePiecesEvent.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(placePiecesEvent_);
                placePiecesEvent_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsg_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsg_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.EventMsg.class, org.zhangqi.proto.BaseBattle.EventMsg.Builder.class);
    }

    public static com.google.protobuf.Parser<EventMsg> PARSER =
        new com.google.protobuf.AbstractParser<EventMsg>() {
      public EventMsg parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EventMsg(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EventMsg> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 eventNum = 1;
    public static final int EVENTNUM_FIELD_NUMBER = 1;
    private int eventNum_;
    /**
     * <code>optional int32 eventNum = 1;</code>
     *
     * <pre>
     * 事件编号（从1计，一局游戏第1个事件为先手玩家的StartTurnEvent事件）
     * </pre>
     */
    public boolean hasEventNum() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 eventNum = 1;</code>
     *
     * <pre>
     * 事件编号（从1计，一局游戏第1个事件为先手玩家的StartTurnEvent事件）
     * </pre>
     */
    public int getEventNum() {
      return eventNum_;
    }

    // optional .org.zhangqi.proto.EventTypeEnum eventType = 2;
    public static final int EVENTTYPE_FIELD_NUMBER = 2;
    private org.zhangqi.proto.BaseBattle.EventTypeEnum eventType_;
    /**
     * <code>optional .org.zhangqi.proto.EventTypeEnum eventType = 2;</code>
     *
     * <pre>
     * 事件类型
     * </pre>
     */
    public boolean hasEventType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .org.zhangqi.proto.EventTypeEnum eventType = 2;</code>
     *
     * <pre>
     * 事件类型
     * </pre>
     */
    public org.zhangqi.proto.BaseBattle.EventTypeEnum getEventType() {
      return eventType_;
    }

    // optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;
    public static final int GAMEOVEREVENT_FIELD_NUMBER = 6;
    private org.zhangqi.proto.BaseBattle.GameOverEvent gameOverEvent_;
    /**
     * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
     */
    public boolean hasGameOverEvent() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
     */
    public org.zhangqi.proto.BaseBattle.GameOverEvent getGameOverEvent() {
      return gameOverEvent_;
    }
    /**
     * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
     */
    public org.zhangqi.proto.BaseBattle.GameOverEventOrBuilder getGameOverEventOrBuilder() {
      return gameOverEvent_;
    }

    // optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;
    public static final int STARTTURNEVENT_FIELD_NUMBER = 7;
    private org.zhangqi.proto.BaseBattle.StartTurnEvent startTurnEvent_;
    /**
     * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
     */
    public boolean hasStartTurnEvent() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
     */
    public org.zhangqi.proto.BaseBattle.StartTurnEvent getStartTurnEvent() {
      return startTurnEvent_;
    }
    /**
     * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
     */
    public org.zhangqi.proto.BaseBattle.StartTurnEventOrBuilder getStartTurnEventOrBuilder() {
      return startTurnEvent_;
    }

    // optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;
    public static final int ENDTURNEVENT_FIELD_NUMBER = 8;
    private org.zhangqi.proto.BaseBattle.EndTurnEvent endTurnEvent_;
    /**
     * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
     */
    public boolean hasEndTurnEvent() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
     */
    public org.zhangqi.proto.BaseBattle.EndTurnEvent getEndTurnEvent() {
      return endTurnEvent_;
    }
    /**
     * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
     */
    public org.zhangqi.proto.BaseBattle.EndTurnEventOrBuilder getEndTurnEventOrBuilder() {
      return endTurnEvent_;
    }

    // optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;
    public static final int PLACEPIECESEVENT_FIELD_NUMBER = 9;
    private org.zhangqi.proto.BaseBattle.PlacePiecesEvent placePiecesEvent_;
    /**
     * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
     */
    public boolean hasPlacePiecesEvent() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
     */
    public org.zhangqi.proto.BaseBattle.PlacePiecesEvent getPlacePiecesEvent() {
      return placePiecesEvent_;
    }
    /**
     * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
     */
    public org.zhangqi.proto.BaseBattle.PlacePiecesEventOrBuilder getPlacePiecesEventOrBuilder() {
      return placePiecesEvent_;
    }

    private void initFields() {
      eventNum_ = 0;
      eventType_ = org.zhangqi.proto.BaseBattle.EventTypeEnum.EventTypeGameOver;
      gameOverEvent_ = org.zhangqi.proto.BaseBattle.GameOverEvent.getDefaultInstance();
      startTurnEvent_ = org.zhangqi.proto.BaseBattle.StartTurnEvent.getDefaultInstance();
      endTurnEvent_ = org.zhangqi.proto.BaseBattle.EndTurnEvent.getDefaultInstance();
      placePiecesEvent_ = org.zhangqi.proto.BaseBattle.PlacePiecesEvent.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, eventNum_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, eventType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(6, gameOverEvent_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(7, startTurnEvent_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(8, endTurnEvent_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(9, placePiecesEvent_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, eventNum_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, eventType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, gameOverEvent_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, startTurnEvent_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, endTurnEvent_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, placePiecesEvent_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.EventMsg parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsg parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsg parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsg parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsg parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsg parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsg parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsg parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsg parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsg parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.EventMsg prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.EventMsg}
     *
     * <pre>
     * 一个事件消息
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.EventMsgOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsg_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsg_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.EventMsg.class, org.zhangqi.proto.BaseBattle.EventMsg.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.EventMsg.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getGameOverEventFieldBuilder();
          getStartTurnEventFieldBuilder();
          getEndTurnEventFieldBuilder();
          getPlacePiecesEventFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        eventNum_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        eventType_ = org.zhangqi.proto.BaseBattle.EventTypeEnum.EventTypeGameOver;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (gameOverEventBuilder_ == null) {
          gameOverEvent_ = org.zhangqi.proto.BaseBattle.GameOverEvent.getDefaultInstance();
        } else {
          gameOverEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (startTurnEventBuilder_ == null) {
          startTurnEvent_ = org.zhangqi.proto.BaseBattle.StartTurnEvent.getDefaultInstance();
        } else {
          startTurnEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (endTurnEventBuilder_ == null) {
          endTurnEvent_ = org.zhangqi.proto.BaseBattle.EndTurnEvent.getDefaultInstance();
        } else {
          endTurnEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (placePiecesEventBuilder_ == null) {
          placePiecesEvent_ = org.zhangqi.proto.BaseBattle.PlacePiecesEvent.getDefaultInstance();
        } else {
          placePiecesEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsg_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.EventMsg getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.EventMsg.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.EventMsg build() {
        org.zhangqi.proto.BaseBattle.EventMsg result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.EventMsg buildPartial() {
        org.zhangqi.proto.BaseBattle.EventMsg result = new org.zhangqi.proto.BaseBattle.EventMsg(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.eventNum_ = eventNum_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.eventType_ = eventType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (gameOverEventBuilder_ == null) {
          result.gameOverEvent_ = gameOverEvent_;
        } else {
          result.gameOverEvent_ = gameOverEventBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (startTurnEventBuilder_ == null) {
          result.startTurnEvent_ = startTurnEvent_;
        } else {
          result.startTurnEvent_ = startTurnEventBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (endTurnEventBuilder_ == null) {
          result.endTurnEvent_ = endTurnEvent_;
        } else {
          result.endTurnEvent_ = endTurnEventBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (placePiecesEventBuilder_ == null) {
          result.placePiecesEvent_ = placePiecesEvent_;
        } else {
          result.placePiecesEvent_ = placePiecesEventBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.EventMsg) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.EventMsg)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.EventMsg other) {
        if (other == org.zhangqi.proto.BaseBattle.EventMsg.getDefaultInstance()) return this;
        if (other.hasEventNum()) {
          setEventNum(other.getEventNum());
        }
        if (other.hasEventType()) {
          setEventType(other.getEventType());
        }
        if (other.hasGameOverEvent()) {
          mergeGameOverEvent(other.getGameOverEvent());
        }
        if (other.hasStartTurnEvent()) {
          mergeStartTurnEvent(other.getStartTurnEvent());
        }
        if (other.hasEndTurnEvent()) {
          mergeEndTurnEvent(other.getEndTurnEvent());
        }
        if (other.hasPlacePiecesEvent()) {
          mergePlacePiecesEvent(other.getPlacePiecesEvent());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.EventMsg parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.EventMsg) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 eventNum = 1;
      private int eventNum_ ;
      /**
       * <code>optional int32 eventNum = 1;</code>
       *
       * <pre>
       * 事件编号（从1计，一局游戏第1个事件为先手玩家的StartTurnEvent事件）
       * </pre>
       */
      public boolean hasEventNum() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 eventNum = 1;</code>
       *
       * <pre>
       * 事件编号（从1计，一局游戏第1个事件为先手玩家的StartTurnEvent事件）
       * </pre>
       */
      public int getEventNum() {
        return eventNum_;
      }
      /**
       * <code>optional int32 eventNum = 1;</code>
       *
       * <pre>
       * 事件编号（从1计，一局游戏第1个事件为先手玩家的StartTurnEvent事件）
       * </pre>
       */
      public Builder setEventNum(int value) {
        bitField0_ |= 0x00000001;
        eventNum_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 eventNum = 1;</code>
       *
       * <pre>
       * 事件编号（从1计，一局游戏第1个事件为先手玩家的StartTurnEvent事件）
       * </pre>
       */
      public Builder clearEventNum() {
        bitField0_ = (bitField0_ & ~0x00000001);
        eventNum_ = 0;
        onChanged();
        return this;
      }

      // optional .org.zhangqi.proto.EventTypeEnum eventType = 2;
      private org.zhangqi.proto.BaseBattle.EventTypeEnum eventType_ = org.zhangqi.proto.BaseBattle.EventTypeEnum.EventTypeGameOver;
      /**
       * <code>optional .org.zhangqi.proto.EventTypeEnum eventType = 2;</code>
       *
       * <pre>
       * 事件类型
       * </pre>
       */
      public boolean hasEventType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .org.zhangqi.proto.EventTypeEnum eventType = 2;</code>
       *
       * <pre>
       * 事件类型
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.EventTypeEnum getEventType() {
        return eventType_;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventTypeEnum eventType = 2;</code>
       *
       * <pre>
       * 事件类型
       * </pre>
       */
      public Builder setEventType(org.zhangqi.proto.BaseBattle.EventTypeEnum value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        eventType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventTypeEnum eventType = 2;</code>
       *
       * <pre>
       * 事件类型
       * </pre>
       */
      public Builder clearEventType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        eventType_ = org.zhangqi.proto.BaseBattle.EventTypeEnum.EventTypeGameOver;
        onChanged();
        return this;
      }

      // optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;
      private org.zhangqi.proto.BaseBattle.GameOverEvent gameOverEvent_ = org.zhangqi.proto.BaseBattle.GameOverEvent.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.GameOverEvent, org.zhangqi.proto.BaseBattle.GameOverEvent.Builder, org.zhangqi.proto.BaseBattle.GameOverEventOrBuilder> gameOverEventBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
       */
      public boolean hasGameOverEvent() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
       */
      public org.zhangqi.proto.BaseBattle.GameOverEvent getGameOverEvent() {
        if (gameOverEventBuilder_ == null) {
          return gameOverEvent_;
        } else {
          return gameOverEventBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
       */
      public Builder setGameOverEvent(org.zhangqi.proto.BaseBattle.GameOverEvent value) {
        if (gameOverEventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          gameOverEvent_ = value;
          onChanged();
        } else {
          gameOverEventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
       */
      public Builder setGameOverEvent(
          org.zhangqi.proto.BaseBattle.GameOverEvent.Builder builderForValue) {
        if (gameOverEventBuilder_ == null) {
          gameOverEvent_ = builderForValue.build();
          onChanged();
        } else {
          gameOverEventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
       */
      public Builder mergeGameOverEvent(org.zhangqi.proto.BaseBattle.GameOverEvent value) {
        if (gameOverEventBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              gameOverEvent_ != org.zhangqi.proto.BaseBattle.GameOverEvent.getDefaultInstance()) {
            gameOverEvent_ =
              org.zhangqi.proto.BaseBattle.GameOverEvent.newBuilder(gameOverEvent_).mergeFrom(value).buildPartial();
          } else {
            gameOverEvent_ = value;
          }
          onChanged();
        } else {
          gameOverEventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
       */
      public Builder clearGameOverEvent() {
        if (gameOverEventBuilder_ == null) {
          gameOverEvent_ = org.zhangqi.proto.BaseBattle.GameOverEvent.getDefaultInstance();
          onChanged();
        } else {
          gameOverEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
       */
      public org.zhangqi.proto.BaseBattle.GameOverEvent.Builder getGameOverEventBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getGameOverEventFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
       */
      public org.zhangqi.proto.BaseBattle.GameOverEventOrBuilder getGameOverEventOrBuilder() {
        if (gameOverEventBuilder_ != null) {
          return gameOverEventBuilder_.getMessageOrBuilder();
        } else {
          return gameOverEvent_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverEvent gameOverEvent = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.GameOverEvent, org.zhangqi.proto.BaseBattle.GameOverEvent.Builder, org.zhangqi.proto.BaseBattle.GameOverEventOrBuilder> 
          getGameOverEventFieldBuilder() {
        if (gameOverEventBuilder_ == null) {
          gameOverEventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.GameOverEvent, org.zhangqi.proto.BaseBattle.GameOverEvent.Builder, org.zhangqi.proto.BaseBattle.GameOverEventOrBuilder>(
                  gameOverEvent_,
                  getParentForChildren(),
                  isClean());
          gameOverEvent_ = null;
        }
        return gameOverEventBuilder_;
      }

      // optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;
      private org.zhangqi.proto.BaseBattle.StartTurnEvent startTurnEvent_ = org.zhangqi.proto.BaseBattle.StartTurnEvent.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.StartTurnEvent, org.zhangqi.proto.BaseBattle.StartTurnEvent.Builder, org.zhangqi.proto.BaseBattle.StartTurnEventOrBuilder> startTurnEventBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
       */
      public boolean hasStartTurnEvent() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
       */
      public org.zhangqi.proto.BaseBattle.StartTurnEvent getStartTurnEvent() {
        if (startTurnEventBuilder_ == null) {
          return startTurnEvent_;
        } else {
          return startTurnEventBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
       */
      public Builder setStartTurnEvent(org.zhangqi.proto.BaseBattle.StartTurnEvent value) {
        if (startTurnEventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          startTurnEvent_ = value;
          onChanged();
        } else {
          startTurnEventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
       */
      public Builder setStartTurnEvent(
          org.zhangqi.proto.BaseBattle.StartTurnEvent.Builder builderForValue) {
        if (startTurnEventBuilder_ == null) {
          startTurnEvent_ = builderForValue.build();
          onChanged();
        } else {
          startTurnEventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
       */
      public Builder mergeStartTurnEvent(org.zhangqi.proto.BaseBattle.StartTurnEvent value) {
        if (startTurnEventBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              startTurnEvent_ != org.zhangqi.proto.BaseBattle.StartTurnEvent.getDefaultInstance()) {
            startTurnEvent_ =
              org.zhangqi.proto.BaseBattle.StartTurnEvent.newBuilder(startTurnEvent_).mergeFrom(value).buildPartial();
          } else {
            startTurnEvent_ = value;
          }
          onChanged();
        } else {
          startTurnEventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
       */
      public Builder clearStartTurnEvent() {
        if (startTurnEventBuilder_ == null) {
          startTurnEvent_ = org.zhangqi.proto.BaseBattle.StartTurnEvent.getDefaultInstance();
          onChanged();
        } else {
          startTurnEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
       */
      public org.zhangqi.proto.BaseBattle.StartTurnEvent.Builder getStartTurnEventBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getStartTurnEventFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
       */
      public org.zhangqi.proto.BaseBattle.StartTurnEventOrBuilder getStartTurnEventOrBuilder() {
        if (startTurnEventBuilder_ != null) {
          return startTurnEventBuilder_.getMessageOrBuilder();
        } else {
          return startTurnEvent_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.StartTurnEvent startTurnEvent = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.StartTurnEvent, org.zhangqi.proto.BaseBattle.StartTurnEvent.Builder, org.zhangqi.proto.BaseBattle.StartTurnEventOrBuilder> 
          getStartTurnEventFieldBuilder() {
        if (startTurnEventBuilder_ == null) {
          startTurnEventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.StartTurnEvent, org.zhangqi.proto.BaseBattle.StartTurnEvent.Builder, org.zhangqi.proto.BaseBattle.StartTurnEventOrBuilder>(
                  startTurnEvent_,
                  getParentForChildren(),
                  isClean());
          startTurnEvent_ = null;
        }
        return startTurnEventBuilder_;
      }

      // optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;
      private org.zhangqi.proto.BaseBattle.EndTurnEvent endTurnEvent_ = org.zhangqi.proto.BaseBattle.EndTurnEvent.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.EndTurnEvent, org.zhangqi.proto.BaseBattle.EndTurnEvent.Builder, org.zhangqi.proto.BaseBattle.EndTurnEventOrBuilder> endTurnEventBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
       */
      public boolean hasEndTurnEvent() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
       */
      public org.zhangqi.proto.BaseBattle.EndTurnEvent getEndTurnEvent() {
        if (endTurnEventBuilder_ == null) {
          return endTurnEvent_;
        } else {
          return endTurnEventBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
       */
      public Builder setEndTurnEvent(org.zhangqi.proto.BaseBattle.EndTurnEvent value) {
        if (endTurnEventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          endTurnEvent_ = value;
          onChanged();
        } else {
          endTurnEventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
       */
      public Builder setEndTurnEvent(
          org.zhangqi.proto.BaseBattle.EndTurnEvent.Builder builderForValue) {
        if (endTurnEventBuilder_ == null) {
          endTurnEvent_ = builderForValue.build();
          onChanged();
        } else {
          endTurnEventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
       */
      public Builder mergeEndTurnEvent(org.zhangqi.proto.BaseBattle.EndTurnEvent value) {
        if (endTurnEventBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              endTurnEvent_ != org.zhangqi.proto.BaseBattle.EndTurnEvent.getDefaultInstance()) {
            endTurnEvent_ =
              org.zhangqi.proto.BaseBattle.EndTurnEvent.newBuilder(endTurnEvent_).mergeFrom(value).buildPartial();
          } else {
            endTurnEvent_ = value;
          }
          onChanged();
        } else {
          endTurnEventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
       */
      public Builder clearEndTurnEvent() {
        if (endTurnEventBuilder_ == null) {
          endTurnEvent_ = org.zhangqi.proto.BaseBattle.EndTurnEvent.getDefaultInstance();
          onChanged();
        } else {
          endTurnEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
       */
      public org.zhangqi.proto.BaseBattle.EndTurnEvent.Builder getEndTurnEventBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getEndTurnEventFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
       */
      public org.zhangqi.proto.BaseBattle.EndTurnEventOrBuilder getEndTurnEventOrBuilder() {
        if (endTurnEventBuilder_ != null) {
          return endTurnEventBuilder_.getMessageOrBuilder();
        } else {
          return endTurnEvent_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.EndTurnEvent endTurnEvent = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.EndTurnEvent, org.zhangqi.proto.BaseBattle.EndTurnEvent.Builder, org.zhangqi.proto.BaseBattle.EndTurnEventOrBuilder> 
          getEndTurnEventFieldBuilder() {
        if (endTurnEventBuilder_ == null) {
          endTurnEventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.EndTurnEvent, org.zhangqi.proto.BaseBattle.EndTurnEvent.Builder, org.zhangqi.proto.BaseBattle.EndTurnEventOrBuilder>(
                  endTurnEvent_,
                  getParentForChildren(),
                  isClean());
          endTurnEvent_ = null;
        }
        return endTurnEventBuilder_;
      }

      // optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;
      private org.zhangqi.proto.BaseBattle.PlacePiecesEvent placePiecesEvent_ = org.zhangqi.proto.BaseBattle.PlacePiecesEvent.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.PlacePiecesEvent, org.zhangqi.proto.BaseBattle.PlacePiecesEvent.Builder, org.zhangqi.proto.BaseBattle.PlacePiecesEventOrBuilder> placePiecesEventBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
       */
      public boolean hasPlacePiecesEvent() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
       */
      public org.zhangqi.proto.BaseBattle.PlacePiecesEvent getPlacePiecesEvent() {
        if (placePiecesEventBuilder_ == null) {
          return placePiecesEvent_;
        } else {
          return placePiecesEventBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
       */
      public Builder setPlacePiecesEvent(org.zhangqi.proto.BaseBattle.PlacePiecesEvent value) {
        if (placePiecesEventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          placePiecesEvent_ = value;
          onChanged();
        } else {
          placePiecesEventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
       */
      public Builder setPlacePiecesEvent(
          org.zhangqi.proto.BaseBattle.PlacePiecesEvent.Builder builderForValue) {
        if (placePiecesEventBuilder_ == null) {
          placePiecesEvent_ = builderForValue.build();
          onChanged();
        } else {
          placePiecesEventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
       */
      public Builder mergePlacePiecesEvent(org.zhangqi.proto.BaseBattle.PlacePiecesEvent value) {
        if (placePiecesEventBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              placePiecesEvent_ != org.zhangqi.proto.BaseBattle.PlacePiecesEvent.getDefaultInstance()) {
            placePiecesEvent_ =
              org.zhangqi.proto.BaseBattle.PlacePiecesEvent.newBuilder(placePiecesEvent_).mergeFrom(value).buildPartial();
          } else {
            placePiecesEvent_ = value;
          }
          onChanged();
        } else {
          placePiecesEventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
       */
      public Builder clearPlacePiecesEvent() {
        if (placePiecesEventBuilder_ == null) {
          placePiecesEvent_ = org.zhangqi.proto.BaseBattle.PlacePiecesEvent.getDefaultInstance();
          onChanged();
        } else {
          placePiecesEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
       */
      public org.zhangqi.proto.BaseBattle.PlacePiecesEvent.Builder getPlacePiecesEventBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getPlacePiecesEventFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
       */
      public org.zhangqi.proto.BaseBattle.PlacePiecesEventOrBuilder getPlacePiecesEventOrBuilder() {
        if (placePiecesEventBuilder_ != null) {
          return placePiecesEventBuilder_.getMessageOrBuilder();
        } else {
          return placePiecesEvent_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.PlacePiecesEvent placePiecesEvent = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.PlacePiecesEvent, org.zhangqi.proto.BaseBattle.PlacePiecesEvent.Builder, org.zhangqi.proto.BaseBattle.PlacePiecesEventOrBuilder> 
          getPlacePiecesEventFieldBuilder() {
        if (placePiecesEventBuilder_ == null) {
          placePiecesEventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.PlacePiecesEvent, org.zhangqi.proto.BaseBattle.PlacePiecesEvent.Builder, org.zhangqi.proto.BaseBattle.PlacePiecesEventOrBuilder>(
                  placePiecesEvent_,
                  getParentForChildren(),
                  isClean());
          placePiecesEvent_ = null;
        }
        return placePiecesEventBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.EventMsg)
    }

    static {
      defaultInstance = new EventMsg(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.EventMsg)
  }

  public interface EventMsgListOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .org.zhangqi.proto.EventMsg msgList = 1;
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    java.util.List<org.zhangqi.proto.BaseBattle.EventMsg> 
        getMsgListList();
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.EventMsg getMsgList(int index);
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    int getMsgListCount();
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    java.util.List<? extends org.zhangqi.proto.BaseBattle.EventMsgOrBuilder> 
        getMsgListOrBuilderList();
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.EventMsgOrBuilder getMsgListOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.EventMsgList}
   *
   * <pre>
   * 多个事件组成的事件组
   * </pre>
   */
  public static final class EventMsgList extends
      com.google.protobuf.GeneratedMessage
      implements EventMsgListOrBuilder {
    // Use EventMsgList.newBuilder() to construct.
    private EventMsgList(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EventMsgList(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EventMsgList defaultInstance;
    public static EventMsgList getDefaultInstance() {
      return defaultInstance;
    }

    public EventMsgList getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EventMsgList(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                msgList_ = new java.util.ArrayList<org.zhangqi.proto.BaseBattle.EventMsg>();
                mutable_bitField0_ |= 0x00000001;
              }
              msgList_.add(input.readMessage(org.zhangqi.proto.BaseBattle.EventMsg.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          msgList_ = java.util.Collections.unmodifiableList(msgList_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsgList_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsgList_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.EventMsgList.class, org.zhangqi.proto.BaseBattle.EventMsgList.Builder.class);
    }

    public static com.google.protobuf.Parser<EventMsgList> PARSER =
        new com.google.protobuf.AbstractParser<EventMsgList>() {
      public EventMsgList parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EventMsgList(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EventMsgList> getParserForType() {
      return PARSER;
    }

    // repeated .org.zhangqi.proto.EventMsg msgList = 1;
    public static final int MSGLIST_FIELD_NUMBER = 1;
    private java.util.List<org.zhangqi.proto.BaseBattle.EventMsg> msgList_;
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    public java.util.List<org.zhangqi.proto.BaseBattle.EventMsg> getMsgListList() {
      return msgList_;
    }
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    public java.util.List<? extends org.zhangqi.proto.BaseBattle.EventMsgOrBuilder> 
        getMsgListOrBuilderList() {
      return msgList_;
    }
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    public int getMsgListCount() {
      return msgList_.size();
    }
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.EventMsg getMsgList(int index) {
      return msgList_.get(index);
    }
    /**
     * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.EventMsgOrBuilder getMsgListOrBuilder(
        int index) {
      return msgList_.get(index);
    }

    private void initFields() {
      msgList_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < msgList_.size(); i++) {
        output.writeMessage(1, msgList_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < msgList_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, msgList_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.EventMsgList parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsgList parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsgList parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsgList parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsgList parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsgList parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsgList parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsgList parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsgList parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.EventMsgList parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.EventMsgList prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.EventMsgList}
     *
     * <pre>
     * 多个事件组成的事件组
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsgList_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsgList_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.EventMsgList.class, org.zhangqi.proto.BaseBattle.EventMsgList.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.EventMsgList.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getMsgListFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (msgListBuilder_ == null) {
          msgList_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          msgListBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EventMsgList_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.EventMsgList getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.EventMsgList build() {
        org.zhangqi.proto.BaseBattle.EventMsgList result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.EventMsgList buildPartial() {
        org.zhangqi.proto.BaseBattle.EventMsgList result = new org.zhangqi.proto.BaseBattle.EventMsgList(this);
        int from_bitField0_ = bitField0_;
        if (msgListBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            msgList_ = java.util.Collections.unmodifiableList(msgList_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.msgList_ = msgList_;
        } else {
          result.msgList_ = msgListBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.EventMsgList) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.EventMsgList)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.EventMsgList other) {
        if (other == org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance()) return this;
        if (msgListBuilder_ == null) {
          if (!other.msgList_.isEmpty()) {
            if (msgList_.isEmpty()) {
              msgList_ = other.msgList_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureMsgListIsMutable();
              msgList_.addAll(other.msgList_);
            }
            onChanged();
          }
        } else {
          if (!other.msgList_.isEmpty()) {
            if (msgListBuilder_.isEmpty()) {
              msgListBuilder_.dispose();
              msgListBuilder_ = null;
              msgList_ = other.msgList_;
              bitField0_ = (bitField0_ & ~0x00000001);
              msgListBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getMsgListFieldBuilder() : null;
            } else {
              msgListBuilder_.addAllMessages(other.msgList_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.EventMsgList parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.EventMsgList) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .org.zhangqi.proto.EventMsg msgList = 1;
      private java.util.List<org.zhangqi.proto.BaseBattle.EventMsg> msgList_ =
        java.util.Collections.emptyList();
      private void ensureMsgListIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          msgList_ = new java.util.ArrayList<org.zhangqi.proto.BaseBattle.EventMsg>(msgList_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.zhangqi.proto.BaseBattle.EventMsg, org.zhangqi.proto.BaseBattle.EventMsg.Builder, org.zhangqi.proto.BaseBattle.EventMsgOrBuilder> msgListBuilder_;

      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public java.util.List<org.zhangqi.proto.BaseBattle.EventMsg> getMsgListList() {
        if (msgListBuilder_ == null) {
          return java.util.Collections.unmodifiableList(msgList_);
        } else {
          return msgListBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public int getMsgListCount() {
        if (msgListBuilder_ == null) {
          return msgList_.size();
        } else {
          return msgListBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsg getMsgList(int index) {
        if (msgListBuilder_ == null) {
          return msgList_.get(index);
        } else {
          return msgListBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public Builder setMsgList(
          int index, org.zhangqi.proto.BaseBattle.EventMsg value) {
        if (msgListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMsgListIsMutable();
          msgList_.set(index, value);
          onChanged();
        } else {
          msgListBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public Builder setMsgList(
          int index, org.zhangqi.proto.BaseBattle.EventMsg.Builder builderForValue) {
        if (msgListBuilder_ == null) {
          ensureMsgListIsMutable();
          msgList_.set(index, builderForValue.build());
          onChanged();
        } else {
          msgListBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public Builder addMsgList(org.zhangqi.proto.BaseBattle.EventMsg value) {
        if (msgListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMsgListIsMutable();
          msgList_.add(value);
          onChanged();
        } else {
          msgListBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public Builder addMsgList(
          int index, org.zhangqi.proto.BaseBattle.EventMsg value) {
        if (msgListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMsgListIsMutable();
          msgList_.add(index, value);
          onChanged();
        } else {
          msgListBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public Builder addMsgList(
          org.zhangqi.proto.BaseBattle.EventMsg.Builder builderForValue) {
        if (msgListBuilder_ == null) {
          ensureMsgListIsMutable();
          msgList_.add(builderForValue.build());
          onChanged();
        } else {
          msgListBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public Builder addMsgList(
          int index, org.zhangqi.proto.BaseBattle.EventMsg.Builder builderForValue) {
        if (msgListBuilder_ == null) {
          ensureMsgListIsMutable();
          msgList_.add(index, builderForValue.build());
          onChanged();
        } else {
          msgListBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public Builder addAllMsgList(
          java.lang.Iterable<? extends org.zhangqi.proto.BaseBattle.EventMsg> values) {
        if (msgListBuilder_ == null) {
          ensureMsgListIsMutable();
          super.addAll(values, msgList_);
          onChanged();
        } else {
          msgListBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public Builder clearMsgList() {
        if (msgListBuilder_ == null) {
          msgList_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          msgListBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public Builder removeMsgList(int index) {
        if (msgListBuilder_ == null) {
          ensureMsgListIsMutable();
          msgList_.remove(index);
          onChanged();
        } else {
          msgListBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsg.Builder getMsgListBuilder(
          int index) {
        return getMsgListFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgOrBuilder getMsgListOrBuilder(
          int index) {
        if (msgListBuilder_ == null) {
          return msgList_.get(index);  } else {
          return msgListBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public java.util.List<? extends org.zhangqi.proto.BaseBattle.EventMsgOrBuilder> 
           getMsgListOrBuilderList() {
        if (msgListBuilder_ != null) {
          return msgListBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(msgList_);
        }
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsg.Builder addMsgListBuilder() {
        return getMsgListFieldBuilder().addBuilder(
            org.zhangqi.proto.BaseBattle.EventMsg.getDefaultInstance());
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsg.Builder addMsgListBuilder(
          int index) {
        return getMsgListFieldBuilder().addBuilder(
            index, org.zhangqi.proto.BaseBattle.EventMsg.getDefaultInstance());
      }
      /**
       * <code>repeated .org.zhangqi.proto.EventMsg msgList = 1;</code>
       */
      public java.util.List<org.zhangqi.proto.BaseBattle.EventMsg.Builder> 
           getMsgListBuilderList() {
        return getMsgListFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.zhangqi.proto.BaseBattle.EventMsg, org.zhangqi.proto.BaseBattle.EventMsg.Builder, org.zhangqi.proto.BaseBattle.EventMsgOrBuilder> 
          getMsgListFieldBuilder() {
        if (msgListBuilder_ == null) {
          msgListBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.zhangqi.proto.BaseBattle.EventMsg, org.zhangqi.proto.BaseBattle.EventMsg.Builder, org.zhangqi.proto.BaseBattle.EventMsgOrBuilder>(
                  msgList_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          msgList_ = null;
        }
        return msgListBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.EventMsgList)
    }

    static {
      defaultInstance = new EventMsgList(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.EventMsgList)
  }

  public interface GameOverEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 winnerUserId = 1;
    /**
     * <code>optional int32 winnerUserId = 1;</code>
     *
     * <pre>
     * 获胜者的userId（平局为0）
     * </pre>
     */
    boolean hasWinnerUserId();
    /**
     * <code>optional int32 winnerUserId = 1;</code>
     *
     * <pre>
     * 获胜者的userId（平局为0）
     * </pre>
     */
    int getWinnerUserId();

    // optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;
    /**
     * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;</code>
     *
     * <pre>
     * 游戏结束的原因
     * </pre>
     */
    boolean hasGameOverReason();
    /**
     * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;</code>
     *
     * <pre>
     * 游戏结束的原因
     * </pre>
     */
    org.zhangqi.proto.BaseBattle.GameOverReasonEnum getGameOverReason();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.GameOverEvent}
   *
   * <pre>
   * 游戏结束事件
   * </pre>
   */
  public static final class GameOverEvent extends
      com.google.protobuf.GeneratedMessage
      implements GameOverEventOrBuilder {
    // Use GameOverEvent.newBuilder() to construct.
    private GameOverEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GameOverEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GameOverEvent defaultInstance;
    public static GameOverEvent getDefaultInstance() {
      return defaultInstance;
    }

    public GameOverEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GameOverEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              winnerUserId_ = input.readInt32();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              org.zhangqi.proto.BaseBattle.GameOverReasonEnum value = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                gameOverReason_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GameOverEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GameOverEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.GameOverEvent.class, org.zhangqi.proto.BaseBattle.GameOverEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<GameOverEvent> PARSER =
        new com.google.protobuf.AbstractParser<GameOverEvent>() {
      public GameOverEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GameOverEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GameOverEvent> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 winnerUserId = 1;
    public static final int WINNERUSERID_FIELD_NUMBER = 1;
    private int winnerUserId_;
    /**
     * <code>optional int32 winnerUserId = 1;</code>
     *
     * <pre>
     * 获胜者的userId（平局为0）
     * </pre>
     */
    public boolean hasWinnerUserId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 winnerUserId = 1;</code>
     *
     * <pre>
     * 获胜者的userId（平局为0）
     * </pre>
     */
    public int getWinnerUserId() {
      return winnerUserId_;
    }

    // optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;
    public static final int GAMEOVERREASON_FIELD_NUMBER = 2;
    private org.zhangqi.proto.BaseBattle.GameOverReasonEnum gameOverReason_;
    /**
     * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;</code>
     *
     * <pre>
     * 游戏结束的原因
     * </pre>
     */
    public boolean hasGameOverReason() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;</code>
     *
     * <pre>
     * 游戏结束的原因
     * </pre>
     */
    public org.zhangqi.proto.BaseBattle.GameOverReasonEnum getGameOverReason() {
      return gameOverReason_;
    }

    private void initFields() {
      winnerUserId_ = 0;
      gameOverReason_ = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.GameOverPlayerWin;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, winnerUserId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, gameOverReason_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, winnerUserId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, gameOverReason_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.GameOverEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.GameOverEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.GameOverEvent}
     *
     * <pre>
     * 游戏结束事件
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.GameOverEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GameOverEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GameOverEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.GameOverEvent.class, org.zhangqi.proto.BaseBattle.GameOverEvent.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.GameOverEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        winnerUserId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        gameOverReason_ = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.GameOverPlayerWin;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_GameOverEvent_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.GameOverEvent getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.GameOverEvent.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.GameOverEvent build() {
        org.zhangqi.proto.BaseBattle.GameOverEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.GameOverEvent buildPartial() {
        org.zhangqi.proto.BaseBattle.GameOverEvent result = new org.zhangqi.proto.BaseBattle.GameOverEvent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.winnerUserId_ = winnerUserId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.gameOverReason_ = gameOverReason_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.GameOverEvent) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.GameOverEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.GameOverEvent other) {
        if (other == org.zhangqi.proto.BaseBattle.GameOverEvent.getDefaultInstance()) return this;
        if (other.hasWinnerUserId()) {
          setWinnerUserId(other.getWinnerUserId());
        }
        if (other.hasGameOverReason()) {
          setGameOverReason(other.getGameOverReason());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.GameOverEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.GameOverEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 winnerUserId = 1;
      private int winnerUserId_ ;
      /**
       * <code>optional int32 winnerUserId = 1;</code>
       *
       * <pre>
       * 获胜者的userId（平局为0）
       * </pre>
       */
      public boolean hasWinnerUserId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 winnerUserId = 1;</code>
       *
       * <pre>
       * 获胜者的userId（平局为0）
       * </pre>
       */
      public int getWinnerUserId() {
        return winnerUserId_;
      }
      /**
       * <code>optional int32 winnerUserId = 1;</code>
       *
       * <pre>
       * 获胜者的userId（平局为0）
       * </pre>
       */
      public Builder setWinnerUserId(int value) {
        bitField0_ |= 0x00000001;
        winnerUserId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 winnerUserId = 1;</code>
       *
       * <pre>
       * 获胜者的userId（平局为0）
       * </pre>
       */
      public Builder clearWinnerUserId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        winnerUserId_ = 0;
        onChanged();
        return this;
      }

      // optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;
      private org.zhangqi.proto.BaseBattle.GameOverReasonEnum gameOverReason_ = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.GameOverPlayerWin;
      /**
       * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;</code>
       *
       * <pre>
       * 游戏结束的原因
       * </pre>
       */
      public boolean hasGameOverReason() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;</code>
       *
       * <pre>
       * 游戏结束的原因
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.GameOverReasonEnum getGameOverReason() {
        return gameOverReason_;
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;</code>
       *
       * <pre>
       * 游戏结束的原因
       * </pre>
       */
      public Builder setGameOverReason(org.zhangqi.proto.BaseBattle.GameOverReasonEnum value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        gameOverReason_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.GameOverReasonEnum gameOverReason = 2;</code>
       *
       * <pre>
       * 游戏结束的原因
       * </pre>
       */
      public Builder clearGameOverReason() {
        bitField0_ = (bitField0_ & ~0x00000002);
        gameOverReason_ = org.zhangqi.proto.BaseBattle.GameOverReasonEnum.GameOverPlayerWin;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.GameOverEvent)
    }

    static {
      defaultInstance = new GameOverEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.GameOverEvent)
  }

  public interface StartTurnEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    boolean hasCurrentTurnInfo();
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    org.zhangqi.proto.BaseBattle.CurrentTurnInfo getCurrentTurnInfo();
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder getCurrentTurnInfoOrBuilder();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.StartTurnEvent}
   *
   * <pre>
   * 回合开始事件
   * </pre>
   */
  public static final class StartTurnEvent extends
      com.google.protobuf.GeneratedMessage
      implements StartTurnEventOrBuilder {
    // Use StartTurnEvent.newBuilder() to construct.
    private StartTurnEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StartTurnEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StartTurnEvent defaultInstance;
    public static StartTurnEvent getDefaultInstance() {
      return defaultInstance;
    }

    public StartTurnEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StartTurnEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = currentTurnInfo_.toBuilder();
              }
              currentTurnInfo_ = input.readMessage(org.zhangqi.proto.BaseBattle.CurrentTurnInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(currentTurnInfo_);
                currentTurnInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_StartTurnEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_StartTurnEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.StartTurnEvent.class, org.zhangqi.proto.BaseBattle.StartTurnEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<StartTurnEvent> PARSER =
        new com.google.protobuf.AbstractParser<StartTurnEvent>() {
      public StartTurnEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StartTurnEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<StartTurnEvent> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;
    public static final int CURRENTTURNINFO_FIELD_NUMBER = 1;
    private org.zhangqi.proto.BaseBattle.CurrentTurnInfo currentTurnInfo_;
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    public boolean hasCurrentTurnInfo() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    public org.zhangqi.proto.BaseBattle.CurrentTurnInfo getCurrentTurnInfo() {
      return currentTurnInfo_;
    }
    /**
     * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
     *
     * <pre>
     * 当前回合信息
     * </pre>
     */
    public org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder getCurrentTurnInfoOrBuilder() {
      return currentTurnInfo_;
    }

    private void initFields() {
      currentTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, currentTurnInfo_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, currentTurnInfo_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.StartTurnEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.StartTurnEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.StartTurnEvent}
     *
     * <pre>
     * 回合开始事件
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.StartTurnEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_StartTurnEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_StartTurnEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.StartTurnEvent.class, org.zhangqi.proto.BaseBattle.StartTurnEvent.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.StartTurnEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getCurrentTurnInfoFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (currentTurnInfoBuilder_ == null) {
          currentTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
        } else {
          currentTurnInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_StartTurnEvent_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.StartTurnEvent getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.StartTurnEvent.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.StartTurnEvent build() {
        org.zhangqi.proto.BaseBattle.StartTurnEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.StartTurnEvent buildPartial() {
        org.zhangqi.proto.BaseBattle.StartTurnEvent result = new org.zhangqi.proto.BaseBattle.StartTurnEvent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (currentTurnInfoBuilder_ == null) {
          result.currentTurnInfo_ = currentTurnInfo_;
        } else {
          result.currentTurnInfo_ = currentTurnInfoBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.StartTurnEvent) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.StartTurnEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.StartTurnEvent other) {
        if (other == org.zhangqi.proto.BaseBattle.StartTurnEvent.getDefaultInstance()) return this;
        if (other.hasCurrentTurnInfo()) {
          mergeCurrentTurnInfo(other.getCurrentTurnInfo());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.StartTurnEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.StartTurnEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;
      private org.zhangqi.proto.BaseBattle.CurrentTurnInfo currentTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.CurrentTurnInfo, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder, org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder> currentTurnInfoBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public boolean hasCurrentTurnInfo() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.CurrentTurnInfo getCurrentTurnInfo() {
        if (currentTurnInfoBuilder_ == null) {
          return currentTurnInfo_;
        } else {
          return currentTurnInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public Builder setCurrentTurnInfo(org.zhangqi.proto.BaseBattle.CurrentTurnInfo value) {
        if (currentTurnInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          currentTurnInfo_ = value;
          onChanged();
        } else {
          currentTurnInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public Builder setCurrentTurnInfo(
          org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder builderForValue) {
        if (currentTurnInfoBuilder_ == null) {
          currentTurnInfo_ = builderForValue.build();
          onChanged();
        } else {
          currentTurnInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public Builder mergeCurrentTurnInfo(org.zhangqi.proto.BaseBattle.CurrentTurnInfo value) {
        if (currentTurnInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              currentTurnInfo_ != org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance()) {
            currentTurnInfo_ =
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo.newBuilder(currentTurnInfo_).mergeFrom(value).buildPartial();
          } else {
            currentTurnInfo_ = value;
          }
          onChanged();
        } else {
          currentTurnInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public Builder clearCurrentTurnInfo() {
        if (currentTurnInfoBuilder_ == null) {
          currentTurnInfo_ = org.zhangqi.proto.BaseBattle.CurrentTurnInfo.getDefaultInstance();
          onChanged();
        } else {
          currentTurnInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder getCurrentTurnInfoBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getCurrentTurnInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      public org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder getCurrentTurnInfoOrBuilder() {
        if (currentTurnInfoBuilder_ != null) {
          return currentTurnInfoBuilder_.getMessageOrBuilder();
        } else {
          return currentTurnInfo_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.CurrentTurnInfo currentTurnInfo = 1;</code>
       *
       * <pre>
       * 当前回合信息
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.CurrentTurnInfo, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder, org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder> 
          getCurrentTurnInfoFieldBuilder() {
        if (currentTurnInfoBuilder_ == null) {
          currentTurnInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.CurrentTurnInfo, org.zhangqi.proto.BaseBattle.CurrentTurnInfo.Builder, org.zhangqi.proto.BaseBattle.CurrentTurnInfoOrBuilder>(
                  currentTurnInfo_,
                  getParentForChildren(),
                  isClean());
          currentTurnInfo_ = null;
        }
        return currentTurnInfoBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.StartTurnEvent)
    }

    static {
      defaultInstance = new StartTurnEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.StartTurnEvent)
  }

  public interface EndTurnEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 endTurnUserId = 1;
    /**
     * <code>optional int32 endTurnUserId = 1;</code>
     *
     * <pre>
     * 结束了哪个玩家的回合
     * </pre>
     */
    boolean hasEndTurnUserId();
    /**
     * <code>optional int32 endTurnUserId = 1;</code>
     *
     * <pre>
     * 结束了哪个玩家的回合
     * </pre>
     */
    int getEndTurnUserId();

    // optional bool isForceEndTurn = 2;
    /**
     * <code>optional bool isForceEndTurn = 2;</code>
     *
     * <pre>
     * 是否因为超时，由系统强制结束回合
     * </pre>
     */
    boolean hasIsForceEndTurn();
    /**
     * <code>optional bool isForceEndTurn = 2;</code>
     *
     * <pre>
     * 是否因为超时，由系统强制结束回合
     * </pre>
     */
    boolean getIsForceEndTurn();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.EndTurnEvent}
   *
   * <pre>
   * 回合结束事件
   * </pre>
   */
  public static final class EndTurnEvent extends
      com.google.protobuf.GeneratedMessage
      implements EndTurnEventOrBuilder {
    // Use EndTurnEvent.newBuilder() to construct.
    private EndTurnEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EndTurnEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EndTurnEvent defaultInstance;
    public static EndTurnEvent getDefaultInstance() {
      return defaultInstance;
    }

    public EndTurnEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EndTurnEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              endTurnUserId_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              isForceEndTurn_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EndTurnEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EndTurnEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.EndTurnEvent.class, org.zhangqi.proto.BaseBattle.EndTurnEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<EndTurnEvent> PARSER =
        new com.google.protobuf.AbstractParser<EndTurnEvent>() {
      public EndTurnEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EndTurnEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EndTurnEvent> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 endTurnUserId = 1;
    public static final int ENDTURNUSERID_FIELD_NUMBER = 1;
    private int endTurnUserId_;
    /**
     * <code>optional int32 endTurnUserId = 1;</code>
     *
     * <pre>
     * 结束了哪个玩家的回合
     * </pre>
     */
    public boolean hasEndTurnUserId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 endTurnUserId = 1;</code>
     *
     * <pre>
     * 结束了哪个玩家的回合
     * </pre>
     */
    public int getEndTurnUserId() {
      return endTurnUserId_;
    }

    // optional bool isForceEndTurn = 2;
    public static final int ISFORCEENDTURN_FIELD_NUMBER = 2;
    private boolean isForceEndTurn_;
    /**
     * <code>optional bool isForceEndTurn = 2;</code>
     *
     * <pre>
     * 是否因为超时，由系统强制结束回合
     * </pre>
     */
    public boolean hasIsForceEndTurn() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool isForceEndTurn = 2;</code>
     *
     * <pre>
     * 是否因为超时，由系统强制结束回合
     * </pre>
     */
    public boolean getIsForceEndTurn() {
      return isForceEndTurn_;
    }

    private void initFields() {
      endTurnUserId_ = 0;
      isForceEndTurn_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, endTurnUserId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, isForceEndTurn_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, endTurnUserId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, isForceEndTurn_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.EndTurnEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.EndTurnEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.EndTurnEvent}
     *
     * <pre>
     * 回合结束事件
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.EndTurnEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EndTurnEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EndTurnEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.EndTurnEvent.class, org.zhangqi.proto.BaseBattle.EndTurnEvent.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.EndTurnEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        endTurnUserId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        isForceEndTurn_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_EndTurnEvent_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.EndTurnEvent getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.EndTurnEvent.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.EndTurnEvent build() {
        org.zhangqi.proto.BaseBattle.EndTurnEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.EndTurnEvent buildPartial() {
        org.zhangqi.proto.BaseBattle.EndTurnEvent result = new org.zhangqi.proto.BaseBattle.EndTurnEvent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.endTurnUserId_ = endTurnUserId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.isForceEndTurn_ = isForceEndTurn_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.EndTurnEvent) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.EndTurnEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.EndTurnEvent other) {
        if (other == org.zhangqi.proto.BaseBattle.EndTurnEvent.getDefaultInstance()) return this;
        if (other.hasEndTurnUserId()) {
          setEndTurnUserId(other.getEndTurnUserId());
        }
        if (other.hasIsForceEndTurn()) {
          setIsForceEndTurn(other.getIsForceEndTurn());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.EndTurnEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.EndTurnEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 endTurnUserId = 1;
      private int endTurnUserId_ ;
      /**
       * <code>optional int32 endTurnUserId = 1;</code>
       *
       * <pre>
       * 结束了哪个玩家的回合
       * </pre>
       */
      public boolean hasEndTurnUserId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 endTurnUserId = 1;</code>
       *
       * <pre>
       * 结束了哪个玩家的回合
       * </pre>
       */
      public int getEndTurnUserId() {
        return endTurnUserId_;
      }
      /**
       * <code>optional int32 endTurnUserId = 1;</code>
       *
       * <pre>
       * 结束了哪个玩家的回合
       * </pre>
       */
      public Builder setEndTurnUserId(int value) {
        bitField0_ |= 0x00000001;
        endTurnUserId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 endTurnUserId = 1;</code>
       *
       * <pre>
       * 结束了哪个玩家的回合
       * </pre>
       */
      public Builder clearEndTurnUserId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        endTurnUserId_ = 0;
        onChanged();
        return this;
      }

      // optional bool isForceEndTurn = 2;
      private boolean isForceEndTurn_ ;
      /**
       * <code>optional bool isForceEndTurn = 2;</code>
       *
       * <pre>
       * 是否因为超时，由系统强制结束回合
       * </pre>
       */
      public boolean hasIsForceEndTurn() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool isForceEndTurn = 2;</code>
       *
       * <pre>
       * 是否因为超时，由系统强制结束回合
       * </pre>
       */
      public boolean getIsForceEndTurn() {
        return isForceEndTurn_;
      }
      /**
       * <code>optional bool isForceEndTurn = 2;</code>
       *
       * <pre>
       * 是否因为超时，由系统强制结束回合
       * </pre>
       */
      public Builder setIsForceEndTurn(boolean value) {
        bitField0_ |= 0x00000002;
        isForceEndTurn_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool isForceEndTurn = 2;</code>
       *
       * <pre>
       * 是否因为超时，由系统强制结束回合
       * </pre>
       */
      public Builder clearIsForceEndTurn() {
        bitField0_ = (bitField0_ & ~0x00000002);
        isForceEndTurn_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.EndTurnEvent)
    }

    static {
      defaultInstance = new EndTurnEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.EndTurnEvent)
  }

  public interface PlacePiecesEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 userId = 1;
    /**
     * <code>optional int32 userId = 1;</code>
     *
     * <pre>
     * 哪个玩家的操作
     * </pre>
     */
    boolean hasUserId();
    /**
     * <code>optional int32 userId = 1;</code>
     *
     * <pre>
     * 哪个玩家的操作
     * </pre>
     */
    int getUserId();

    // optional int32 index = 2;
    /**
     * <code>optional int32 index = 2;</code>
     *
     * <pre>
     * 落在哪个位置（九宫格0-8的下标位置）
     * </pre>
     */
    boolean hasIndex();
    /**
     * <code>optional int32 index = 2;</code>
     *
     * <pre>
     * 落在哪个位置（九宫格0-8的下标位置）
     * </pre>
     */
    int getIndex();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.PlacePiecesEvent}
   *
   * <pre>
   * 落子事件
   * </pre>
   */
  public static final class PlacePiecesEvent extends
      com.google.protobuf.GeneratedMessage
      implements PlacePiecesEventOrBuilder {
    // Use PlacePiecesEvent.newBuilder() to construct.
    private PlacePiecesEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PlacePiecesEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PlacePiecesEvent defaultInstance;
    public static PlacePiecesEvent getDefaultInstance() {
      return defaultInstance;
    }

    public PlacePiecesEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PlacePiecesEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              userId_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              index_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.PlacePiecesEvent.class, org.zhangqi.proto.BaseBattle.PlacePiecesEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<PlacePiecesEvent> PARSER =
        new com.google.protobuf.AbstractParser<PlacePiecesEvent>() {
      public PlacePiecesEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PlacePiecesEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<PlacePiecesEvent> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 userId = 1;
    public static final int USERID_FIELD_NUMBER = 1;
    private int userId_;
    /**
     * <code>optional int32 userId = 1;</code>
     *
     * <pre>
     * 哪个玩家的操作
     * </pre>
     */
    public boolean hasUserId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 userId = 1;</code>
     *
     * <pre>
     * 哪个玩家的操作
     * </pre>
     */
    public int getUserId() {
      return userId_;
    }

    // optional int32 index = 2;
    public static final int INDEX_FIELD_NUMBER = 2;
    private int index_;
    /**
     * <code>optional int32 index = 2;</code>
     *
     * <pre>
     * 落在哪个位置（九宫格0-8的下标位置）
     * </pre>
     */
    public boolean hasIndex() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 index = 2;</code>
     *
     * <pre>
     * 落在哪个位置（九宫格0-8的下标位置）
     * </pre>
     */
    public int getIndex() {
      return index_;
    }

    private void initFields() {
      userId_ = 0;
      index_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, userId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, index_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, userId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, index_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.PlacePiecesEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.PlacePiecesEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.PlacePiecesEvent}
     *
     * <pre>
     * 落子事件
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.PlacePiecesEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.PlacePiecesEvent.class, org.zhangqi.proto.BaseBattle.PlacePiecesEvent.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.PlacePiecesEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        userId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        index_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_PlacePiecesEvent_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.PlacePiecesEvent getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.PlacePiecesEvent.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.PlacePiecesEvent build() {
        org.zhangqi.proto.BaseBattle.PlacePiecesEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.PlacePiecesEvent buildPartial() {
        org.zhangqi.proto.BaseBattle.PlacePiecesEvent result = new org.zhangqi.proto.BaseBattle.PlacePiecesEvent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.userId_ = userId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.index_ = index_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.PlacePiecesEvent) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.PlacePiecesEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.PlacePiecesEvent other) {
        if (other == org.zhangqi.proto.BaseBattle.PlacePiecesEvent.getDefaultInstance()) return this;
        if (other.hasUserId()) {
          setUserId(other.getUserId());
        }
        if (other.hasIndex()) {
          setIndex(other.getIndex());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.PlacePiecesEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.PlacePiecesEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 userId = 1;
      private int userId_ ;
      /**
       * <code>optional int32 userId = 1;</code>
       *
       * <pre>
       * 哪个玩家的操作
       * </pre>
       */
      public boolean hasUserId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 userId = 1;</code>
       *
       * <pre>
       * 哪个玩家的操作
       * </pre>
       */
      public int getUserId() {
        return userId_;
      }
      /**
       * <code>optional int32 userId = 1;</code>
       *
       * <pre>
       * 哪个玩家的操作
       * </pre>
       */
      public Builder setUserId(int value) {
        bitField0_ |= 0x00000001;
        userId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 userId = 1;</code>
       *
       * <pre>
       * 哪个玩家的操作
       * </pre>
       */
      public Builder clearUserId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        userId_ = 0;
        onChanged();
        return this;
      }

      // optional int32 index = 2;
      private int index_ ;
      /**
       * <code>optional int32 index = 2;</code>
       *
       * <pre>
       * 落在哪个位置（九宫格0-8的下标位置）
       * </pre>
       */
      public boolean hasIndex() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 index = 2;</code>
       *
       * <pre>
       * 落在哪个位置（九宫格0-8的下标位置）
       * </pre>
       */
      public int getIndex() {
        return index_;
      }
      /**
       * <code>optional int32 index = 2;</code>
       *
       * <pre>
       * 落在哪个位置（九宫格0-8的下标位置）
       * </pre>
       */
      public Builder setIndex(int value) {
        bitField0_ |= 0x00000002;
        index_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 index = 2;</code>
       *
       * <pre>
       * 落在哪个位置（九宫格0-8的下标位置）
       * </pre>
       */
      public Builder clearIndex() {
        bitField0_ = (bitField0_ & ~0x00000002);
        index_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.PlacePiecesEvent)
    }

    static {
      defaultInstance = new PlacePiecesEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.PlacePiecesEvent)
  }

  public interface BattleEventMsgListPushOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
     */
    boolean hasEventMsgList();
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.EventMsgList getEventMsgList();
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
     */
    org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder getEventMsgListOrBuilder();
  }
  /**
   * Protobuf type {@code org.zhangqi.proto.BattleEventMsgListPush}
   *
   * <pre>
   * 战斗服务器推送给玩家场上发生的事件信息（BattleEventMsgListPush = 22001）
   * </pre>
   */
  public static final class BattleEventMsgListPush extends
      com.google.protobuf.GeneratedMessage
      implements BattleEventMsgListPushOrBuilder {
    // Use BattleEventMsgListPush.newBuilder() to construct.
    private BattleEventMsgListPush(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BattleEventMsgListPush(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final BattleEventMsgListPush defaultInstance;
    public static BattleEventMsgListPush getDefaultInstance() {
      return defaultInstance;
    }

    public BattleEventMsgListPush getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BattleEventMsgListPush(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              org.zhangqi.proto.BaseBattle.EventMsgList.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = eventMsgList_.toBuilder();
              }
              eventMsgList_ = input.readMessage(org.zhangqi.proto.BaseBattle.EventMsgList.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(eventMsgList_);
                eventMsgList_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleEventMsgListPush_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleEventMsgListPush_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.zhangqi.proto.BaseBattle.BattleEventMsgListPush.class, org.zhangqi.proto.BaseBattle.BattleEventMsgListPush.Builder.class);
    }

    public static com.google.protobuf.Parser<BattleEventMsgListPush> PARSER =
        new com.google.protobuf.AbstractParser<BattleEventMsgListPush>() {
      public BattleEventMsgListPush parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new BattleEventMsgListPush(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<BattleEventMsgListPush> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;
    public static final int EVENTMSGLIST_FIELD_NUMBER = 1;
    private org.zhangqi.proto.BaseBattle.EventMsgList eventMsgList_;
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
     */
    public boolean hasEventMsgList() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.EventMsgList getEventMsgList() {
      return eventMsgList_;
    }
    /**
     * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
     */
    public org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder getEventMsgListOrBuilder() {
      return eventMsgList_;
    }

    private void initFields() {
      eventMsgList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, eventMsgList_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, eventMsgList_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.zhangqi.proto.BaseBattle.BattleEventMsgListPush prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code org.zhangqi.proto.BattleEventMsgListPush}
     *
     * <pre>
     * 战斗服务器推送给玩家场上发生的事件信息（BattleEventMsgListPush = 22001）
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.zhangqi.proto.BaseBattle.BattleEventMsgListPushOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleEventMsgListPush_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleEventMsgListPush_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.zhangqi.proto.BaseBattle.BattleEventMsgListPush.class, org.zhangqi.proto.BaseBattle.BattleEventMsgListPush.Builder.class);
      }

      // Construct using org.zhangqi.proto.BaseBattle.BattleEventMsgListPush.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getEventMsgListFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (eventMsgListBuilder_ == null) {
          eventMsgList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
        } else {
          eventMsgListBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.zhangqi.proto.BaseBattle.internal_static_org_zhangqi_proto_BattleEventMsgListPush_descriptor;
      }

      public org.zhangqi.proto.BaseBattle.BattleEventMsgListPush getDefaultInstanceForType() {
        return org.zhangqi.proto.BaseBattle.BattleEventMsgListPush.getDefaultInstance();
      }

      public org.zhangqi.proto.BaseBattle.BattleEventMsgListPush build() {
        org.zhangqi.proto.BaseBattle.BattleEventMsgListPush result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.zhangqi.proto.BaseBattle.BattleEventMsgListPush buildPartial() {
        org.zhangqi.proto.BaseBattle.BattleEventMsgListPush result = new org.zhangqi.proto.BaseBattle.BattleEventMsgListPush(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (eventMsgListBuilder_ == null) {
          result.eventMsgList_ = eventMsgList_;
        } else {
          result.eventMsgList_ = eventMsgListBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.zhangqi.proto.BaseBattle.BattleEventMsgListPush) {
          return mergeFrom((org.zhangqi.proto.BaseBattle.BattleEventMsgListPush)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.zhangqi.proto.BaseBattle.BattleEventMsgListPush other) {
        if (other == org.zhangqi.proto.BaseBattle.BattleEventMsgListPush.getDefaultInstance()) return this;
        if (other.hasEventMsgList()) {
          mergeEventMsgList(other.getEventMsgList());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.zhangqi.proto.BaseBattle.BattleEventMsgListPush parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.zhangqi.proto.BaseBattle.BattleEventMsgListPush) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;
      private org.zhangqi.proto.BaseBattle.EventMsgList eventMsgList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.EventMsgList, org.zhangqi.proto.BaseBattle.EventMsgList.Builder, org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder> eventMsgListBuilder_;
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
       */
      public boolean hasEventMsgList() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgList getEventMsgList() {
        if (eventMsgListBuilder_ == null) {
          return eventMsgList_;
        } else {
          return eventMsgListBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
       */
      public Builder setEventMsgList(org.zhangqi.proto.BaseBattle.EventMsgList value) {
        if (eventMsgListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          eventMsgList_ = value;
          onChanged();
        } else {
          eventMsgListBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
       */
      public Builder setEventMsgList(
          org.zhangqi.proto.BaseBattle.EventMsgList.Builder builderForValue) {
        if (eventMsgListBuilder_ == null) {
          eventMsgList_ = builderForValue.build();
          onChanged();
        } else {
          eventMsgListBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
       */
      public Builder mergeEventMsgList(org.zhangqi.proto.BaseBattle.EventMsgList value) {
        if (eventMsgListBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              eventMsgList_ != org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance()) {
            eventMsgList_ =
              org.zhangqi.proto.BaseBattle.EventMsgList.newBuilder(eventMsgList_).mergeFrom(value).buildPartial();
          } else {
            eventMsgList_ = value;
          }
          onChanged();
        } else {
          eventMsgListBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
       */
      public Builder clearEventMsgList() {
        if (eventMsgListBuilder_ == null) {
          eventMsgList_ = org.zhangqi.proto.BaseBattle.EventMsgList.getDefaultInstance();
          onChanged();
        } else {
          eventMsgListBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgList.Builder getEventMsgListBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getEventMsgListFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
       */
      public org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder getEventMsgListOrBuilder() {
        if (eventMsgListBuilder_ != null) {
          return eventMsgListBuilder_.getMessageOrBuilder();
        } else {
          return eventMsgList_;
        }
      }
      /**
       * <code>optional .org.zhangqi.proto.EventMsgList eventMsgList = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.zhangqi.proto.BaseBattle.EventMsgList, org.zhangqi.proto.BaseBattle.EventMsgList.Builder, org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder> 
          getEventMsgListFieldBuilder() {
        if (eventMsgListBuilder_ == null) {
          eventMsgListBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.zhangqi.proto.BaseBattle.EventMsgList, org.zhangqi.proto.BaseBattle.EventMsgList.Builder, org.zhangqi.proto.BaseBattle.EventMsgListOrBuilder>(
                  eventMsgList_,
                  getParentForChildren(),
                  isClean());
          eventMsgList_ = null;
        }
        return eventMsgListBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:org.zhangqi.proto.BattleEventMsgListPush)
    }

    static {
      defaultInstance = new BattleEventMsgListPush(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:org.zhangqi.proto.BattleEventMsgListPush)
  }

  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_BattleInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_BattleInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_CurrentTurnInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_CurrentTurnInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_BattleRecordData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_BattleRecordData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_GetBattleInfoRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_GetBattleInfoRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_GetBattleInfoResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_GetBattleInfoResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_ConcedeRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_ConcedeRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_ConcedeResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_ConcedeResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_PlacePiecesRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_PlacePiecesRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_PlacePiecesResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_PlacePiecesResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_ForceEndTurnRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_ForceEndTurnRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_ForceEndTurnResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_ForceEndTurnResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_ReadyToStartGameRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_ReadyToStartGameRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_ReadyToStartGameResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_ReadyToStartGameResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_EventMsg_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_EventMsg_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_EventMsgList_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_EventMsgList_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_GameOverEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_GameOverEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_StartTurnEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_StartTurnEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_EndTurnEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_EndTurnEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_PlacePiecesEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_PlacePiecesEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_org_zhangqi_proto_BattleEventMsgListPush_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_org_zhangqi_proto_BattleEventMsgListPush_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\021base_battle.proto\022\021org.zhangqi.proto\032\014" +
      "common.proto\"\350\001\n\nBattleInfo\0228\n\016userBrief" +
      "Infos\030\001 \003(\0132 .org.zhangqi.proto.UserBrie" +
      "fInfo\022;\n\017currentTurnInfo\030\002 \001(\0132\".org.zha" +
      "ngqi.proto.CurrentTurnInfo\022\026\n\016battleCell" +
      "Info\030\003 \003(\005\022\034\n\024battleStartTimestamp\030\004 \001(\003" +
      "\022\027\n\017notReadyUserIds\030\005 \003(\005\022\024\n\014lastEventNu" +
      "m\030\006 \001(\005\"P\n\017CurrentTurnInfo\022\021\n\tturnCount\030" +
      "\001 \001(\005\022\016\n\006userId\030\002 \001(\005\022\032\n\022turnStartTimest" +
      "amp\030\003 \001(\003\"\267\002\n\020BattleRecordData\0225\n\nbattle",
      "Type\030\001 \001(\0162!.org.zhangqi.proto.BattleTyp" +
      "eEnum\022\020\n\010battleId\030\002 \001(\t\0228\n\016userBriefInfo" +
      "s\030\003 \003(\0132 .org.zhangqi.proto.UserBriefInf" +
      "o\022\034\n\024battleStartTimestamp\030\004 \001(\003\022\032\n\022battl" +
      "eEndTimestamp\030\005 \001(\003\022\021\n\tturnCount\030\006 \001(\005\022\024" +
      "\n\014winnerUserId\030\007 \001(\005\022=\n\016gameOverReason\030\010" +
      " \001(\0162%.org.zhangqi.proto.GameOverReasonE" +
      "num\"\026\n\024GetBattleInfoRequest\"J\n\025GetBattle" +
      "InfoResponse\0221\n\nbattleInfo\030\001 \001(\0132\035.org.z" +
      "hangqi.proto.BattleInfo\"\020\n\016ConcedeReques",
      "t\"E\n\017ConcedeResponse\0222\n\teventList\030\001 \001(\0132" +
      "\037.org.zhangqi.proto.EventMsgList\"9\n\022Plac" +
      "ePiecesRequest\022\024\n\014lastEventNum\030\001 \001(\005\022\r\n\005" +
      "index\030\002 \001(\005\"I\n\023PlacePiecesResponse\0222\n\tev" +
      "entList\030\001 \001(\0132\037.org.zhangqi.proto.EventM" +
      "sgList\"S\n\023ForceEndTurnRequest\022<\n\020forceEn" +
      "dTurnInfo\030\001 \001(\0132\".org.zhangqi.proto.Curr" +
      "entTurnInfo\"\\\n\024ForceEndTurnResponse\022\021\n\ti" +
      "sChecked\030\001 \001(\010\022\035\n\025forceEndTurnTimestamp\030" +
      "\002 \001(\003\022\022\n\nremainMsec\030\003 \001(\003\"\031\n\027ReadyToStar",
      "tGameRequest\"\032\n\030ReadyToStartGameResponse" +
      "\"\036\n\034ForceReadyToStartGameRequest\"g\n\035Forc" +
      "eReadyToStartGameResponse\022\021\n\tisChecked\030\001" +
      " \001(\010\022\037\n\027forceStartGameTimestamp\030\002 \001(\003\022\022\n" +
      "\nremainMsec\030\003 \001(\003\"\273\002\n\010EventMsg\022\020\n\010eventN" +
      "um\030\001 \001(\005\0223\n\teventType\030\002 \001(\0162 .org.zhangq" +
      "i.proto.EventTypeEnum\0227\n\rgameOverEvent\030\006" +
      " \001(\0132 .org.zhangqi.proto.GameOverEvent\0229" +
      "\n\016startTurnEvent\030\007 \001(\0132!.org.zhangqi.pro" +
      "to.StartTurnEvent\0225\n\014endTurnEvent\030\010 \001(\0132",
      "\037.org.zhangqi.proto.EndTurnEvent\022=\n\020plac" +
      "ePiecesEvent\030\t \001(\0132#.org.zhangqi.proto.P" +
      "lacePiecesEvent\"<\n\014EventMsgList\022,\n\007msgLi" +
      "st\030\001 \003(\0132\033.org.zhangqi.proto.EventMsg\"d\n" +
      "\rGameOverEvent\022\024\n\014winnerUserId\030\001 \001(\005\022=\n\016" +
      "gameOverReason\030\002 \001(\0162%.org.zhangqi.proto" +
      ".GameOverReasonEnum\"M\n\016StartTurnEvent\022;\n" +
      "\017currentTurnInfo\030\001 \001(\0132\".org.zhangqi.pro" +
      "to.CurrentTurnInfo\"=\n\014EndTurnEvent\022\025\n\ren" +
      "dTurnUserId\030\001 \001(\005\022\026\n\016isForceEndTurn\030\002 \001(",
      "\010\"1\n\020PlacePiecesEvent\022\016\n\006userId\030\001 \001(\005\022\r\n" +
      "\005index\030\002 \001(\005\"O\n\026BattleEventMsgListPush\0225" +
      "\n\014eventMsgList\030\001 \001(\0132\037.org.zhangqi.proto" +
      ".EventMsgList*n\n\rEventTypeEnum\022\025\n\021EventT" +
      "ypeGameOver\020\001\022\026\n\022EventTypeStartTurn\020\002\022\024\n" +
      "\020EventTypeEndTurn\020\003\022\030\n\024EventTypePlacePie" +
      "ces\020\004*X\n\022GameOverReasonEnum\022\025\n\021GameOverP" +
      "layerWin\020\001\022\031\n\025GameOverPlayerConcede\020\002\022\020\n" +
      "\014GameOverDraw\020\003B\002H\001"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_org_zhangqi_proto_BattleInfo_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_org_zhangqi_proto_BattleInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_BattleInfo_descriptor,
              new java.lang.String[] { "UserBriefInfos", "CurrentTurnInfo", "BattleCellInfo", "BattleStartTimestamp", "NotReadyUserIds", "LastEventNum", });
          internal_static_org_zhangqi_proto_CurrentTurnInfo_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_org_zhangqi_proto_CurrentTurnInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_CurrentTurnInfo_descriptor,
              new java.lang.String[] { "TurnCount", "UserId", "TurnStartTimestamp", });
          internal_static_org_zhangqi_proto_BattleRecordData_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_org_zhangqi_proto_BattleRecordData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_BattleRecordData_descriptor,
              new java.lang.String[] { "BattleType", "BattleId", "UserBriefInfos", "BattleStartTimestamp", "BattleEndTimestamp", "TurnCount", "WinnerUserId", "GameOverReason", });
          internal_static_org_zhangqi_proto_GetBattleInfoRequest_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_org_zhangqi_proto_GetBattleInfoRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_GetBattleInfoRequest_descriptor,
              new java.lang.String[] { });
          internal_static_org_zhangqi_proto_GetBattleInfoResponse_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_org_zhangqi_proto_GetBattleInfoResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_GetBattleInfoResponse_descriptor,
              new java.lang.String[] { "BattleInfo", });
          internal_static_org_zhangqi_proto_ConcedeRequest_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_org_zhangqi_proto_ConcedeRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_ConcedeRequest_descriptor,
              new java.lang.String[] { });
          internal_static_org_zhangqi_proto_ConcedeResponse_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_org_zhangqi_proto_ConcedeResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_ConcedeResponse_descriptor,
              new java.lang.String[] { "EventList", });
          internal_static_org_zhangqi_proto_PlacePiecesRequest_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_org_zhangqi_proto_PlacePiecesRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_PlacePiecesRequest_descriptor,
              new java.lang.String[] { "LastEventNum", "Index", });
          internal_static_org_zhangqi_proto_PlacePiecesResponse_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_org_zhangqi_proto_PlacePiecesResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_PlacePiecesResponse_descriptor,
              new java.lang.String[] { "EventList", });
          internal_static_org_zhangqi_proto_ForceEndTurnRequest_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_org_zhangqi_proto_ForceEndTurnRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_ForceEndTurnRequest_descriptor,
              new java.lang.String[] { "ForceEndTurnInfo", });
          internal_static_org_zhangqi_proto_ForceEndTurnResponse_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_org_zhangqi_proto_ForceEndTurnResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_ForceEndTurnResponse_descriptor,
              new java.lang.String[] { "IsChecked", "ForceEndTurnTimestamp", "RemainMsec", });
          internal_static_org_zhangqi_proto_ReadyToStartGameRequest_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_org_zhangqi_proto_ReadyToStartGameRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_ReadyToStartGameRequest_descriptor,
              new java.lang.String[] { });
          internal_static_org_zhangqi_proto_ReadyToStartGameResponse_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_org_zhangqi_proto_ReadyToStartGameResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_ReadyToStartGameResponse_descriptor,
              new java.lang.String[] { });
          internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_descriptor =
            getDescriptor().getMessageTypes().get(13);
          internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_ForceReadyToStartGameRequest_descriptor,
              new java.lang.String[] { });
          internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_descriptor =
            getDescriptor().getMessageTypes().get(14);
          internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_ForceReadyToStartGameResponse_descriptor,
              new java.lang.String[] { "IsChecked", "ForceStartGameTimestamp", "RemainMsec", });
          internal_static_org_zhangqi_proto_EventMsg_descriptor =
            getDescriptor().getMessageTypes().get(15);
          internal_static_org_zhangqi_proto_EventMsg_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_EventMsg_descriptor,
              new java.lang.String[] { "EventNum", "EventType", "GameOverEvent", "StartTurnEvent", "EndTurnEvent", "PlacePiecesEvent", });
          internal_static_org_zhangqi_proto_EventMsgList_descriptor =
            getDescriptor().getMessageTypes().get(16);
          internal_static_org_zhangqi_proto_EventMsgList_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_EventMsgList_descriptor,
              new java.lang.String[] { "MsgList", });
          internal_static_org_zhangqi_proto_GameOverEvent_descriptor =
            getDescriptor().getMessageTypes().get(17);
          internal_static_org_zhangqi_proto_GameOverEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_GameOverEvent_descriptor,
              new java.lang.String[] { "WinnerUserId", "GameOverReason", });
          internal_static_org_zhangqi_proto_StartTurnEvent_descriptor =
            getDescriptor().getMessageTypes().get(18);
          internal_static_org_zhangqi_proto_StartTurnEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_StartTurnEvent_descriptor,
              new java.lang.String[] { "CurrentTurnInfo", });
          internal_static_org_zhangqi_proto_EndTurnEvent_descriptor =
            getDescriptor().getMessageTypes().get(19);
          internal_static_org_zhangqi_proto_EndTurnEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_EndTurnEvent_descriptor,
              new java.lang.String[] { "EndTurnUserId", "IsForceEndTurn", });
          internal_static_org_zhangqi_proto_PlacePiecesEvent_descriptor =
            getDescriptor().getMessageTypes().get(20);
          internal_static_org_zhangqi_proto_PlacePiecesEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_PlacePiecesEvent_descriptor,
              new java.lang.String[] { "UserId", "Index", });
          internal_static_org_zhangqi_proto_BattleEventMsgListPush_descriptor =
            getDescriptor().getMessageTypes().get(21);
          internal_static_org_zhangqi_proto_BattleEventMsgListPush_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_org_zhangqi_proto_BattleEventMsgListPush_descriptor,
              new java.lang.String[] { "EventMsgList", });
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          org.zhangqi.proto.Common.getDescriptor(),
        }, assigner);
  }

  // @@protoc_insertion_point(outer_class_scope)
}
