// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: sync.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Protos {

  /// <summary>Holder for reflection information generated from sync.proto</summary>
  public static partial class SyncReflection {

    #region Descriptor
    /// <summary>File descriptor for sync.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static SyncReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "CgpzeW5jLnByb3RvEgZwcm90b3MaDnVzZXJpbmZvLnByb3RvGgxyZXN1bHQu",
            "cHJvdG8iEAoOUmVzdG9yZVJlcXVlc3Qi1QEKD1Jlc3RvcmVSZXNwb25zZRIf",
            "CgVVc2VycxgBIAMoCzIQLnByb3Rvcy5Vc2VySW5mbxIMCgRTdGVwGAIgASgE",
            "EjEKBXN0YXRlGAMgAygLMiIucHJvdG9zLlJlc3RvcmVSZXNwb25zZS5TdGF0",
            "ZUVudHJ5EgwKBFJvYWQYBCABKAkSEAoIQ3JlYXRlQXQYBSABKAQSEgoKc3Rh",
            "Z2VJbmRleBgGIAEoBRosCgpTdGF0ZUVudHJ5EgsKA2tleRgBIAEoCRINCgV2",
            "YWx1ZRgCIAEoDDoCOAEiewoLU3luY1JlcXVlc3QSDAoEU3RlcBgBIAEoBBIv",
            "CgZWYWx1ZXMYAiADKAsyHy5wcm90b3MuU3luY1JlcXVlc3QuVmFsdWVzRW50",
            "cnkaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgM",
            "OgI4ASKYAQoMU3luY1Jlc3BvbnNlEg4KBlN0YXR1cxgBIAEoCBIMCgRTdGVw",
            "GAIgASgEEjAKBlZhbHVlcxgDIAMoCzIgLnByb3Rvcy5TeW5jUmVzcG9uc2Uu",
            "VmFsdWVzRW50cnkSCQoBVBgEIAEoBBotCgtWYWx1ZXNFbnRyeRILCgNrZXkY",
            "ASABKAkSDQoFdmFsdWUYAiABKAw6AjgBIoYBCg9ETWVzc2FnZVJlcXVlc3QS",
            "DwoHVXNlcklEcxgBIAMoDRIzCgZWYWx1ZXMYAiADKAsyIy5wcm90b3MuRE1l",
            "c3NhZ2VSZXF1ZXN0LlZhbHVlc0VudHJ5Gi0KC1ZhbHVlc0VudHJ5EgsKA2tl",
            "eRgBIAEoCRINCgV2YWx1ZRgCIAEoDDoCOAEiMgoQRE1lc3NhZ2VSZXNwb25z",
            "ZRIeCgZSZXN1bHQYASABKAsyDi5wcm90b3MuUmVzdWx0Im8KDERNZXNzYWdl",
            "UHVzaBIwCgZWYWx1ZXMYASADKAsyIC5wcm90b3MuRE1lc3NhZ2VQdXNoLlZh",
            "bHVlc0VudHJ5Gi0KC1ZhbHVlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1",
            "ZRgCIAEoDDoCOAEigAEKCFN5bmNQdXNoEgwKBFN0ZXAYASABKAQSLAoGVmFs",
            "dWVzGAIgAygLMhwucHJvdG9zLlN5bmNQdXNoLlZhbHVlc0VudHJ5EgkKAVQY",
            "AyABKAQaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIg",
            "ASgMOgI4ASKEAQoKTWFzdGVyUHVzaBIMCgRTdGVwGAEgASgEEi4KBlZhbHVl",
            "cxgCIAMoCzIeLnByb3Rvcy5NYXN0ZXJQdXNoLlZhbHVlc0VudHJ5EgkKAVQY",
            "AyABKAQaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIg",
            "ASgMOgI4ASJ9CgxNYXN0ZXJOb3RpZnkSDAoEU3RlcBgBIAEoBBIwCgZWYWx1",
            "ZXMYAiADKAsyIC5wcm90b3MuTWFzdGVyTm90aWZ5LlZhbHVlc0VudHJ5Gi0K",
            "C1ZhbHVlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoDDoCOAEi",
            "IQoUTWFzdGVyTm90aWZ5UmVzcG9uc2USCQoBVBgBIAEoBCJ5ChFNYXN0ZXJT",
            "dG9yZU5vdGlmeRI1CgZWYWx1ZXMYASADKAsyJS5wcm90b3MuTWFzdGVyU3Rv",
            "cmVOb3RpZnkuVmFsdWVzRW50cnkaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEg",
            "ASgJEg0KBXZhbHVlGAIgASgMOgI4ASITChFNYXN0ZXJMb2FkUmVxdWVzdCKb",
            "AQoSTWFzdGVyTG9hZFJlc3BvbnNlEh4KBlJlc3VsdBgBIAEoCzIOLnByb3Rv",
            "cy5SZXN1bHQSNgoGVmFsdWVzGAIgAygLMiYucHJvdG9zLk1hc3RlckxvYWRS",
            "ZXNwb25zZS5WYWx1ZXNFbnRyeRotCgtWYWx1ZXNFbnRyeRILCgNrZXkYASAB",
            "KAkSDQoFdmFsdWUYAiABKAw6AjgBIoUBChBQYXJ0eVN5bmNSZXF1ZXN0EgwK",
            "BFN0ZXAYASABKAQSNAoGVmFsdWVzGAIgAygLMiQucHJvdG9zLlBhcnR5U3lu",
            "Y1JlcXVlc3QuVmFsdWVzRW50cnkaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEg",
            "ASgJEg0KBXZhbHVlGAIgASgMOgI4ASKiAQoRUGFydHlTeW5jUmVzcG9uc2US",
            "DgoGU3RhdHVzGAEgASgIEgwKBFN0ZXAYAiABKAQSNQoGVmFsdWVzGAMgAygL",
            "MiUucHJvdG9zLlBhcnR5U3luY1Jlc3BvbnNlLlZhbHVlc0VudHJ5EgkKAVQY",
            "BCABKAQaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIg",
            "ASgMOgI4ASKKAQoNUGFydHlTeW5jUHVzaBIMCgRTdGVwGAEgASgEEjEKBlZh",
            "bHVlcxgCIAMoCzIhLnByb3Rvcy5QYXJ0eVN5bmNQdXNoLlZhbHVlc0VudHJ5",
            "EgkKAVQYAyABKAQaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZh",
            "bHVlGAIgASgMOgI4AWIGcHJvdG8z"));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { global::Protos.UserinfoReflection.Descriptor, global::Protos.ResultReflection.Descriptor, },
          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.RestoreRequest), global::Protos.RestoreRequest.Parser, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.RestoreResponse), global::Protos.RestoreResponse.Parser, new[]{ "Users", "Step", "State", "Road", "CreateAt", "StageIndex" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.SyncRequest), global::Protos.SyncRequest.Parser, new[]{ "Step", "Values" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.SyncResponse), global::Protos.SyncResponse.Parser, new[]{ "Status", "Step", "Values", "T" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.DMessageRequest), global::Protos.DMessageRequest.Parser, new[]{ "UserIDs", "Values" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.DMessageResponse), global::Protos.DMessageResponse.Parser, new[]{ "Result" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.DMessagePush), global::Protos.DMessagePush.Parser, new[]{ "Values" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.SyncPush), global::Protos.SyncPush.Parser, new[]{ "Step", "Values", "T" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.MasterPush), global::Protos.MasterPush.Parser, new[]{ "Step", "Values", "T" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.MasterNotify), global::Protos.MasterNotify.Parser, new[]{ "Step", "Values" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.MasterNotifyResponse), global::Protos.MasterNotifyResponse.Parser, new[]{ "T" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.MasterStoreNotify), global::Protos.MasterStoreNotify.Parser, new[]{ "Values" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.MasterLoadRequest), global::Protos.MasterLoadRequest.Parser, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.MasterLoadResponse), global::Protos.MasterLoadResponse.Parser, new[]{ "Result", "Values" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.PartySyncRequest), global::Protos.PartySyncRequest.Parser, new[]{ "Step", "Values" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.PartySyncResponse), global::Protos.PartySyncResponse.Parser, new[]{ "Status", "Step", "Values", "T" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Protos.PartySyncPush), global::Protos.PartySyncPush.Parser, new[]{ "Step", "Values", "T" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, })
          }));
    }
    #endregion

  }
  #region Messages
  /// <summary>
  /// 载入游戏请求
  /// </summary>
  public sealed partial class RestoreRequest : pb::IMessage<RestoreRequest> {
    private static readonly pb::MessageParser<RestoreRequest> _parser = new pb::MessageParser<RestoreRequest>(() => new RestoreRequest());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<RestoreRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RestoreRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RestoreRequest(RestoreRequest other) : this() {
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RestoreRequest Clone() {
      return new RestoreRequest(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as RestoreRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(RestoreRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(RestoreRequest other) {
      if (other == null) {
        return;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
        }
      }
    }

  }

  /// <summary>
  /// 载入游戏响应
  /// </summary>
  public sealed partial class RestoreResponse : pb::IMessage<RestoreResponse> {
    private static readonly pb::MessageParser<RestoreResponse> _parser = new pb::MessageParser<RestoreResponse>(() => new RestoreResponse());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<RestoreResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RestoreResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RestoreResponse(RestoreResponse other) : this() {
      users_ = other.users_.Clone();
      step_ = other.step_;
      state_ = other.state_.Clone();
      road_ = other.road_;
      createAt_ = other.createAt_;
      stageIndex_ = other.stageIndex_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RestoreResponse Clone() {
      return new RestoreResponse(this);
    }

    /// <summary>Field number for the "Users" field.</summary>
    public const int UsersFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Protos.UserInfo> _repeated_users_codec
        = pb::FieldCodec.ForMessage(10, global::Protos.UserInfo.Parser);
    private readonly pbc::RepeatedField<global::Protos.UserInfo> users_ = new pbc::RepeatedField<global::Protos.UserInfo>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Protos.UserInfo> Users {
      get { return users_; }
    }

    /// <summary>Field number for the "Step" field.</summary>
    public const int StepFieldNumber = 2;
    private ulong step_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong Step {
      get { return step_; }
      set {
        step_ = value;
      }
    }

    /// <summary>Field number for the "state" field.</summary>
    public const int StateFieldNumber = 3;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_state_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 26);
    private readonly pbc::MapField<string, pb::ByteString> state_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> State {
      get { return state_; }
    }

    /// <summary>Field number for the "Road" field.</summary>
    public const int RoadFieldNumber = 4;
    private string road_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Road {
      get { return road_; }
      set {
        road_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "CreateAt" field.</summary>
    public const int CreateAtFieldNumber = 5;
    private ulong createAt_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong CreateAt {
      get { return createAt_; }
      set {
        createAt_ = value;
      }
    }

    /// <summary>Field number for the "stageIndex" field.</summary>
    public const int StageIndexFieldNumber = 6;
    private int stageIndex_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int StageIndex {
      get { return stageIndex_; }
      set {
        stageIndex_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as RestoreResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(RestoreResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!users_.Equals(other.users_)) return false;
      if (Step != other.Step) return false;
      if (!State.Equals(other.State)) return false;
      if (Road != other.Road) return false;
      if (CreateAt != other.CreateAt) return false;
      if (StageIndex != other.StageIndex) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= users_.GetHashCode();
      if (Step != 0UL) hash ^= Step.GetHashCode();
      hash ^= State.GetHashCode();
      if (Road.Length != 0) hash ^= Road.GetHashCode();
      if (CreateAt != 0UL) hash ^= CreateAt.GetHashCode();
      if (StageIndex != 0) hash ^= StageIndex.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      users_.WriteTo(output, _repeated_users_codec);
      if (Step != 0UL) {
        output.WriteRawTag(16);
        output.WriteUInt64(Step);
      }
      state_.WriteTo(output, _map_state_codec);
      if (Road.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(Road);
      }
      if (CreateAt != 0UL) {
        output.WriteRawTag(40);
        output.WriteUInt64(CreateAt);
      }
      if (StageIndex != 0) {
        output.WriteRawTag(48);
        output.WriteInt32(StageIndex);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += users_.CalculateSize(_repeated_users_codec);
      if (Step != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Step);
      }
      size += state_.CalculateSize(_map_state_codec);
      if (Road.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Road);
      }
      if (CreateAt != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(CreateAt);
      }
      if (StageIndex != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(StageIndex);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(RestoreResponse other) {
      if (other == null) {
        return;
      }
      users_.Add(other.users_);
      if (other.Step != 0UL) {
        Step = other.Step;
      }
      state_.Add(other.state_);
      if (other.Road.Length != 0) {
        Road = other.Road;
      }
      if (other.CreateAt != 0UL) {
        CreateAt = other.CreateAt;
      }
      if (other.StageIndex != 0) {
        StageIndex = other.StageIndex;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            users_.AddEntriesFrom(input, _repeated_users_codec);
            break;
          }
          case 16: {
            Step = input.ReadUInt64();
            break;
          }
          case 26: {
            state_.AddEntriesFrom(input, _map_state_codec);
            break;
          }
          case 34: {
            Road = input.ReadString();
            break;
          }
          case 40: {
            CreateAt = input.ReadUInt64();
            break;
          }
          case 48: {
            StageIndex = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 同步消息
  /// </summary>
  public sealed partial class SyncRequest : pb::IMessage<SyncRequest> {
    private static readonly pb::MessageParser<SyncRequest> _parser = new pb::MessageParser<SyncRequest>(() => new SyncRequest());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<SyncRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[2]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SyncRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SyncRequest(SyncRequest other) : this() {
      step_ = other.step_;
      values_ = other.values_.Clone();
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SyncRequest Clone() {
      return new SyncRequest(this);
    }

    /// <summary>Field number for the "Step" field.</summary>
    public const int StepFieldNumber = 1;
    private ulong step_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong Step {
      get { return step_; }
      set {
        step_ = value;
      }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 2;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 18);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as SyncRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(SyncRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Step != other.Step) return false;
      if (!Values.Equals(other.Values)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Step != 0UL) hash ^= Step.GetHashCode();
      hash ^= Values.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Step != 0UL) {
        output.WriteRawTag(8);
        output.WriteUInt64(Step);
      }
      values_.WriteTo(output, _map_values_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Step != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Step);
      }
      size += values_.CalculateSize(_map_values_codec);
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(SyncRequest other) {
      if (other == null) {
        return;
      }
      if (other.Step != 0UL) {
        Step = other.Step;
      }
      values_.Add(other.values_);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            Step = input.ReadUInt64();
            break;
          }
          case 18: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 同步消息响应
  /// </summary>
  public sealed partial class SyncResponse : pb::IMessage<SyncResponse> {
    private static readonly pb::MessageParser<SyncResponse> _parser = new pb::MessageParser<SyncResponse>(() => new SyncResponse());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<SyncResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[3]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SyncResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SyncResponse(SyncResponse other) : this() {
      status_ = other.status_;
      step_ = other.step_;
      values_ = other.values_.Clone();
      t_ = other.t_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SyncResponse Clone() {
      return new SyncResponse(this);
    }

    /// <summary>Field number for the "Status" field.</summary>
    public const int StatusFieldNumber = 1;
    private bool status_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Status {
      get { return status_; }
      set {
        status_ = value;
      }
    }

    /// <summary>Field number for the "Step" field.</summary>
    public const int StepFieldNumber = 2;
    private ulong step_;
    /// <summary>
    /// status=false时才有值
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong Step {
      get { return step_; }
      set {
        step_ = value;
      }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 3;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 26);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    /// <summary>
    /// status=false时才有值
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    /// <summary>Field number for the "T" field.</summary>
    public const int TFieldNumber = 4;
    private ulong t_;
    /// <summary>
    /// 服务器收到sync request的时间戳(毫秒)
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong T {
      get { return t_; }
      set {
        t_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as SyncResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(SyncResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Status != other.Status) return false;
      if (Step != other.Step) return false;
      if (!Values.Equals(other.Values)) return false;
      if (T != other.T) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Status != false) hash ^= Status.GetHashCode();
      if (Step != 0UL) hash ^= Step.GetHashCode();
      hash ^= Values.GetHashCode();
      if (T != 0UL) hash ^= T.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Status != false) {
        output.WriteRawTag(8);
        output.WriteBool(Status);
      }
      if (Step != 0UL) {
        output.WriteRawTag(16);
        output.WriteUInt64(Step);
      }
      values_.WriteTo(output, _map_values_codec);
      if (T != 0UL) {
        output.WriteRawTag(32);
        output.WriteUInt64(T);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Status != false) {
        size += 1 + 1;
      }
      if (Step != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Step);
      }
      size += values_.CalculateSize(_map_values_codec);
      if (T != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(T);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(SyncResponse other) {
      if (other == null) {
        return;
      }
      if (other.Status != false) {
        Status = other.Status;
      }
      if (other.Step != 0UL) {
        Step = other.Step;
      }
      values_.Add(other.values_);
      if (other.T != 0UL) {
        T = other.T;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            Status = input.ReadBool();
            break;
          }
          case 16: {
            Step = input.ReadUInt64();
            break;
          }
          case 26: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
          case 32: {
            T = input.ReadUInt64();
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 客户端发送实时消息
  /// </summary>
  public sealed partial class DMessageRequest : pb::IMessage<DMessageRequest> {
    private static readonly pb::MessageParser<DMessageRequest> _parser = new pb::MessageParser<DMessageRequest>(() => new DMessageRequest());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<DMessageRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[4]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DMessageRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DMessageRequest(DMessageRequest other) : this() {
      userIDs_ = other.userIDs_.Clone();
      values_ = other.values_.Clone();
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DMessageRequest Clone() {
      return new DMessageRequest(this);
    }

    /// <summary>Field number for the "UserIDs" field.</summary>
    public const int UserIDsFieldNumber = 1;
    private static readonly pb::FieldCodec<uint> _repeated_userIDs_codec
        = pb::FieldCodec.ForUInt32(10);
    private readonly pbc::RepeatedField<uint> userIDs_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> UserIDs {
      get { return userIDs_; }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 2;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 18);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as DMessageRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(DMessageRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!userIDs_.Equals(other.userIDs_)) return false;
      if (!Values.Equals(other.Values)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= userIDs_.GetHashCode();
      hash ^= Values.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      userIDs_.WriteTo(output, _repeated_userIDs_codec);
      values_.WriteTo(output, _map_values_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += userIDs_.CalculateSize(_repeated_userIDs_codec);
      size += values_.CalculateSize(_map_values_codec);
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(DMessageRequest other) {
      if (other == null) {
        return;
      }
      userIDs_.Add(other.userIDs_);
      values_.Add(other.values_);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10:
          case 8: {
            userIDs_.AddEntriesFrom(input, _repeated_userIDs_codec);
            break;
          }
          case 18: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 服务器响应用户实时消息结果
  /// </summary>
  public sealed partial class DMessageResponse : pb::IMessage<DMessageResponse> {
    private static readonly pb::MessageParser<DMessageResponse> _parser = new pb::MessageParser<DMessageResponse>(() => new DMessageResponse());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<DMessageResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[5]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DMessageResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DMessageResponse(DMessageResponse other) : this() {
      Result = other.result_ != null ? other.Result.Clone() : null;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DMessageResponse Clone() {
      return new DMessageResponse(this);
    }

    /// <summary>Field number for the "Result" field.</summary>
    public const int ResultFieldNumber = 1;
    private global::Protos.Result result_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Protos.Result Result {
      get { return result_; }
      set {
        result_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as DMessageResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(DMessageResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Result, other.Result)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (result_ != null) hash ^= Result.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (result_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Result);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (result_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Result);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(DMessageResponse other) {
      if (other == null) {
        return;
      }
      if (other.result_ != null) {
        if (result_ == null) {
          result_ = new global::Protos.Result();
        }
        Result.MergeFrom(other.Result);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            if (result_ == null) {
              result_ = new global::Protos.Result();
            }
            input.ReadMessage(result_);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 服务器转发实时消息
  /// </summary>
  public sealed partial class DMessagePush : pb::IMessage<DMessagePush> {
    private static readonly pb::MessageParser<DMessagePush> _parser = new pb::MessageParser<DMessagePush>(() => new DMessagePush());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<DMessagePush> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[6]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DMessagePush() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DMessagePush(DMessagePush other) : this() {
      values_ = other.values_.Clone();
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DMessagePush Clone() {
      return new DMessagePush(this);
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 1;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 10);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as DMessagePush);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(DMessagePush other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!Values.Equals(other.Values)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= Values.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      values_.WriteTo(output, _map_values_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += values_.CalculateSize(_map_values_codec);
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(DMessagePush other) {
      if (other == null) {
        return;
      }
      values_.Add(other.values_);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 同步消息推送
  /// </summary>
  public sealed partial class SyncPush : pb::IMessage<SyncPush> {
    private static readonly pb::MessageParser<SyncPush> _parser = new pb::MessageParser<SyncPush>(() => new SyncPush());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<SyncPush> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[7]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SyncPush() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SyncPush(SyncPush other) : this() {
      step_ = other.step_;
      values_ = other.values_.Clone();
      t_ = other.t_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SyncPush Clone() {
      return new SyncPush(this);
    }

    /// <summary>Field number for the "Step" field.</summary>
    public const int StepFieldNumber = 1;
    private ulong step_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong Step {
      get { return step_; }
      set {
        step_ = value;
      }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 2;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 18);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    /// <summary>Field number for the "T" field.</summary>
    public const int TFieldNumber = 3;
    private ulong t_;
    /// <summary>
    /// 服务器开始推送时间戳
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong T {
      get { return t_; }
      set {
        t_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as SyncPush);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(SyncPush other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Step != other.Step) return false;
      if (!Values.Equals(other.Values)) return false;
      if (T != other.T) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Step != 0UL) hash ^= Step.GetHashCode();
      hash ^= Values.GetHashCode();
      if (T != 0UL) hash ^= T.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Step != 0UL) {
        output.WriteRawTag(8);
        output.WriteUInt64(Step);
      }
      values_.WriteTo(output, _map_values_codec);
      if (T != 0UL) {
        output.WriteRawTag(24);
        output.WriteUInt64(T);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Step != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Step);
      }
      size += values_.CalculateSize(_map_values_codec);
      if (T != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(T);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(SyncPush other) {
      if (other == null) {
        return;
      }
      if (other.Step != 0UL) {
        Step = other.Step;
      }
      values_.Add(other.values_);
      if (other.T != 0UL) {
        T = other.T;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            Step = input.ReadUInt64();
            break;
          }
          case 18: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
          case 24: {
            T = input.ReadUInt64();
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 服务器合并用户操作给master
  /// </summary>
  public sealed partial class MasterPush : pb::IMessage<MasterPush> {
    private static readonly pb::MessageParser<MasterPush> _parser = new pb::MessageParser<MasterPush>(() => new MasterPush());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<MasterPush> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[8]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterPush() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterPush(MasterPush other) : this() {
      step_ = other.step_;
      values_ = other.values_.Clone();
      t_ = other.t_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterPush Clone() {
      return new MasterPush(this);
    }

    /// <summary>Field number for the "Step" field.</summary>
    public const int StepFieldNumber = 1;
    private ulong step_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong Step {
      get { return step_; }
      set {
        step_ = value;
      }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 2;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 18);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    /// <summary>Field number for the "T" field.</summary>
    public const int TFieldNumber = 3;
    private ulong t_;
    /// <summary>
    /// 服务器开始推送时间戳
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong T {
      get { return t_; }
      set {
        t_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as MasterPush);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(MasterPush other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Step != other.Step) return false;
      if (!Values.Equals(other.Values)) return false;
      if (T != other.T) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Step != 0UL) hash ^= Step.GetHashCode();
      hash ^= Values.GetHashCode();
      if (T != 0UL) hash ^= T.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Step != 0UL) {
        output.WriteRawTag(8);
        output.WriteUInt64(Step);
      }
      values_.WriteTo(output, _map_values_codec);
      if (T != 0UL) {
        output.WriteRawTag(24);
        output.WriteUInt64(T);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Step != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Step);
      }
      size += values_.CalculateSize(_map_values_codec);
      if (T != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(T);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(MasterPush other) {
      if (other == null) {
        return;
      }
      if (other.Step != 0UL) {
        Step = other.Step;
      }
      values_.Add(other.values_);
      if (other.T != 0UL) {
        T = other.T;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            Step = input.ReadUInt64();
            break;
          }
          case 18: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
          case 24: {
            T = input.ReadUInt64();
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 主机广播消息给flower
  /// </summary>
  public sealed partial class MasterNotify : pb::IMessage<MasterNotify> {
    private static readonly pb::MessageParser<MasterNotify> _parser = new pb::MessageParser<MasterNotify>(() => new MasterNotify());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<MasterNotify> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[9]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterNotify() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterNotify(MasterNotify other) : this() {
      step_ = other.step_;
      values_ = other.values_.Clone();
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterNotify Clone() {
      return new MasterNotify(this);
    }

    /// <summary>Field number for the "Step" field.</summary>
    public const int StepFieldNumber = 1;
    private ulong step_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong Step {
      get { return step_; }
      set {
        step_ = value;
      }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 2;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 18);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as MasterNotify);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(MasterNotify other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Step != other.Step) return false;
      if (!Values.Equals(other.Values)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Step != 0UL) hash ^= Step.GetHashCode();
      hash ^= Values.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Step != 0UL) {
        output.WriteRawTag(8);
        output.WriteUInt64(Step);
      }
      values_.WriteTo(output, _map_values_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Step != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Step);
      }
      size += values_.CalculateSize(_map_values_codec);
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(MasterNotify other) {
      if (other == null) {
        return;
      }
      if (other.Step != 0UL) {
        Step = other.Step;
      }
      values_.Add(other.values_);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            Step = input.ReadUInt64();
            break;
          }
          case 18: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 主机广播消息给flower
  /// </summary>
  public sealed partial class MasterNotifyResponse : pb::IMessage<MasterNotifyResponse> {
    private static readonly pb::MessageParser<MasterNotifyResponse> _parser = new pb::MessageParser<MasterNotifyResponse>(() => new MasterNotifyResponse());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<MasterNotifyResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[10]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterNotifyResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterNotifyResponse(MasterNotifyResponse other) : this() {
      t_ = other.t_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterNotifyResponse Clone() {
      return new MasterNotifyResponse(this);
    }

    /// <summary>Field number for the "T" field.</summary>
    public const int TFieldNumber = 1;
    private ulong t_;
    /// <summary>
    /// 服务器收到MasterNotify的时间戳(毫秒)
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong T {
      get { return t_; }
      set {
        t_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as MasterNotifyResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(MasterNotifyResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (T != other.T) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (T != 0UL) hash ^= T.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (T != 0UL) {
        output.WriteRawTag(8);
        output.WriteUInt64(T);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (T != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(T);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(MasterNotifyResponse other) {
      if (other == null) {
        return;
      }
      if (other.T != 0UL) {
        T = other.T;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            T = input.ReadUInt64();
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 主机存储状态
  /// </summary>
  public sealed partial class MasterStoreNotify : pb::IMessage<MasterStoreNotify> {
    private static readonly pb::MessageParser<MasterStoreNotify> _parser = new pb::MessageParser<MasterStoreNotify>(() => new MasterStoreNotify());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<MasterStoreNotify> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[11]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterStoreNotify() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterStoreNotify(MasterStoreNotify other) : this() {
      values_ = other.values_.Clone();
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterStoreNotify Clone() {
      return new MasterStoreNotify(this);
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 1;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 10);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as MasterStoreNotify);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(MasterStoreNotify other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!Values.Equals(other.Values)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= Values.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      values_.WriteTo(output, _map_values_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += values_.CalculateSize(_map_values_codec);
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(MasterStoreNotify other) {
      if (other == null) {
        return;
      }
      values_.Add(other.values_);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 主机读取状态
  /// </summary>
  public sealed partial class MasterLoadRequest : pb::IMessage<MasterLoadRequest> {
    private static readonly pb::MessageParser<MasterLoadRequest> _parser = new pb::MessageParser<MasterLoadRequest>(() => new MasterLoadRequest());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<MasterLoadRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[12]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterLoadRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterLoadRequest(MasterLoadRequest other) : this() {
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterLoadRequest Clone() {
      return new MasterLoadRequest(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as MasterLoadRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(MasterLoadRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(MasterLoadRequest other) {
      if (other == null) {
        return;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
        }
      }
    }

  }

  /// <summary>
  /// 同步消息响应
  /// </summary>
  public sealed partial class MasterLoadResponse : pb::IMessage<MasterLoadResponse> {
    private static readonly pb::MessageParser<MasterLoadResponse> _parser = new pb::MessageParser<MasterLoadResponse>(() => new MasterLoadResponse());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<MasterLoadResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[13]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterLoadResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterLoadResponse(MasterLoadResponse other) : this() {
      Result = other.result_ != null ? other.Result.Clone() : null;
      values_ = other.values_.Clone();
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MasterLoadResponse Clone() {
      return new MasterLoadResponse(this);
    }

    /// <summary>Field number for the "Result" field.</summary>
    public const int ResultFieldNumber = 1;
    private global::Protos.Result result_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Protos.Result Result {
      get { return result_; }
      set {
        result_ = value;
      }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 2;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 18);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as MasterLoadResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(MasterLoadResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Result, other.Result)) return false;
      if (!Values.Equals(other.Values)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (result_ != null) hash ^= Result.GetHashCode();
      hash ^= Values.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (result_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Result);
      }
      values_.WriteTo(output, _map_values_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (result_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Result);
      }
      size += values_.CalculateSize(_map_values_codec);
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(MasterLoadResponse other) {
      if (other == null) {
        return;
      }
      if (other.result_ != null) {
        if (result_ == null) {
          result_ = new global::Protos.Result();
        }
        Result.MergeFrom(other.Result);
      }
      values_.Add(other.values_);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            if (result_ == null) {
              result_ = new global::Protos.Result();
            }
            input.ReadMessage(result_);
            break;
          }
          case 18: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 同步消息
  /// </summary>
  public sealed partial class PartySyncRequest : pb::IMessage<PartySyncRequest> {
    private static readonly pb::MessageParser<PartySyncRequest> _parser = new pb::MessageParser<PartySyncRequest>(() => new PartySyncRequest());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<PartySyncRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[14]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PartySyncRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PartySyncRequest(PartySyncRequest other) : this() {
      step_ = other.step_;
      values_ = other.values_.Clone();
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PartySyncRequest Clone() {
      return new PartySyncRequest(this);
    }

    /// <summary>Field number for the "Step" field.</summary>
    public const int StepFieldNumber = 1;
    private ulong step_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong Step {
      get { return step_; }
      set {
        step_ = value;
      }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 2;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 18);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as PartySyncRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(PartySyncRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Step != other.Step) return false;
      if (!Values.Equals(other.Values)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Step != 0UL) hash ^= Step.GetHashCode();
      hash ^= Values.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Step != 0UL) {
        output.WriteRawTag(8);
        output.WriteUInt64(Step);
      }
      values_.WriteTo(output, _map_values_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Step != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Step);
      }
      size += values_.CalculateSize(_map_values_codec);
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(PartySyncRequest other) {
      if (other == null) {
        return;
      }
      if (other.Step != 0UL) {
        Step = other.Step;
      }
      values_.Add(other.values_);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            Step = input.ReadUInt64();
            break;
          }
          case 18: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 同步消息响应
  /// </summary>
  public sealed partial class PartySyncResponse : pb::IMessage<PartySyncResponse> {
    private static readonly pb::MessageParser<PartySyncResponse> _parser = new pb::MessageParser<PartySyncResponse>(() => new PartySyncResponse());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<PartySyncResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[15]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PartySyncResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PartySyncResponse(PartySyncResponse other) : this() {
      status_ = other.status_;
      step_ = other.step_;
      values_ = other.values_.Clone();
      t_ = other.t_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PartySyncResponse Clone() {
      return new PartySyncResponse(this);
    }

    /// <summary>Field number for the "Status" field.</summary>
    public const int StatusFieldNumber = 1;
    private bool status_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Status {
      get { return status_; }
      set {
        status_ = value;
      }
    }

    /// <summary>Field number for the "Step" field.</summary>
    public const int StepFieldNumber = 2;
    private ulong step_;
    /// <summary>
    /// status=false时才有值
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong Step {
      get { return step_; }
      set {
        step_ = value;
      }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 3;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 26);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    /// <summary>
    /// status=false时才有值
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    /// <summary>Field number for the "T" field.</summary>
    public const int TFieldNumber = 4;
    private ulong t_;
    /// <summary>
    /// 服务器收到sync request的时间戳(毫秒)
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong T {
      get { return t_; }
      set {
        t_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as PartySyncResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(PartySyncResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Status != other.Status) return false;
      if (Step != other.Step) return false;
      if (!Values.Equals(other.Values)) return false;
      if (T != other.T) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Status != false) hash ^= Status.GetHashCode();
      if (Step != 0UL) hash ^= Step.GetHashCode();
      hash ^= Values.GetHashCode();
      if (T != 0UL) hash ^= T.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Status != false) {
        output.WriteRawTag(8);
        output.WriteBool(Status);
      }
      if (Step != 0UL) {
        output.WriteRawTag(16);
        output.WriteUInt64(Step);
      }
      values_.WriteTo(output, _map_values_codec);
      if (T != 0UL) {
        output.WriteRawTag(32);
        output.WriteUInt64(T);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Status != false) {
        size += 1 + 1;
      }
      if (Step != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Step);
      }
      size += values_.CalculateSize(_map_values_codec);
      if (T != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(T);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(PartySyncResponse other) {
      if (other == null) {
        return;
      }
      if (other.Status != false) {
        Status = other.Status;
      }
      if (other.Step != 0UL) {
        Step = other.Step;
      }
      values_.Add(other.values_);
      if (other.T != 0UL) {
        T = other.T;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            Status = input.ReadBool();
            break;
          }
          case 16: {
            Step = input.ReadUInt64();
            break;
          }
          case 26: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
          case 32: {
            T = input.ReadUInt64();
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// 同步消息推送
  /// </summary>
  public sealed partial class PartySyncPush : pb::IMessage<PartySyncPush> {
    private static readonly pb::MessageParser<PartySyncPush> _parser = new pb::MessageParser<PartySyncPush>(() => new PartySyncPush());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<PartySyncPush> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Protos.SyncReflection.Descriptor.MessageTypes[16]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PartySyncPush() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PartySyncPush(PartySyncPush other) : this() {
      step_ = other.step_;
      values_ = other.values_.Clone();
      t_ = other.t_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PartySyncPush Clone() {
      return new PartySyncPush(this);
    }

    /// <summary>Field number for the "Step" field.</summary>
    public const int StepFieldNumber = 1;
    private ulong step_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong Step {
      get { return step_; }
      set {
        step_ = value;
      }
    }

    /// <summary>Field number for the "Values" field.</summary>
    public const int ValuesFieldNumber = 2;
    private static readonly pbc::MapField<string, pb::ByteString>.Codec _map_values_codec
        = new pbc::MapField<string, pb::ByteString>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForBytes(18), 18);
    private readonly pbc::MapField<string, pb::ByteString> values_ = new pbc::MapField<string, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, pb::ByteString> Values {
      get { return values_; }
    }

    /// <summary>Field number for the "T" field.</summary>
    public const int TFieldNumber = 3;
    private ulong t_;
    /// <summary>
    /// 服务器开始推送时间戳
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong T {
      get { return t_; }
      set {
        t_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as PartySyncPush);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(PartySyncPush other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Step != other.Step) return false;
      if (!Values.Equals(other.Values)) return false;
      if (T != other.T) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Step != 0UL) hash ^= Step.GetHashCode();
      hash ^= Values.GetHashCode();
      if (T != 0UL) hash ^= T.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Step != 0UL) {
        output.WriteRawTag(8);
        output.WriteUInt64(Step);
      }
      values_.WriteTo(output, _map_values_codec);
      if (T != 0UL) {
        output.WriteRawTag(24);
        output.WriteUInt64(T);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Step != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Step);
      }
      size += values_.CalculateSize(_map_values_codec);
      if (T != 0UL) {
        size += 1 + pb::CodedOutputStream.ComputeUInt64Size(T);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(PartySyncPush other) {
      if (other == null) {
        return;
      }
      if (other.Step != 0UL) {
        Step = other.Step;
      }
      values_.Add(other.values_);
      if (other.T != 0UL) {
        T = other.T;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            Step = input.ReadUInt64();
            break;
          }
          case 18: {
            values_.AddEntriesFrom(input, _map_values_codec);
            break;
          }
          case 24: {
            T = input.ReadUInt64();
            break;
          }
        }
      }
    }

  }

  #endregion

}

#endregion Designer generated code
