text: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: github.com/heroiclabs/nakama-common/rtapi/realtime.proto
  
  #include "github.com/heroiclabs/nakama-common/rtapi/realtime.pb.h"
  
  #include <algorithm>
  
  #include <google/protobuf/stubs/common.h>
  #include <google/protobuf/stubs/port.h>
  #include <google/protobuf/io/coded_stream.h>
  #include <google/protobuf/wire_format_lite_inl.h>
  #include <google/protobuf/descriptor.h>
  #include <google/protobuf/generated_message_reflection.h>
  #include <google/protobuf/reflection_ops.h>
  #include <google/protobuf/wire_format.h>
  // This is a temporary google only hack
  #ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  #include "third_party/protobuf/version.h"
  #endif
  // @@protoc_insertion_point(includes)
  
  namespace protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2fapi_2fapi_2eproto {
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2fapi_2fapi_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Rpc;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2fapi_2fapi_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Notification;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2fapi_2fapi_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_ChannelMessage;
  }  // namespace protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2fapi_2fapi_2eproto
  namespace protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto {
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ChannelLeave;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ChannelMessageRemove;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ChannelMessageSend;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ChannelMessageUpdate;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Error_ContextEntry_DoNotUse;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MatchCreate;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MatchJoin_MetadataEntry_DoNotUse;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MatchLeave;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerAdd_NumericPropertiesEntry_DoNotUse;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerAdd_StringPropertiesEntry_DoNotUse;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerRemove;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerTicket;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Ping;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Pong;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_StatusFollow;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_StatusUnfollow;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Stream;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Channel;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_ChannelJoin;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_ChannelPresenceEvent;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Error;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_MatchData;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_MatchDataSend;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_MatchJoin;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_MatchPresenceEvent;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_MatchmakerMatched;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Notifications;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Status;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_StatusPresenceEvent;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_StatusUpdate;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_UserPresence;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_Match;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_MatchmakerAdd;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_StreamData;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_StreamPresenceEvent;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_ChannelMessageAck;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_MatchmakerMatched_MatchmakerUser;
  }  // namespace protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto
  namespace protobuf_google_2fprotobuf_2ftimestamp_2eproto {
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2ftimestamp_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Timestamp;
  }  // namespace protobuf_google_2fprotobuf_2ftimestamp_2eproto
  namespace protobuf_google_2fprotobuf_2fwrappers_2eproto {
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_BoolValue;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Int32Value;
  extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_StringValue;
  }  // namespace protobuf_google_2fprotobuf_2fwrappers_2eproto
  namespace nakama {
  namespace realtime {
  class EnvelopeDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Envelope>
        _instance;
    const ::nakama::realtime::Channel* channel_;
    const ::nakama::realtime::ChannelJoin* channel_join_;
    const ::nakama::realtime::ChannelLeave* channel_leave_;
    const ::nakama::api::ChannelMessage* channel_message_;
    const ::nakama::realtime::ChannelMessageAck* channel_message_ack_;
    const ::nakama::realtime::ChannelMessageSend* channel_message_send_;
    const ::nakama::realtime::ChannelMessageUpdate* channel_message_update_;
    const ::nakama::realtime::ChannelMessageRemove* channel_message_remove_;
    const ::nakama::realtime::ChannelPresenceEvent* channel_presence_event_;
    const ::nakama::realtime::Error* error_;
    const ::nakama::realtime::Match* match_;
    const ::nakama::realtime::MatchCreate* match_create_;
    const ::nakama::realtime::MatchData* match_data_;
    const ::nakama::realtime::MatchDataSend* match_data_send_;
    const ::nakama::realtime::MatchJoin* match_join_;
    const ::nakama::realtime::MatchLeave* match_leave_;
    const ::nakama::realtime::MatchPresenceEvent* match_presence_event_;
    const ::nakama::realtime::MatchmakerAdd* matchmaker_add_;
    const ::nakama::realtime::MatchmakerMatched* matchmaker_matched_;
    const ::nakama::realtime::MatchmakerRemove* matchmaker_remove_;
    const ::nakama::realtime::MatchmakerTicket* matchmaker_ticket_;
    const ::nakama::realtime::Notifications* notifications_;
    const ::nakama::api::Rpc* rpc_;
    const ::nakama::realtime::Status* status_;
    const ::nakama::realtime::StatusFollow* status_follow_;
    const ::nakama::realtime::StatusPresenceEvent* status_presence_event_;
    const ::nakama::realtime::StatusUnfollow* status_unfollow_;
    const ::nakama::realtime::StatusUpdate* status_update_;
    const ::nakama::realtime::StreamData* stream_data_;
    const ::nakama::realtime::StreamPresenceEvent* stream_presence_event_;
    const ::nakama::realtime::Ping* ping_;
    const ::nakama::realtime::Pong* pong_;
  } _Envelope_default_instance_;
  class ChannelDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Channel>
        _instance;
  } _Channel_default_instance_;
  class ChannelJoinDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<ChannelJoin>
        _instance;
  } _ChannelJoin_default_instance_;
  class ChannelLeaveDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<ChannelLeave>
        _instance;
  } _ChannelLeave_default_instance_;
  class ChannelMessageAckDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<ChannelMessageAck>
        _instance;
  } _ChannelMessageAck_default_instance_;
  class ChannelMessageSendDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<ChannelMessageSend>
        _instance;
  } _ChannelMessageSend_default_instance_;
  class ChannelMessageUpdateDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<ChannelMessageUpdate>
        _instance;
  } _ChannelMessageUpdate_default_instance_;
  class ChannelMessageRemoveDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<ChannelMessageRemove>
        _instance;
  } _ChannelMessageRemove_default_instance_;
  class ChannelPresenceEventDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<ChannelPresenceEvent>
        _instance;
  } _ChannelPresenceEvent_default_instance_;
  class Error_ContextEntry_DoNotUseDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Error_ContextEntry_DoNotUse>
        _instance;
  } _Error_ContextEntry_DoNotUse_default_instance_;
  class ErrorDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Error>
        _instance;
  } _Error_default_instance_;
  class MatchDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Match>
        _instance;
  } _Match_default_instance_;
  class MatchCreateDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchCreate>
        _instance;
  } _MatchCreate_default_instance_;
  class MatchDataDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchData>
        _instance;
  } _MatchData_default_instance_;
  class MatchDataSendDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchDataSend>
        _instance;
  } _MatchDataSend_default_instance_;
  class MatchJoin_MetadataEntry_DoNotUseDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchJoin_MetadataEntry_DoNotUse>
        _instance;
  } _MatchJoin_MetadataEntry_DoNotUse_default_instance_;
  class MatchJoinDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchJoin>
        _instance;
    ::google::protobuf::internal::ArenaStringPtr match_id_;
    ::google::protobuf::internal::ArenaStringPtr token_;
  } _MatchJoin_default_instance_;
  class MatchLeaveDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchLeave>
        _instance;
  } _MatchLeave_default_instance_;
  class MatchPresenceEventDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchPresenceEvent>
        _instance;
  } _MatchPresenceEvent_default_instance_;
  class MatchmakerAdd_StringPropertiesEntry_DoNotUseDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchmakerAdd_StringPropertiesEntry_DoNotUse>
        _instance;
  } _MatchmakerAdd_StringPropertiesEntry_DoNotUse_default_instance_;
  class MatchmakerAdd_NumericPropertiesEntry_DoNotUseDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchmakerAdd_NumericPropertiesEntry_DoNotUse>
        _instance;
  } _MatchmakerAdd_NumericPropertiesEntry_DoNotUse_default_instance_;
  class MatchmakerAddDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchmakerAdd>
        _instance;
  } _MatchmakerAdd_default_instance_;
  class MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUseDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse>
        _instance;
  } _MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse_default_instance_;
  class MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUseDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse>
        _instance;
  } _MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse_default_instance_;
  class MatchmakerMatched_MatchmakerUserDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchmakerMatched_MatchmakerUser>
        _instance;
  } _MatchmakerMatched_MatchmakerUser_default_instance_;
  class MatchmakerMatchedDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchmakerMatched>
        _instance;
    ::google::protobuf::internal::ArenaStringPtr match_id_;
    ::google::protobuf::internal::ArenaStringPtr token_;
  } _MatchmakerMatched_default_instance_;
  class MatchmakerRemoveDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchmakerRemove>
        _instance;
  } _MatchmakerRemove_default_instance_;
  class MatchmakerTicketDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<MatchmakerTicket>
        _instance;
  } _MatchmakerTicket_default_instance_;
  class NotificationsDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Notifications>
        _instance;
  } _Notifications_default_instance_;
  class PingDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Ping>
        _instance;
  } _Ping_default_instance_;
  class PongDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Pong>
        _instance;
  } _Pong_default_instance_;
  class StatusDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Status>
        _instance;
  } _Status_default_instance_;
  class StatusFollowDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<StatusFollow>
        _instance;
  } _StatusFollow_default_instance_;
  class StatusPresenceEventDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<StatusPresenceEvent>
        _instance;
  } _StatusPresenceEvent_default_instance_;
  class StatusUnfollowDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<StatusUnfollow>
        _instance;
  } _StatusUnfollow_default_instance_;
  class StatusUpdateDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<StatusUpdate>
        _instance;
  } _StatusUpdate_default_instance_;
  class StreamDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<Stream>
        _instance;
  } _Stream_default_instance_;
  class StreamDataDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<StreamData>
        _instance;
  } _StreamData_default_instance_;
  class StreamPresenceEventDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<StreamPresenceEvent>
        _instance;
  } _StreamPresenceEvent_default_instance_;
  class UserPresenceDefaultTypeInternal {
   public:
    ::google::protobuf::internal::ExplicitlyConstructed<UserPresence>
        _instance;
  } _UserPresence_default_instance_;
  }  // namespace realtime
  }  // namespace nakama
  namespace protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto {
  static void InitDefaultsEnvelope() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Envelope_default_instance_;
      new (ptr) ::nakama::realtime::Envelope();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::Envelope::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<32> scc_info_Envelope =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 32, InitDefaultsEnvelope}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Channel.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelJoin.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelLeave.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2fapi_2fapi_2eproto::scc_info_ChannelMessage.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageAck.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageSend.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageUpdate.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageRemove.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelPresenceEvent.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Error.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Match.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchCreate.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchData.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchDataSend.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchJoin.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchLeave.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchPresenceEvent.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerAdd.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerMatched.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerRemove.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerTicket.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Notifications.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2fapi_2fapi_2eproto::scc_info_Rpc.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Status.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusFollow.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusPresenceEvent.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusUnfollow.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusUpdate.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StreamData.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StreamPresenceEvent.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Ping.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Pong.base,}};
  
  static void InitDefaultsChannel() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Channel_default_instance_;
      new (ptr) ::nakama::realtime::Channel();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::Channel::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_Channel =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsChannel}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsChannelJoin() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_ChannelJoin_default_instance_;
      new (ptr) ::nakama::realtime::ChannelJoin();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::ChannelJoin::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_ChannelJoin =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsChannelJoin}, {
        &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_BoolValue.base,}};
  
  static void InitDefaultsChannelLeave() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_ChannelLeave_default_instance_;
      new (ptr) ::nakama::realtime::ChannelLeave();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::ChannelLeave::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_ChannelLeave =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsChannelLeave}, {}};
  
  static void InitDefaultsChannelMessageAck() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_ChannelMessageAck_default_instance_;
      new (ptr) ::nakama::realtime::ChannelMessageAck();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::ChannelMessageAck::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<3> scc_info_ChannelMessageAck =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 3, InitDefaultsChannelMessageAck}, {
        &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_Int32Value.base,
        &protobuf_google_2fprotobuf_2ftimestamp_2eproto::scc_info_Timestamp.base,
        &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_BoolValue.base,}};
  
  static void InitDefaultsChannelMessageSend() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_ChannelMessageSend_default_instance_;
      new (ptr) ::nakama::realtime::ChannelMessageSend();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::ChannelMessageSend::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_ChannelMessageSend =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsChannelMessageSend}, {}};
  
  static void InitDefaultsChannelMessageUpdate() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_ChannelMessageUpdate_default_instance_;
      new (ptr) ::nakama::realtime::ChannelMessageUpdate();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::ChannelMessageUpdate::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_ChannelMessageUpdate =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsChannelMessageUpdate}, {}};
  
  static void InitDefaultsChannelMessageRemove() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_ChannelMessageRemove_default_instance_;
      new (ptr) ::nakama::realtime::ChannelMessageRemove();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::ChannelMessageRemove::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_ChannelMessageRemove =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsChannelMessageRemove}, {}};
  
  static void InitDefaultsChannelPresenceEvent() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_ChannelPresenceEvent_default_instance_;
      new (ptr) ::nakama::realtime::ChannelPresenceEvent();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::ChannelPresenceEvent::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_ChannelPresenceEvent =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsChannelPresenceEvent}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsError_ContextEntry_DoNotUse() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Error_ContextEntry_DoNotUse_default_instance_;
      new (ptr) ::nakama::realtime::Error_ContextEntry_DoNotUse();
    }
    ::nakama::realtime::Error_ContextEntry_DoNotUse::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_Error_ContextEntry_DoNotUse =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsError_ContextEntry_DoNotUse}, {}};
  
  static void InitDefaultsError() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Error_default_instance_;
      new (ptr) ::nakama::realtime::Error();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::Error::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_Error =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsError}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Error_ContextEntry_DoNotUse.base,}};
  
  static void InitDefaultsMatch() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Match_default_instance_;
      new (ptr) ::nakama::realtime::Match();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::Match::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<2> scc_info_Match =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsMatch}, {
        &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_StringValue.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsMatchCreate() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchCreate_default_instance_;
      new (ptr) ::nakama::realtime::MatchCreate();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchCreate::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_MatchCreate =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMatchCreate}, {}};
  
  static void InitDefaultsMatchData() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchData_default_instance_;
      new (ptr) ::nakama::realtime::MatchData();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchData::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_MatchData =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsMatchData}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsMatchDataSend() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchDataSend_default_instance_;
      new (ptr) ::nakama::realtime::MatchDataSend();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchDataSend::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_MatchDataSend =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsMatchDataSend}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsMatchJoin_MetadataEntry_DoNotUse() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchJoin_MetadataEntry_DoNotUse_default_instance_;
      new (ptr) ::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse();
    }
    ::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_MatchJoin_MetadataEntry_DoNotUse =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMatchJoin_MetadataEntry_DoNotUse}, {}};
  
  static void InitDefaultsMatchJoin() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchJoin_default_instance_;
      new (ptr) ::nakama::realtime::MatchJoin();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchJoin::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_MatchJoin =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsMatchJoin}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchJoin_MetadataEntry_DoNotUse.base,}};
  
  static void InitDefaultsMatchLeave() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchLeave_default_instance_;
      new (ptr) ::nakama::realtime::MatchLeave();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchLeave::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_MatchLeave =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMatchLeave}, {}};
  
  static void InitDefaultsMatchPresenceEvent() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchPresenceEvent_default_instance_;
      new (ptr) ::nakama::realtime::MatchPresenceEvent();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchPresenceEvent::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_MatchPresenceEvent =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsMatchPresenceEvent}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsMatchmakerAdd_StringPropertiesEntry_DoNotUse() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchmakerAdd_StringPropertiesEntry_DoNotUse_default_instance_;
      new (ptr) ::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse();
    }
    ::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerAdd_StringPropertiesEntry_DoNotUse =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMatchmakerAdd_StringPropertiesEntry_DoNotUse}, {}};
  
  static void InitDefaultsMatchmakerAdd_NumericPropertiesEntry_DoNotUse() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchmakerAdd_NumericPropertiesEntry_DoNotUse_default_instance_;
      new (ptr) ::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse();
    }
    ::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerAdd_NumericPropertiesEntry_DoNotUse =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMatchmakerAdd_NumericPropertiesEntry_DoNotUse}, {}};
  
  static void InitDefaultsMatchmakerAdd() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchmakerAdd_default_instance_;
      new (ptr) ::nakama::realtime::MatchmakerAdd();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchmakerAdd::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<2> scc_info_MatchmakerAdd =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsMatchmakerAdd}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerAdd_StringPropertiesEntry_DoNotUse.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerAdd_NumericPropertiesEntry_DoNotUse.base,}};
  
  static void InitDefaultsMatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse_default_instance_;
      new (ptr) ::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse();
    }
    ::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse}, {}};
  
  static void InitDefaultsMatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse_default_instance_;
      new (ptr) ::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse();
    }
    ::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse}, {}};
  
  static void InitDefaultsMatchmakerMatched_MatchmakerUser() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchmakerMatched_MatchmakerUser_default_instance_;
      new (ptr) ::nakama::realtime::MatchmakerMatched_MatchmakerUser();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchmakerMatched_MatchmakerUser::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<3> scc_info_MatchmakerMatched_MatchmakerUser =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 3, InitDefaultsMatchmakerMatched_MatchmakerUser}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse.base,}};
  
  static void InitDefaultsMatchmakerMatched() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchmakerMatched_default_instance_;
      new (ptr) ::nakama::realtime::MatchmakerMatched();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchmakerMatched::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_MatchmakerMatched =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsMatchmakerMatched}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerMatched_MatchmakerUser.base,}};
  
  static void InitDefaultsMatchmakerRemove() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchmakerRemove_default_instance_;
      new (ptr) ::nakama::realtime::MatchmakerRemove();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchmakerRemove::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerRemove =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMatchmakerRemove}, {}};
  
  static void InitDefaultsMatchmakerTicket() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_MatchmakerTicket_default_instance_;
      new (ptr) ::nakama::realtime::MatchmakerTicket();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::MatchmakerTicket::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_MatchmakerTicket =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMatchmakerTicket}, {}};
  
  static void InitDefaultsNotifications() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Notifications_default_instance_;
      new (ptr) ::nakama::realtime::Notifications();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::Notifications::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_Notifications =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsNotifications}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2fapi_2fapi_2eproto::scc_info_Notification.base,}};
  
  static void InitDefaultsPing() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Ping_default_instance_;
      new (ptr) ::nakama::realtime::Ping();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::Ping::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_Ping =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsPing}, {}};
  
  static void InitDefaultsPong() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Pong_default_instance_;
      new (ptr) ::nakama::realtime::Pong();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::Pong::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_Pong =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsPong}, {}};
  
  static void InitDefaultsStatus() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Status_default_instance_;
      new (ptr) ::nakama::realtime::Status();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::Status::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_Status =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsStatus}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsStatusFollow() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_StatusFollow_default_instance_;
      new (ptr) ::nakama::realtime::StatusFollow();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::StatusFollow::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_StatusFollow =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsStatusFollow}, {}};
  
  static void InitDefaultsStatusPresenceEvent() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_StatusPresenceEvent_default_instance_;
      new (ptr) ::nakama::realtime::StatusPresenceEvent();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::StatusPresenceEvent::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_StatusPresenceEvent =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsStatusPresenceEvent}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsStatusUnfollow() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_StatusUnfollow_default_instance_;
      new (ptr) ::nakama::realtime::StatusUnfollow();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::StatusUnfollow::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_StatusUnfollow =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsStatusUnfollow}, {}};
  
  static void InitDefaultsStatusUpdate() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_StatusUpdate_default_instance_;
      new (ptr) ::nakama::realtime::StatusUpdate();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::StatusUpdate::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_StatusUpdate =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsStatusUpdate}, {
        &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_StringValue.base,}};
  
  static void InitDefaultsStream() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_Stream_default_instance_;
      new (ptr) ::nakama::realtime::Stream();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::Stream::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<0> scc_info_Stream =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsStream}, {}};
  
  static void InitDefaultsStreamData() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_StreamData_default_instance_;
      new (ptr) ::nakama::realtime::StreamData();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::StreamData::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<2> scc_info_StreamData =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsStreamData}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Stream.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsStreamPresenceEvent() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_StreamPresenceEvent_default_instance_;
      new (ptr) ::nakama::realtime::StreamPresenceEvent();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::StreamPresenceEvent::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<2> scc_info_StreamPresenceEvent =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsStreamPresenceEvent}, {
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Stream.base,
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base,}};
  
  static void InitDefaultsUserPresence() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::nakama::realtime::_UserPresence_default_instance_;
      new (ptr) ::nakama::realtime::UserPresence();
      ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
    }
    ::nakama::realtime::UserPresence::InitAsDefaultInstance();
  }
  
  ::google::protobuf::internal::SCCInfo<1> scc_info_UserPresence =
      {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsUserPresence}, {
        &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_StringValue.base,}};
  
  void InitDefaults() {
    ::google::protobuf::internal::InitSCC(&scc_info_Envelope.base);
    ::google::protobuf::internal::InitSCC(&scc_info_Channel.base);
    ::google::protobuf::internal::InitSCC(&scc_info_ChannelJoin.base);
    ::google::protobuf::internal::InitSCC(&scc_info_ChannelLeave.base);
    ::google::protobuf::internal::InitSCC(&scc_info_ChannelMessageAck.base);
    ::google::protobuf::internal::InitSCC(&scc_info_ChannelMessageSend.base);
    ::google::protobuf::internal::InitSCC(&scc_info_ChannelMessageUpdate.base);
    ::google::protobuf::internal::InitSCC(&scc_info_ChannelMessageRemove.base);
    ::google::protobuf::internal::InitSCC(&scc_info_ChannelPresenceEvent.base);
    ::google::protobuf::internal::InitSCC(&scc_info_Error_ContextEntry_DoNotUse.base);
    ::google::protobuf::internal::InitSCC(&scc_info_Error.base);
    ::google::protobuf::internal::InitSCC(&scc_info_Match.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchCreate.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchData.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchDataSend.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchJoin_MetadataEntry_DoNotUse.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchJoin.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchLeave.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchPresenceEvent.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchmakerAdd_StringPropertiesEntry_DoNotUse.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchmakerAdd_NumericPropertiesEntry_DoNotUse.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchmakerAdd.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchmakerMatched_MatchmakerUser.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchmakerMatched.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchmakerRemove.base);
    ::google::protobuf::internal::InitSCC(&scc_info_MatchmakerTicket.base);
    ::google::protobuf::internal::InitSCC(&scc_info_Notifications.base);
    ::google::protobuf::internal::InitSCC(&scc_info_Ping.base);
    ::google::protobuf::internal::InitSCC(&scc_info_Pong.base);
    ::google::protobuf::internal::InitSCC(&scc_info_Status.base);
    ::google::protobuf::internal::InitSCC(&scc_info_StatusFollow.base);
    ::google::protobuf::internal::InitSCC(&scc_info_StatusPresenceEvent.base);
    ::google::protobuf::internal::InitSCC(&scc_info_StatusUnfollow.base);
    ::google::protobuf::internal::InitSCC(&scc_info_StatusUpdate.base);
    ::google::protobuf::internal::InitSCC(&scc_info_Stream.base);
    ::google::protobuf::internal::InitSCC(&scc_info_StreamData.base);
    ::google::protobuf::internal::InitSCC(&scc_info_StreamPresenceEvent.base);
    ::google::protobuf::internal::InitSCC(&scc_info_UserPresence.base);
  }
  
  ::google::protobuf::Metadata file_level_metadata[40];
  const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[2];
  
  const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Envelope, _internal_metadata_),
    ~0u,  // no _extensions_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Envelope, _oneof_case_[0]),
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Envelope, cid_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, channel_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, channel_join_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, channel_leave_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, channel_message_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, channel_message_ack_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, channel_message_send_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, channel_message_update_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, channel_message_remove_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, channel_presence_event_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, error_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, match_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, match_create_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, match_data_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, match_data_send_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, match_join_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, match_leave_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, match_presence_event_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, matchmaker_add_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, matchmaker_matched_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, matchmaker_remove_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, matchmaker_ticket_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, notifications_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, rpc_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, status_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, status_follow_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, status_presence_event_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, status_unfollow_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, status_update_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, stream_data_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, stream_presence_event_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, ping_),
    offsetof(::nakama::realtime::EnvelopeDefaultTypeInternal, pong_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Envelope, message_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Channel, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Channel, id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Channel, presences_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Channel, self_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Channel, room_name_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Channel, group_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Channel, user_id_one_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Channel, user_id_two_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelJoin, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelJoin, target_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelJoin, type_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelJoin, persistence_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelJoin, hidden_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelLeave, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelLeave, channel_id_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, channel_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, message_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, code_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, username_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, create_time_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, update_time_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, persistent_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, room_name_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, group_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, user_id_one_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageAck, user_id_two_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageSend, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageSend, channel_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageSend, content_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageUpdate, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageUpdate, channel_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageUpdate, message_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageUpdate, content_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageRemove, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageRemove, channel_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelMessageRemove, message_id_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelPresenceEvent, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelPresenceEvent, channel_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelPresenceEvent, joins_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelPresenceEvent, leaves_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelPresenceEvent, room_name_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelPresenceEvent, group_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelPresenceEvent, user_id_one_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::ChannelPresenceEvent, user_id_two_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Error_ContextEntry_DoNotUse, _has_bits_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Error_ContextEntry_DoNotUse, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Error_ContextEntry_DoNotUse, key_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Error_ContextEntry_DoNotUse, value_),
    0,
    1,
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Error, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Error, code_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Error, message_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Error, context_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Match, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Match, match_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Match, authoritative_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Match, label_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Match, size_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Match, presences_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Match, self_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchCreate, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchData, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchData, match_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchData, presence_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchData, op_code_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchData, data_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchData, reliable_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchDataSend, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchDataSend, match_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchDataSend, op_code_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchDataSend, data_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchDataSend, presences_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchDataSend, reliable_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse, _has_bits_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse, key_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse, value_),
    0,
    1,
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchJoin, _internal_metadata_),
    ~0u,  // no _extensions_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchJoin, _oneof_case_[0]),
    ~0u,  // no _weak_field_map_
    offsetof(::nakama::realtime::MatchJoinDefaultTypeInternal, match_id_),
    offsetof(::nakama::realtime::MatchJoinDefaultTypeInternal, token_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchJoin, metadata_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchJoin, id_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchLeave, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchLeave, match_id_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchPresenceEvent, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchPresenceEvent, match_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchPresenceEvent, joins_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchPresenceEvent, leaves_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse, _has_bits_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse, key_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse, value_),
    0,
    1,
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse, _has_bits_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse, key_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse, value_),
    0,
    1,
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd, min_count_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd, max_count_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd, query_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd, string_properties_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerAdd, numeric_properties_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse, _has_bits_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse, key_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse, value_),
    0,
    1,
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse, _has_bits_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse, key_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse, value_),
    0,
    1,
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser, presence_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser, string_properties_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched_MatchmakerUser, numeric_properties_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched, _internal_metadata_),
    ~0u,  // no _extensions_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched, _oneof_case_[0]),
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched, ticket_),
    offsetof(::nakama::realtime::MatchmakerMatchedDefaultTypeInternal, match_id_),
    offsetof(::nakama::realtime::MatchmakerMatchedDefaultTypeInternal, token_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched, users_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched, self_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerMatched, id_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerRemove, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerRemove, ticket_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerTicket, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::MatchmakerTicket, ticket_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Notifications, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Notifications, notifications_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Ping, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Pong, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Status, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Status, presences_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusFollow, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusFollow, user_ids_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusFollow, usernames_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusPresenceEvent, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusPresenceEvent, joins_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusPresenceEvent, leaves_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusUnfollow, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusUnfollow, user_ids_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusUpdate, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StatusUpdate, status_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Stream, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Stream, mode_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Stream, subject_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Stream, subcontext_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::Stream, label_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StreamData, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StreamData, stream_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StreamData, sender_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StreamData, data_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StreamData, reliable_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StreamPresenceEvent, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StreamPresenceEvent, stream_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StreamPresenceEvent, joins_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::StreamPresenceEvent, leaves_),
    ~0u,  // no _has_bits_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::UserPresence, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::UserPresence, user_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::UserPresence, session_id_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::UserPresence, username_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::UserPresence, persistence_),
    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nakama::realtime::UserPresence, status_),
  };
  static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
    { 0, -1, sizeof(::nakama::realtime::Envelope)},
    { 39, -1, sizeof(::nakama::realtime::Channel)},
    { 51, -1, sizeof(::nakama::realtime::ChannelJoin)},
    { 60, -1, sizeof(::nakama::realtime::ChannelLeave)},
    { 66, -1, sizeof(::nakama::realtime::ChannelMessageAck)},
    { 82, -1, sizeof(::nakama::realtime::ChannelMessageSend)},
    { 89, -1, sizeof(::nakama::realtime::ChannelMessageUpdate)},
    { 97, -1, sizeof(::nakama::realtime::ChannelMessageRemove)},
    { 104, -1, sizeof(::nakama::realtime::ChannelPresenceEvent)},
    { 116, 123, sizeof(::nakama::realtime::Error_ContextEntry_DoNotUse)},
    { 125, -1, sizeof(::nakama::realtime::Error)},
    { 133, -1, sizeof(::nakama::realtime::Match)},
    { 144, -1, sizeof(::nakama::realtime::MatchCreate)},
    { 149, -1, sizeof(::nakama::realtime::MatchData)},
    { 159, -1, sizeof(::nakama::realtime::MatchDataSend)},
    { 169, 176, sizeof(::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse)},
    { 178, -1, sizeof(::nakama::realtime::MatchJoin)},
    { 187, -1, sizeof(::nakama::realtime::MatchLeave)},
    { 193, -1, sizeof(::nakama::realtime::MatchPresenceEvent)},
    { 201, 208, sizeof(::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse)},
    { 210, 217, sizeof(::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse)},
    { 219, -1, sizeof(::nakama::realtime::MatchmakerAdd)},
    { 229, 236, sizeof(::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse)},
    { 238, 245, sizeof(::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse)},
    { 247, -1, sizeof(::nakama::realtime::MatchmakerMatched_MatchmakerUser)},
    { 255, -1, sizeof(::nakama::realtime::MatchmakerMatched)},
    { 266, -1, sizeof(::nakama::realtime::MatchmakerRemove)},
    { 272, -1, sizeof(::nakama::realtime::MatchmakerTicket)},
    { 278, -1, sizeof(::nakama::realtime::Notifications)},
    { 284, -1, sizeof(::nakama::realtime::Ping)},
    { 289, -1, sizeof(::nakama::realtime::Pong)},
    { 294, -1, sizeof(::nakama::realtime::Status)},
    { 300, -1, sizeof(::nakama::realtime::StatusFollow)},
    { 307, -1, sizeof(::nakama::realtime::StatusPresenceEvent)},
    { 314, -1, sizeof(::nakama::realtime::StatusUnfollow)},
    { 320, -1, sizeof(::nakama::realtime::StatusUpdate)},
    { 326, -1, sizeof(::nakama::realtime::Stream)},
    { 335, -1, sizeof(::nakama::realtime::StreamData)},
    { 344, -1, sizeof(::nakama::realtime::StreamPresenceEvent)},
    { 352, -1, sizeof(::nakama::realtime::UserPresence)},
  };
  
  static ::google::protobuf::Message const * const file_default_instances[] = {
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Envelope_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Channel_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_ChannelJoin_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_ChannelLeave_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_ChannelMessageAck_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_ChannelMessageSend_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_ChannelMessageUpdate_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_ChannelMessageRemove_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_ChannelPresenceEvent_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Error_ContextEntry_DoNotUse_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Error_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Match_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchCreate_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchData_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchDataSend_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchJoin_MetadataEntry_DoNotUse_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchJoin_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchLeave_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchPresenceEvent_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchmakerAdd_StringPropertiesEntry_DoNotUse_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchmakerAdd_NumericPropertiesEntry_DoNotUse_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchmakerAdd_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchmakerMatched_MatchmakerUser_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchmakerMatched_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchmakerRemove_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_MatchmakerTicket_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Notifications_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Ping_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Pong_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Status_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_StatusFollow_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_StatusPresenceEvent_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_StatusUnfollow_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_StatusUpdate_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_Stream_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_StreamData_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_StreamPresenceEvent_default_instance_),
    reinterpret_cast<const ::google::protobuf::Message*>(&::nakama::realtime::_UserPresence_default_instance_),
  };
  
  void protobuf_AssignDescriptors() {
    AddDescriptors();
    AssignDescriptors(
        "github.com/heroiclabs/nakama-common/rtapi/realtime.proto", schemas, file_default_instances, TableStruct::offsets,
        file_level_metadata, file_level_enum_descriptors, NULL);
  }
  
  void protobuf_AssignDescriptorsOnce() {
    static ::google::protobuf::internal::once_flag once;
    ::google::protobuf::internal::call_once(once, protobuf_AssignDescriptors);
  }
  
  void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD;
  void protobuf_RegisterTypes(const ::std::string&) {
    protobuf_AssignDescriptorsOnce();
    ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 40);
  }
  
  void AddDescriptorsImpl() {
    InitDefaults();
    static const char descriptor[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
        "\n8github.com/heroiclabs/nakama-common/rt"
        "api/realtime.proto\022\017nakama.realtime\032\037goo"
        "gle/protobuf/timestamp.proto\032\036google/pro"
        "tobuf/wrappers.proto\0321github.com/heroicl"
        "abs/nakama-common/api/api.proto\"\263\016\n\010Enve"
        "lope\022\013\n\003cid\030\001 \001(\t\022+\n\007channel\030\002 \001(\0132\030.nak"
        "ama.realtime.ChannelH\000\0224\n\014channel_join\030\003"
        " \001(\0132\034.nakama.realtime.ChannelJoinH\000\0226\n\r"
        "channel_leave\030\004 \001(\0132\035.nakama.realtime.Ch"
        "annelLeaveH\000\0225\n\017channel_message\030\005 \001(\0132\032."
        "nakama.api.ChannelMessageH\000\022A\n\023channel_m"
        "essage_ack\030\006 \001(\0132\".nakama.realtime.Chann"
        "elMessageAckH\000\022C\n\024channel_message_send\030\007"
        " \001(\0132#.nakama.realtime.ChannelMessageSen"
        "dH\000\022G\n\026channel_message_update\030\010 \001(\0132%.na"
        "kama.realtime.ChannelMessageUpdateH\000\022G\n\026"
        "channel_message_remove\030\t \001(\0132%.nakama.re"
        "altime.ChannelMessageRemoveH\000\022G\n\026channel"
        "_presence_event\030\n \001(\0132%.nakama.realtime."
        "ChannelPresenceEventH\000\022\'\n\005error\030\013 \001(\0132\026."
        "nakama.realtime.ErrorH\000\022\'\n\005match\030\014 \001(\0132\026"
        ".nakama.realtime.MatchH\000\0224\n\014match_create"
        "\030\r \001(\0132\034.nakama.realtime.MatchCreateH\000\0220"
        "\n\nmatch_data\030\016 \001(\0132\032.nakama.realtime.Mat"
        "chDataH\000\0229\n\017match_data_send\030\017 \001(\0132\036.naka"
        "ma.realtime.MatchDataSendH\000\0220\n\nmatch_joi"
        "n\030\020 \001(\0132\032.nakama.realtime.MatchJoinH\000\0222\n"
        "\013match_leave\030\021 \001(\0132\033.nakama.realtime.Mat"
        "chLeaveH\000\022C\n\024match_presence_event\030\022 \001(\0132"
        "#.nakama.realtime.MatchPresenceEventH\000\0228"
        "\n\016matchmaker_add\030\023 \001(\0132\036.nakama.realtime"
        ".MatchmakerAddH\000\022@\n\022matchmaker_matched\030\024"
        " \001(\0132\".nakama.realtime.MatchmakerMatched"
        "H\000\022>\n\021matchmaker_remove\030\025 \001(\0132!.nakama.r"
        "ealtime.MatchmakerRemoveH\000\022>\n\021matchmaker"
        "_ticket\030\026 \001(\0132!.nakama.realtime.Matchmak"
        "erTicketH\000\0227\n\rnotifications\030\027 \001(\0132\036.naka"
        "ma.realtime.NotificationsH\000\022\036\n\003rpc\030\030 \001(\013"
        "2\017.nakama.api.RpcH\000\022)\n\006status\030\031 \001(\0132\027.na"
        "kama.realtime.StatusH\000\0226\n\rstatus_follow\030"
        "\032 \001(\0132\035.nakama.realtime.StatusFollowH\000\022E"
        "\n\025status_presence_event\030\033 \001(\0132$.nakama.r"
        "ealtime.StatusPresenceEventH\000\022:\n\017status_"
        "unfollow\030\034 \001(\0132\037.nakama.realtime.StatusU"
        "nfollowH\000\0226\n\rstatus_update\030\035 \001(\0132\035.nakam"
        "a.realtime.StatusUpdateH\000\0222\n\013stream_data"
        "\030\036 \001(\0132\033.nakama.realtime.StreamDataH\000\022E\n"
        "\025stream_presence_event\030\037 \001(\0132$.nakama.re"
        "altime.StreamPresenceEventH\000\022%\n\004ping\030  \001"
        "(\0132\025.nakama.realtime.PingH\000\022%\n\004pong\030! \001("
        "\0132\025.nakama.realtime.PongH\000B\t\n\007message\"\303\001"
        "\n\007Channel\022\n\n\002id\030\001 \001(\t\0220\n\tpresences\030\002 \003(\013"
        "2\035.nakama.realtime.UserPresence\022+\n\004self\030"
        "\003 \001(\0132\035.nakama.realtime.UserPresence\022\021\n\t"
        "room_name\030\004 \001(\t\022\020\n\010group_id\030\005 \001(\t\022\023\n\013use"
        "r_id_one\030\006 \001(\t\022\023\n\013user_id_two\030\007 \001(\t\"\317\001\n\013"
        "ChannelJoin\022\016\n\006target\030\001 \001(\t\022\014\n\004type\030\002 \001("
        "\005\022/\n\013persistence\030\003 \001(\0132\032.google.protobuf"
        ".BoolValue\022*\n\006hidden\030\004 \001(\0132\032.google.prot"
        "obuf.BoolValue\"E\n\004Type\022\024\n\020TYPE_UNSPECIFI"
        "ED\020\000\022\010\n\004ROOM\020\001\022\022\n\016DIRECT_MESSAGE\020\002\022\t\n\005GR"
        "OUP\020\003\"\"\n\014ChannelLeave\022\022\n\nchannel_id\030\001 \001("
        "\t\"\331\002\n\021ChannelMessageAck\022\022\n\nchannel_id\030\001 "
        "\001(\t\022\022\n\nmessage_id\030\002 \001(\t\022)\n\004code\030\003 \001(\0132\033."
        "google.protobuf.Int32Value\022\020\n\010username\030\004"
        " \001(\t\022/\n\013create_time\030\005 \001(\0132\032.google.proto"
        "buf.Timestamp\022/\n\013update_time\030\006 \001(\0132\032.goo"
        "gle.protobuf.Timestamp\022.\n\npersistent\030\007 \001"
        "(\0132\032.google.protobuf.BoolValue\022\021\n\troom_n"
        "ame\030\010 \001(\t\022\020\n\010group_id\030\t \001(\t\022\023\n\013user_id_o"
        "ne\030\n \001(\t\022\023\n\013user_id_two\030\013 \001(\t\"9\n\022Channel"
        "MessageSend\022\022\n\nchannel_id\030\001 \001(\t\022\017\n\007conte"
        "nt\030\002 \001(\t\"O\n\024ChannelMessageUpdate\022\022\n\nchan"
        "nel_id\030\001 \001(\t\022\022\n\nmessage_id\030\002 \001(\t\022\017\n\007cont"
        "ent\030\003 \001(\t\">\n\024ChannelMessageRemove\022\022\n\ncha"
        "nnel_id\030\001 \001(\t\022\022\n\nmessage_id\030\002 \001(\t\"\326\001\n\024Ch"
        "annelPresenceEvent\022\022\n\nchannel_id\030\001 \001(\t\022,"
        "\n\005joins\030\002 \003(\0132\035.nakama.realtime.UserPres"
        "ence\022-\n\006leaves\030\003 \003(\0132\035.nakama.realtime.U"
        "serPresence\022\021\n\troom_name\030\004 \001(\t\022\020\n\010group_"
        "id\030\005 \001(\t\022\023\n\013user_id_one\030\006 \001(\t\022\023\n\013user_id"
        "_two\030\007 \001(\t\"\330\002\n\005Error\022\014\n\004code\030\001 \001(\005\022\017\n\007me"
        "ssage\030\002 \001(\t\0224\n\007context\030\003 \003(\0132#.nakama.re"
        "altime.Error.ContextEntry\032.\n\014ContextEntr"
        "y\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\311\001\n\004Co"
        "de\022\025\n\021RUNTIME_EXCEPTION\020\000\022\030\n\024UNRECOGNIZE"
        "D_PAYLOAD\020\001\022\023\n\017MISSING_PAYLOAD\020\002\022\r\n\tBAD_"
        "INPUT\020\003\022\023\n\017MATCH_NOT_FOUND\020\004\022\027\n\023MATCH_JO"
        "IN_REJECTED\020\005\022\036\n\032RUNTIME_FUNCTION_NOT_FO"
        "UND\020\006\022\036\n\032RUNTIME_FUNCTION_EXCEPTION\020\007\"\312\001"
        "\n\005Match\022\020\n\010match_id\030\001 \001(\t\022\025\n\rauthoritati"
        "ve\030\002 \001(\010\022+\n\005label\030\003 \001(\0132\034.google.protobu"
        "f.StringValue\022\014\n\004size\030\004 \001(\005\0220\n\tpresences"
        "\030\005 \003(\0132\035.nakama.realtime.UserPresence\022+\n"
        "\004self\030\006 \001(\0132\035.nakama.realtime.UserPresen"
        "ce\"\r\n\013MatchCreate\"\177\n\tMatchData\022\020\n\010match_"
        "id\030\001 \001(\t\022/\n\010presence\030\002 \001(\0132\035.nakama.real"
        "time.UserPresence\022\017\n\007op_code\030\003 \001(\003\022\014\n\004da"
        "ta\030\004 \001(\014\022\020\n\010reliable\030\005 \001(\010\"\204\001\n\rMatchData"
        "Send\022\020\n\010match_id\030\001 \001(\t\022\017\n\007op_code\030\002 \001(\003\022"
        "\014\n\004data\030\003 \001(\014\0220\n\tpresences\030\004 \003(\0132\035.nakam"
        "a.realtime.UserPresence\022\020\n\010reliable\030\005 \001("
        "\010\"\243\001\n\tMatchJoin\022\022\n\010match_id\030\001 \001(\tH\000\022\017\n\005t"
        "oken\030\002 \001(\tH\000\022:\n\010metadata\030\003 \003(\0132(.nakama."
        "realtime.MatchJoin.MetadataEntry\032/\n\rMeta"
        "dataEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028"
        "\001B\004\n\002id\"\036\n\nMatchLeave\022\020\n\010match_id\030\001 \001(\t\""
        "\203\001\n\022MatchPresenceEvent\022\020\n\010match_id\030\001 \001(\t"
        "\022,\n\005joins\030\002 \003(\0132\035.nakama.realtime.UserPr"
        "esence\022-\n\006leaves\030\003 \003(\0132\035.nakama.realtime"
        ".UserPresence\"\333\002\n\rMatchmakerAdd\022\021\n\tmin_c"
        "ount\030\001 \001(\005\022\021\n\tmax_count\030\002 \001(\005\022\r\n\005query\030\003"
        " \001(\t\022O\n\021string_properties\030\004 \003(\01324.nakama"
        ".realtime.MatchmakerAdd.StringProperties"
        "Entry\022Q\n\022numeric_properties\030\005 \003(\01325.naka"
        "ma.realtime.MatchmakerAdd.NumericPropert"
        "iesEntry\0327\n\025StringPropertiesEntry\022\013\n\003key"
        "\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\0328\n\026NumericProp"
        "ertiesEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\001:"
        "\0028\001\"\322\004\n\021MatchmakerMatched\022\016\n\006ticket\030\001 \001("
        "\t\022\022\n\010match_id\030\002 \001(\tH\000\022\017\n\005token\030\003 \001(\tH\000\022@"
        "\n\005users\030\004 \003(\01321.nakama.realtime.Matchmak"
        "erMatched.MatchmakerUser\022\?\n\004self\030\005 \001(\01321"
        ".nakama.realtime.MatchmakerMatched.Match"
        "makerUser\032\376\002\n\016MatchmakerUser\022/\n\010presence"
        "\030\001 \001(\0132\035.nakama.realtime.UserPresence\022b\n"
        "\021string_properties\030\005 \003(\0132G.nakama.realti"
        "me.MatchmakerMatched.MatchmakerUser.Stri"
        "ngPropertiesEntry\022d\n\022numeric_properties\030"
        "\006 \003(\0132H.nakama.realtime.MatchmakerMatche"
        "d.MatchmakerUser.NumericPropertiesEntry\032"
        "7\n\025StringPropertiesEntry\022\013\n\003key\030\001 \001(\t\022\r\n"
        "\005value\030\002 \001(\t:\0028\001\0328\n\026NumericPropertiesEnt"
        "ry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\001:\0028\001B\004\n\002id"
        "\"\"\n\020MatchmakerRemove\022\016\n\006ticket\030\001 \001(\t\"\"\n\020"
        "MatchmakerTicket\022\016\n\006ticket\030\001 \001(\t\"@\n\rNoti"
        "fications\022/\n\rnotifications\030\001 \003(\0132\030.nakam"
        "a.api.Notification\"\006\n\004Ping\"\006\n\004Pong\":\n\006St"
        "atus\0220\n\tpresences\030\001 \003(\0132\035.nakama.realtim"
        "e.UserPresence\"3\n\014StatusFollow\022\020\n\010user_i"
        "ds\030\001 \003(\t\022\021\n\tusernames\030\002 \003(\t\"r\n\023StatusPre"
        "senceEvent\022,\n\005joins\030\002 \003(\0132\035.nakama.realt"
        "ime.UserPresence\022-\n\006leaves\030\003 \003(\0132\035.nakam"
        "a.realtime.UserPresence\"\"\n\016StatusUnfollo"
        "w\022\020\n\010user_ids\030\001 \003(\t\"<\n\014StatusUpdate\022,\n\006s"
        "tatus\030\001 \001(\0132\034.google.protobuf.StringValu"
        "e\"J\n\006Stream\022\014\n\004mode\030\001 \001(\005\022\017\n\007subject\030\002 \001"
        "(\t\022\022\n\nsubcontext\030\003 \001(\t\022\r\n\005label\030\004 \001(\t\"\204\001"
        "\n\nStreamData\022\'\n\006stream\030\001 \001(\0132\027.nakama.re"
        "altime.Stream\022-\n\006sender\030\002 \001(\0132\035.nakama.r"
        "ealtime.UserPresence\022\014\n\004data\030\003 \001(\t\022\020\n\010re"
        "liable\030\004 \001(\010\"\233\001\n\023StreamPresenceEvent\022\'\n\006"
        "stream\030\001 \001(\0132\027.nakama.realtime.Stream\022,\n"
        "\005joins\030\002 \003(\0132\035.nakama.realtime.UserPrese"
        "nce\022-\n\006leaves\030\003 \003(\0132\035.nakama.realtime.Us"
        "erPresence\"\210\001\n\014UserPresence\022\017\n\007user_id\030\001"
        " \001(\t\022\022\n\nsession_id\030\002 \001(\t\022\020\n\010username\030\003 \001"
        "(\t\022\023\n\013persistence\030\004 \001(\010\022,\n\006status\030\005 \001(\0132"
        "\034.google.protobuf.StringValueBF\n\033com.her"
        "oiclabs.nakama.rtapiB\016NakamaRealtimeP\001Z\005"
        "rtapi\242\002\004NKPB\252\002\006Nakamab\006proto3"
    };
    ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
        descriptor, 6429);
    ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
      "github.com/heroiclabs/nakama-common/rtapi/realtime.proto", &protobuf_RegisterTypes);
    ::protobuf_google_2fprotobuf_2ftimestamp_2eproto::AddDescriptors();
    ::protobuf_google_2fprotobuf_2fwrappers_2eproto::AddDescriptors();
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2fapi_2fapi_2eproto::AddDescriptors();
  }
  
  void AddDescriptors() {
    static ::google::protobuf::internal::once_flag once;
    ::google::protobuf::internal::call_once(once, AddDescriptorsImpl);
  }
  // Force AddDescriptors() to be called at dynamic initialization time.
  struct StaticDescriptorInitializer {
    StaticDescriptorInitializer() {
      AddDescriptors();
    }
  } static_descriptor_initializer;
  }  // namespace protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto
  namespace nakama {
  namespace realtime {
  const ::google::protobuf::EnumDescriptor* ChannelJoin_Type_descriptor() {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_enum_descriptors[0];
  }
  bool ChannelJoin_Type_IsValid(int value) {
    switch (value) {
      case 0:
      case 1:
      case 2:
      case 3:
        return true;
      default:
        return false;
    }
  }
  
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const ChannelJoin_Type ChannelJoin::TYPE_UNSPECIFIED;
  const ChannelJoin_Type ChannelJoin::ROOM;
  const ChannelJoin_Type ChannelJoin::DIRECT_MESSAGE;
  const ChannelJoin_Type ChannelJoin::GROUP;
  const ChannelJoin_Type ChannelJoin::Type_MIN;
  const ChannelJoin_Type ChannelJoin::Type_MAX;
  const int ChannelJoin::Type_ARRAYSIZE;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  const ::google::protobuf::EnumDescriptor* Error_Code_descriptor() {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_enum_descriptors[1];
  }
  bool Error_Code_IsValid(int value) {
    switch (value) {
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
        return true;
      default:
        return false;
    }
  }
  
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const Error_Code Error::RUNTIME_EXCEPTION;
  const Error_Code Error::UNRECOGNIZED_PAYLOAD;
  const Error_Code Error::MISSING_PAYLOAD;
  const Error_Code Error::BAD_INPUT;
  const Error_Code Error::MATCH_NOT_FOUND;
  const Error_Code Error::MATCH_JOIN_REJECTED;
  const Error_Code Error::RUNTIME_FUNCTION_NOT_FOUND;
  const Error_Code Error::RUNTIME_FUNCTION_EXCEPTION;
  const Error_Code Error::Code_MIN;
  const Error_Code Error::Code_MAX;
  const int Error::Code_ARRAYSIZE;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  // ===================================================================
  
  void Envelope::InitAsDefaultInstance() {
    ::nakama::realtime::_Envelope_default_instance_.channel_ = const_cast< ::nakama::realtime::Channel*>(
        ::nakama::realtime::Channel::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.channel_join_ = const_cast< ::nakama::realtime::ChannelJoin*>(
        ::nakama::realtime::ChannelJoin::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.channel_leave_ = const_cast< ::nakama::realtime::ChannelLeave*>(
        ::nakama::realtime::ChannelLeave::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.channel_message_ = const_cast< ::nakama::api::ChannelMessage*>(
        ::nakama::api::ChannelMessage::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.channel_message_ack_ = const_cast< ::nakama::realtime::ChannelMessageAck*>(
        ::nakama::realtime::ChannelMessageAck::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.channel_message_send_ = const_cast< ::nakama::realtime::ChannelMessageSend*>(
        ::nakama::realtime::ChannelMessageSend::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.channel_message_update_ = const_cast< ::nakama::realtime::ChannelMessageUpdate*>(
        ::nakama::realtime::ChannelMessageUpdate::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.channel_message_remove_ = const_cast< ::nakama::realtime::ChannelMessageRemove*>(
        ::nakama::realtime::ChannelMessageRemove::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.channel_presence_event_ = const_cast< ::nakama::realtime::ChannelPresenceEvent*>(
        ::nakama::realtime::ChannelPresenceEvent::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.error_ = const_cast< ::nakama::realtime::Error*>(
        ::nakama::realtime::Error::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.match_ = const_cast< ::nakama::realtime::Match*>(
        ::nakama::realtime::Match::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.match_create_ = const_cast< ::nakama::realtime::MatchCreate*>(
        ::nakama::realtime::MatchCreate::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.match_data_ = const_cast< ::nakama::realtime::MatchData*>(
        ::nakama::realtime::MatchData::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.match_data_send_ = const_cast< ::nakama::realtime::MatchDataSend*>(
        ::nakama::realtime::MatchDataSend::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.match_join_ = const_cast< ::nakama::realtime::MatchJoin*>(
        ::nakama::realtime::MatchJoin::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.match_leave_ = const_cast< ::nakama::realtime::MatchLeave*>(
        ::nakama::realtime::MatchLeave::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.match_presence_event_ = const_cast< ::nakama::realtime::MatchPresenceEvent*>(
        ::nakama::realtime::MatchPresenceEvent::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.matchmaker_add_ = const_cast< ::nakama::realtime::MatchmakerAdd*>(
        ::nakama::realtime::MatchmakerAdd::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.matchmaker_matched_ = const_cast< ::nakama::realtime::MatchmakerMatched*>(
        ::nakama::realtime::MatchmakerMatched::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.matchmaker_remove_ = const_cast< ::nakama::realtime::MatchmakerRemove*>(
        ::nakama::realtime::MatchmakerRemove::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.matchmaker_ticket_ = const_cast< ::nakama::realtime::MatchmakerTicket*>(
        ::nakama::realtime::MatchmakerTicket::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.notifications_ = const_cast< ::nakama::realtime::Notifications*>(
        ::nakama::realtime::Notifications::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.rpc_ = const_cast< ::nakama::api::Rpc*>(
        ::nakama::api::Rpc::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.status_ = const_cast< ::nakama::realtime::Status*>(
        ::nakama::realtime::Status::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.status_follow_ = const_cast< ::nakama::realtime::StatusFollow*>(
        ::nakama::realtime::StatusFollow::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.status_presence_event_ = const_cast< ::nakama::realtime::StatusPresenceEvent*>(
        ::nakama::realtime::StatusPresenceEvent::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.status_unfollow_ = const_cast< ::nakama::realtime::StatusUnfollow*>(
        ::nakama::realtime::StatusUnfollow::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.status_update_ = const_cast< ::nakama::realtime::StatusUpdate*>(
        ::nakama::realtime::StatusUpdate::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.stream_data_ = const_cast< ::nakama::realtime::StreamData*>(
        ::nakama::realtime::StreamData::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.stream_presence_event_ = const_cast< ::nakama::realtime::StreamPresenceEvent*>(
        ::nakama::realtime::StreamPresenceEvent::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.ping_ = const_cast< ::nakama::realtime::Ping*>(
        ::nakama::realtime::Ping::internal_default_instance());
    ::nakama::realtime::_Envelope_default_instance_.pong_ = const_cast< ::nakama::realtime::Pong*>(
        ::nakama::realtime::Pong::internal_default_instance());
  }
  void Envelope::set_allocated_channel(::nakama::realtime::Channel* channel) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (channel) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        channel = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, channel, submessage_arena);
      }
      set_has_channel();
      message_.channel_ = channel;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.channel)
  }
  void Envelope::set_allocated_channel_join(::nakama::realtime::ChannelJoin* channel_join) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (channel_join) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        channel_join = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, channel_join, submessage_arena);
      }
      set_has_channel_join();
      message_.channel_join_ = channel_join;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.channel_join)
  }
  void Envelope::set_allocated_channel_leave(::nakama::realtime::ChannelLeave* channel_leave) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (channel_leave) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        channel_leave = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, channel_leave, submessage_arena);
      }
      set_has_channel_leave();
      message_.channel_leave_ = channel_leave;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.channel_leave)
  }
  void Envelope::set_allocated_channel_message(::nakama::api::ChannelMessage* channel_message) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (channel_message) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        channel_message = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, channel_message, submessage_arena);
      }
      set_has_channel_message();
      message_.channel_message_ = channel_message;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.channel_message)
  }
  void Envelope::clear_channel_message() {
    if (has_channel_message()) {
      delete message_.channel_message_;
      clear_has_message();
    }
  }
  void Envelope::set_allocated_channel_message_ack(::nakama::realtime::ChannelMessageAck* channel_message_ack) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (channel_message_ack) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        channel_message_ack = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, channel_message_ack, submessage_arena);
      }
      set_has_channel_message_ack();
      message_.channel_message_ack_ = channel_message_ack;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.channel_message_ack)
  }
  void Envelope::set_allocated_channel_message_send(::nakama::realtime::ChannelMessageSend* channel_message_send) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (channel_message_send) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        channel_message_send = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, channel_message_send, submessage_arena);
      }
      set_has_channel_message_send();
      message_.channel_message_send_ = channel_message_send;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.channel_message_send)
  }
  void Envelope::set_allocated_channel_message_update(::nakama::realtime::ChannelMessageUpdate* channel_message_update) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (channel_message_update) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        channel_message_update = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, channel_message_update, submessage_arena);
      }
      set_has_channel_message_update();
      message_.channel_message_update_ = channel_message_update;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.channel_message_update)
  }
  void Envelope::set_allocated_channel_message_remove(::nakama::realtime::ChannelMessageRemove* channel_message_remove) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (channel_message_remove) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        channel_message_remove = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, channel_message_remove, submessage_arena);
      }
      set_has_channel_message_remove();
      message_.channel_message_remove_ = channel_message_remove;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.channel_message_remove)
  }
  void Envelope::set_allocated_channel_presence_event(::nakama::realtime::ChannelPresenceEvent* channel_presence_event) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (channel_presence_event) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        channel_presence_event = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, channel_presence_event, submessage_arena);
      }
      set_has_channel_presence_event();
      message_.channel_presence_event_ = channel_presence_event;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.channel_presence_event)
  }
  void Envelope::set_allocated_error(::nakama::realtime::Error* error) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (error) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        error = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, error, submessage_arena);
      }
      set_has_error();
      message_.error_ = error;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.error)
  }
  void Envelope::set_allocated_match(::nakama::realtime::Match* match) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (match) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        match = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, match, submessage_arena);
      }
      set_has_match();
      message_.match_ = match;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.match)
  }
  void Envelope::set_allocated_match_create(::nakama::realtime::MatchCreate* match_create) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (match_create) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        match_create = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, match_create, submessage_arena);
      }
      set_has_match_create();
      message_.match_create_ = match_create;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.match_create)
  }
  void Envelope::set_allocated_match_data(::nakama::realtime::MatchData* match_data) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (match_data) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        match_data = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, match_data, submessage_arena);
      }
      set_has_match_data();
      message_.match_data_ = match_data;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.match_data)
  }
  void Envelope::set_allocated_match_data_send(::nakama::realtime::MatchDataSend* match_data_send) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (match_data_send) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        match_data_send = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, match_data_send, submessage_arena);
      }
      set_has_match_data_send();
      message_.match_data_send_ = match_data_send;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.match_data_send)
  }
  void Envelope::set_allocated_match_join(::nakama::realtime::MatchJoin* match_join) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (match_join) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        match_join = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, match_join, submessage_arena);
      }
      set_has_match_join();
      message_.match_join_ = match_join;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.match_join)
  }
  void Envelope::set_allocated_match_leave(::nakama::realtime::MatchLeave* match_leave) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (match_leave) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        match_leave = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, match_leave, submessage_arena);
      }
      set_has_match_leave();
      message_.match_leave_ = match_leave;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.match_leave)
  }
  void Envelope::set_allocated_match_presence_event(::nakama::realtime::MatchPresenceEvent* match_presence_event) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (match_presence_event) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        match_presence_event = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, match_presence_event, submessage_arena);
      }
      set_has_match_presence_event();
      message_.match_presence_event_ = match_presence_event;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.match_presence_event)
  }
  void Envelope::set_allocated_matchmaker_add(::nakama::realtime::MatchmakerAdd* matchmaker_add) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (matchmaker_add) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        matchmaker_add = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, matchmaker_add, submessage_arena);
      }
      set_has_matchmaker_add();
      message_.matchmaker_add_ = matchmaker_add;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.matchmaker_add)
  }
  void Envelope::set_allocated_matchmaker_matched(::nakama::realtime::MatchmakerMatched* matchmaker_matched) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (matchmaker_matched) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        matchmaker_matched = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, matchmaker_matched, submessage_arena);
      }
      set_has_matchmaker_matched();
      message_.matchmaker_matched_ = matchmaker_matched;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.matchmaker_matched)
  }
  void Envelope::set_allocated_matchmaker_remove(::nakama::realtime::MatchmakerRemove* matchmaker_remove) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (matchmaker_remove) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        matchmaker_remove = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, matchmaker_remove, submessage_arena);
      }
      set_has_matchmaker_remove();
      message_.matchmaker_remove_ = matchmaker_remove;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.matchmaker_remove)
  }
  void Envelope::set_allocated_matchmaker_ticket(::nakama::realtime::MatchmakerTicket* matchmaker_ticket) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (matchmaker_ticket) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        matchmaker_ticket = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, matchmaker_ticket, submessage_arena);
      }
      set_has_matchmaker_ticket();
      message_.matchmaker_ticket_ = matchmaker_ticket;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.matchmaker_ticket)
  }
  void Envelope::set_allocated_notifications(::nakama::realtime::Notifications* notifications) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (notifications) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        notifications = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, notifications, submessage_arena);
      }
      set_has_notifications();
      message_.notifications_ = notifications;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.notifications)
  }
  void Envelope::set_allocated_rpc(::nakama::api::Rpc* rpc) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (rpc) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        rpc = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, rpc, submessage_arena);
      }
      set_has_rpc();
      message_.rpc_ = rpc;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.rpc)
  }
  void Envelope::clear_rpc() {
    if (has_rpc()) {
      delete message_.rpc_;
      clear_has_message();
    }
  }
  void Envelope::set_allocated_status(::nakama::realtime::Status* status) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (status) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        status = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, status, submessage_arena);
      }
      set_has_status();
      message_.status_ = status;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.status)
  }
  void Envelope::set_allocated_status_follow(::nakama::realtime::StatusFollow* status_follow) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (status_follow) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        status_follow = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, status_follow, submessage_arena);
      }
      set_has_status_follow();
      message_.status_follow_ = status_follow;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.status_follow)
  }
  void Envelope::set_allocated_status_presence_event(::nakama::realtime::StatusPresenceEvent* status_presence_event) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (status_presence_event) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        status_presence_event = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, status_presence_event, submessage_arena);
      }
      set_has_status_presence_event();
      message_.status_presence_event_ = status_presence_event;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.status_presence_event)
  }
  void Envelope::set_allocated_status_unfollow(::nakama::realtime::StatusUnfollow* status_unfollow) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (status_unfollow) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        status_unfollow = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, status_unfollow, submessage_arena);
      }
      set_has_status_unfollow();
      message_.status_unfollow_ = status_unfollow;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.status_unfollow)
  }
  void Envelope::set_allocated_status_update(::nakama::realtime::StatusUpdate* status_update) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (status_update) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        status_update = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, status_update, submessage_arena);
      }
      set_has_status_update();
      message_.status_update_ = status_update;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.status_update)
  }
  void Envelope::set_allocated_stream_data(::nakama::realtime::StreamData* stream_data) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (stream_data) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        stream_data = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, stream_data, submessage_arena);
      }
      set_has_stream_data();
      message_.stream_data_ = stream_data;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.stream_data)
  }
  void Envelope::set_allocated_stream_presence_event(::nakama::realtime::StreamPresenceEvent* stream_presence_event) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (stream_presence_event) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        stream_presence_event = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, stream_presence_event, submessage_arena);
      }
      set_has_stream_presence_event();
      message_.stream_presence_event_ = stream_presence_event;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.stream_presence_event)
  }
  void Envelope::set_allocated_ping(::nakama::realtime::Ping* ping) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (ping) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        ping = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, ping, submessage_arena);
      }
      set_has_ping();
      message_.ping_ = ping;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.ping)
  }
  void Envelope::set_allocated_pong(::nakama::realtime::Pong* pong) {
    ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
    clear_message();
    if (pong) {
      ::google::protobuf::Arena* submessage_arena = NULL;
      if (message_arena != submessage_arena) {
        pong = ::google::protobuf::internal::GetOwnedMessage(
            message_arena, pong, submessage_arena);
      }
      set_has_pong();
      message_.pong_ = pong;
    }
    // @@protoc_insertion_point(field_set_allocated:nakama.realtime.Envelope.pong)
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int Envelope::kCidFieldNumber;
  const int Envelope::kChannelFieldNumber;
  const int Envelope::kChannelJoinFieldNumber;
  const int Envelope::kChannelLeaveFieldNumber;
  const int Envelope::kChannelMessageFieldNumber;
  const int Envelope::kChannelMessageAckFieldNumber;
  const int Envelope::kChannelMessageSendFieldNumber;
  const int Envelope::kChannelMessageUpdateFieldNumber;
  const int Envelope::kChannelMessageRemoveFieldNumber;
  const int Envelope::kChannelPresenceEventFieldNumber;
  const int Envelope::kErrorFieldNumber;
  const int Envelope::kMatchFieldNumber;
  const int Envelope::kMatchCreateFieldNumber;
  const int Envelope::kMatchDataFieldNumber;
  const int Envelope::kMatchDataSendFieldNumber;
  const int Envelope::kMatchJoinFieldNumber;
  const int Envelope::kMatchLeaveFieldNumber;
  const int Envelope::kMatchPresenceEventFieldNumber;
  const int Envelope::kMatchmakerAddFieldNumber;
  const int Envelope::kMatchmakerMatchedFieldNumber;
  const int Envelope::kMatchmakerRemoveFieldNumber;
  const int Envelope::kMatchmakerTicketFieldNumber;
  const int Envelope::kNotificationsFieldNumber;
  const int Envelope::kRpcFieldNumber;
  const int Envelope::kStatusFieldNumber;
  const int Envelope::kStatusFollowFieldNumber;
  const int Envelope::kStatusPresenceEventFieldNumber;
  const int Envelope::kStatusUnfollowFieldNumber;
  const int Envelope::kStatusUpdateFieldNumber;
  const int Envelope::kStreamDataFieldNumber;
  const int Envelope::kStreamPresenceEventFieldNumber;
  const int Envelope::kPingFieldNumber;
  const int Envelope::kPongFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  Envelope::Envelope()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Envelope.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.Envelope)
  }
  Envelope::Envelope(const Envelope& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    cid_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.cid().size() > 0) {
      cid_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.cid_);
    }
    clear_has_message();
    switch (from.message_case()) {
      case kChannel: {
        mutable_channel()->::nakama::realtime::Channel::MergeFrom(from.channel());
        break;
      }
      case kChannelJoin: {
        mutable_channel_join()->::nakama::realtime::ChannelJoin::MergeFrom(from.channel_join());
        break;
      }
      case kChannelLeave: {
        mutable_channel_leave()->::nakama::realtime::ChannelLeave::MergeFrom(from.channel_leave());
        break;
      }
      case kChannelMessage: {
        mutable_channel_message()->::nakama::api::ChannelMessage::MergeFrom(from.channel_message());
        break;
      }
      case kChannelMessageAck: {
        mutable_channel_message_ack()->::nakama::realtime::ChannelMessageAck::MergeFrom(from.channel_message_ack());
        break;
      }
      case kChannelMessageSend: {
        mutable_channel_message_send()->::nakama::realtime::ChannelMessageSend::MergeFrom(from.channel_message_send());
        break;
      }
      case kChannelMessageUpdate: {
        mutable_channel_message_update()->::nakama::realtime::ChannelMessageUpdate::MergeFrom(from.channel_message_update());
        break;
      }
      case kChannelMessageRemove: {
        mutable_channel_message_remove()->::nakama::realtime::ChannelMessageRemove::MergeFrom(from.channel_message_remove());
        break;
      }
      case kChannelPresenceEvent: {
        mutable_channel_presence_event()->::nakama::realtime::ChannelPresenceEvent::MergeFrom(from.channel_presence_event());
        break;
      }
      case kError: {
        mutable_error()->::nakama::realtime::Error::MergeFrom(from.error());
        break;
      }
      case kMatch: {
        mutable_match()->::nakama::realtime::Match::MergeFrom(from.match());
        break;
      }
      case kMatchCreate: {
        mutable_match_create()->::nakama::realtime::MatchCreate::MergeFrom(from.match_create());
        break;
      }
      case kMatchData: {
        mutable_match_data()->::nakama::realtime::MatchData::MergeFrom(from.match_data());
        break;
      }
      case kMatchDataSend: {
        mutable_match_data_send()->::nakama::realtime::MatchDataSend::MergeFrom(from.match_data_send());
        break;
      }
      case kMatchJoin: {
        mutable_match_join()->::nakama::realtime::MatchJoin::MergeFrom(from.match_join());
        break;
      }
      case kMatchLeave: {
        mutable_match_leave()->::nakama::realtime::MatchLeave::MergeFrom(from.match_leave());
        break;
      }
      case kMatchPresenceEvent: {
        mutable_match_presence_event()->::nakama::realtime::MatchPresenceEvent::MergeFrom(from.match_presence_event());
        break;
      }
      case kMatchmakerAdd: {
        mutable_matchmaker_add()->::nakama::realtime::MatchmakerAdd::MergeFrom(from.matchmaker_add());
        break;
      }
      case kMatchmakerMatched: {
        mutable_matchmaker_matched()->::nakama::realtime::MatchmakerMatched::MergeFrom(from.matchmaker_matched());
        break;
      }
      case kMatchmakerRemove: {
        mutable_matchmaker_remove()->::nakama::realtime::MatchmakerRemove::MergeFrom(from.matchmaker_remove());
        break;
      }
      case kMatchmakerTicket: {
        mutable_matchmaker_ticket()->::nakama::realtime::MatchmakerTicket::MergeFrom(from.matchmaker_ticket());
        break;
      }
      case kNotifications: {
        mutable_notifications()->::nakama::realtime::Notifications::MergeFrom(from.notifications());
        break;
      }
      case kRpc: {
        mutable_rpc()->::nakama::api::Rpc::MergeFrom(from.rpc());
        break;
      }
      case kStatus: {
        mutable_status()->::nakama::realtime::Status::MergeFrom(from.status());
        break;
      }
      case kStatusFollow: {
        mutable_status_follow()->::nakama::realtime::StatusFollow::MergeFrom(from.status_follow());
        break;
      }
      case kStatusPresenceEvent: {
        mutable_status_presence_event()->::nakama::realtime::StatusPresenceEvent::MergeFrom(from.status_presence_event());
        break;
      }
      case kStatusUnfollow: {
        mutable_status_unfollow()->::nakama::realtime::StatusUnfollow::MergeFrom(from.status_unfollow());
        break;
      }
      case kStatusUpdate: {
        mutable_status_update()->::nakama::realtime::StatusUpdate::MergeFrom(from.status_update());
        break;
      }
      case kStreamData: {
        mutable_stream_data()->::nakama::realtime::StreamData::MergeFrom(from.stream_data());
        break;
      }
      case kStreamPresenceEvent: {
        mutable_stream_presence_event()->::nakama::realtime::StreamPresenceEvent::MergeFrom(from.stream_presence_event());
        break;
      }
      case kPing: {
        mutable_ping()->::nakama::realtime::Ping::MergeFrom(from.ping());
        break;
      }
      case kPong: {
        mutable_pong()->::nakama::realtime::Pong::MergeFrom(from.pong());
        break;
      }
      case MESSAGE_NOT_SET: {
        break;
      }
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.Envelope)
  }
  
  void Envelope::SharedCtor() {
    cid_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    clear_has_message();
  }
  
  Envelope::~Envelope() {
    // @@protoc_insertion_point(destructor:nakama.realtime.Envelope)
    SharedDtor();
  }
  
  void Envelope::SharedDtor() {
    cid_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (has_message()) {
      clear_message();
    }
  }
  
  void Envelope::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* Envelope::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const Envelope& Envelope::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Envelope.base);
    return *internal_default_instance();
  }
  
  
  void Envelope::clear_message() {
  // @@protoc_insertion_point(one_of_clear_start:nakama.realtime.Envelope)
    switch (message_case()) {
      case kChannel: {
        delete message_.channel_;
        break;
      }
      case kChannelJoin: {
        delete message_.channel_join_;
        break;
      }
      case kChannelLeave: {
        delete message_.channel_leave_;
        break;
      }
      case kChannelMessage: {
        delete message_.channel_message_;
        break;
      }
      case kChannelMessageAck: {
        delete message_.channel_message_ack_;
        break;
      }
      case kChannelMessageSend: {
        delete message_.channel_message_send_;
        break;
      }
      case kChannelMessageUpdate: {
        delete message_.channel_message_update_;
        break;
      }
      case kChannelMessageRemove: {
        delete message_.channel_message_remove_;
        break;
      }
      case kChannelPresenceEvent: {
        delete message_.channel_presence_event_;
        break;
      }
      case kError: {
        delete message_.error_;
        break;
      }
      case kMatch: {
        delete message_.match_;
        break;
      }
      case kMatchCreate: {
        delete message_.match_create_;
        break;
      }
      case kMatchData: {
        delete message_.match_data_;
        break;
      }
      case kMatchDataSend: {
        delete message_.match_data_send_;
        break;
      }
      case kMatchJoin: {
        delete message_.match_join_;
        break;
      }
      case kMatchLeave: {
        delete message_.match_leave_;
        break;
      }
      case kMatchPresenceEvent: {
        delete message_.match_presence_event_;
        break;
      }
      case kMatchmakerAdd: {
        delete message_.matchmaker_add_;
        break;
      }
      case kMatchmakerMatched: {
        delete message_.matchmaker_matched_;
        break;
      }
      case kMatchmakerRemove: {
        delete message_.matchmaker_remove_;
        break;
      }
      case kMatchmakerTicket: {
        delete message_.matchmaker_ticket_;
        break;
      }
      case kNotifications: {
        delete message_.notifications_;
        break;
      }
      case kRpc: {
        delete message_.rpc_;
        break;
      }
      case kStatus: {
        delete message_.status_;
        break;
      }
      case kStatusFollow: {
        delete message_.status_follow_;
        break;
      }
      case kStatusPresenceEvent: {
        delete message_.status_presence_event_;
        break;
      }
      case kStatusUnfollow: {
        delete message_.status_unfollow_;
        break;
      }
      case kStatusUpdate: {
        delete message_.status_update_;
        break;
      }
      case kStreamData: {
        delete message_.stream_data_;
        break;
      }
      case kStreamPresenceEvent: {
        delete message_.stream_presence_event_;
        break;
      }
      case kPing: {
        delete message_.ping_;
        break;
      }
      case kPong: {
        delete message_.pong_;
        break;
      }
      case MESSAGE_NOT_SET: {
        break;
      }
    }
    _oneof_case_[0] = MESSAGE_NOT_SET;
  }
  
  
  void Envelope::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.Envelope)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    cid_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    clear_message();
    _internal_metadata_.Clear();
  }
  
  bool Envelope::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.Envelope)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(16383u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string cid = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_cid()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->cid().data(), static_cast<int>(this->cid().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Envelope.cid"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.Channel channel = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_channel()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.ChannelJoin channel_join = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_channel_join()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.ChannelLeave channel_leave = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_channel_leave()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.api.ChannelMessage channel_message = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_channel_message()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.ChannelMessageAck channel_message_ack = 6;
        case 6: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_channel_message_ack()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.ChannelMessageSend channel_message_send = 7;
        case 7: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_channel_message_send()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.ChannelMessageUpdate channel_message_update = 8;
        case 8: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_channel_message_update()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.ChannelMessageRemove channel_message_remove = 9;
        case 9: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(74u /* 74 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_channel_message_remove()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.ChannelPresenceEvent channel_presence_event = 10;
        case 10: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(82u /* 82 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_channel_presence_event()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.Error error = 11;
        case 11: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(90u /* 90 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_error()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.Match match = 12;
        case 12: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(98u /* 98 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_match()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchCreate match_create = 13;
        case 13: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(106u /* 106 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_match_create()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchData match_data = 14;
        case 14: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(114u /* 114 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_match_data()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchDataSend match_data_send = 15;
        case 15: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(122u /* 122 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_match_data_send()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchJoin match_join = 16;
        case 16: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(130u /* 130 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_match_join()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchLeave match_leave = 17;
        case 17: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(138u /* 138 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_match_leave()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchPresenceEvent match_presence_event = 18;
        case 18: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(146u /* 146 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_match_presence_event()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchmakerAdd matchmaker_add = 19;
        case 19: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(154u /* 154 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_matchmaker_add()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchmakerMatched matchmaker_matched = 20;
        case 20: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(162u /* 162 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_matchmaker_matched()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchmakerRemove matchmaker_remove = 21;
        case 21: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(170u /* 170 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_matchmaker_remove()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchmakerTicket matchmaker_ticket = 22;
        case 22: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(178u /* 178 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_matchmaker_ticket()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.Notifications notifications = 23;
        case 23: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(186u /* 186 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_notifications()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.api.Rpc rpc = 24;
        case 24: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(194u /* 194 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_rpc()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.Status status = 25;
        case 25: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(202u /* 202 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_status()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.StatusFollow status_follow = 26;
        case 26: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(210u /* 210 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_status_follow()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.StatusPresenceEvent status_presence_event = 27;
        case 27: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(218u /* 218 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_status_presence_event()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.StatusUnfollow status_unfollow = 28;
        case 28: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(226u /* 226 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_status_unfollow()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.StatusUpdate status_update = 29;
        case 29: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(234u /* 234 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_status_update()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.StreamData stream_data = 30;
        case 30: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(242u /* 242 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_stream_data()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.StreamPresenceEvent stream_presence_event = 31;
        case 31: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(250u /* 250 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_stream_presence_event()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.Ping ping = 32;
        case 32: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(2u /* 258 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_ping()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.Pong pong = 33;
        case 33: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 266 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_pong()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.Envelope)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.Envelope)
    return false;
  #undef DO_
  }
  
  void Envelope::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.Envelope)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string cid = 1;
    if (this->cid().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->cid().data(), static_cast<int>(this->cid().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Envelope.cid");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->cid(), output);
    }
  
    // .nakama.realtime.Channel channel = 2;
    if (has_channel()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        2, this->_internal_channel(), output);
    }
  
    // .nakama.realtime.ChannelJoin channel_join = 3;
    if (has_channel_join()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        3, this->_internal_channel_join(), output);
    }
  
    // .nakama.realtime.ChannelLeave channel_leave = 4;
    if (has_channel_leave()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        4, this->_internal_channel_leave(), output);
    }
  
    // .nakama.api.ChannelMessage channel_message = 5;
    if (has_channel_message()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        5, this->_internal_channel_message(), output);
    }
  
    // .nakama.realtime.ChannelMessageAck channel_message_ack = 6;
    if (has_channel_message_ack()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        6, this->_internal_channel_message_ack(), output);
    }
  
    // .nakama.realtime.ChannelMessageSend channel_message_send = 7;
    if (has_channel_message_send()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        7, this->_internal_channel_message_send(), output);
    }
  
    // .nakama.realtime.ChannelMessageUpdate channel_message_update = 8;
    if (has_channel_message_update()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        8, this->_internal_channel_message_update(), output);
    }
  
    // .nakama.realtime.ChannelMessageRemove channel_message_remove = 9;
    if (has_channel_message_remove()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        9, this->_internal_channel_message_remove(), output);
    }
  
    // .nakama.realtime.ChannelPresenceEvent channel_presence_event = 10;
    if (has_channel_presence_event()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        10, this->_internal_channel_presence_event(), output);
    }
  
    // .nakama.realtime.Error error = 11;
    if (has_error()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        11, this->_internal_error(), output);
    }
  
    // .nakama.realtime.Match match = 12;
    if (has_match()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        12, this->_internal_match(), output);
    }
  
    // .nakama.realtime.MatchCreate match_create = 13;
    if (has_match_create()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        13, this->_internal_match_create(), output);
    }
  
    // .nakama.realtime.MatchData match_data = 14;
    if (has_match_data()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        14, this->_internal_match_data(), output);
    }
  
    // .nakama.realtime.MatchDataSend match_data_send = 15;
    if (has_match_data_send()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        15, this->_internal_match_data_send(), output);
    }
  
    // .nakama.realtime.MatchJoin match_join = 16;
    if (has_match_join()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        16, this->_internal_match_join(), output);
    }
  
    // .nakama.realtime.MatchLeave match_leave = 17;
    if (has_match_leave()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        17, this->_internal_match_leave(), output);
    }
  
    // .nakama.realtime.MatchPresenceEvent match_presence_event = 18;
    if (has_match_presence_event()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        18, this->_internal_match_presence_event(), output);
    }
  
    // .nakama.realtime.MatchmakerAdd matchmaker_add = 19;
    if (has_matchmaker_add()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        19, this->_internal_matchmaker_add(), output);
    }
  
    // .nakama.realtime.MatchmakerMatched matchmaker_matched = 20;
    if (has_matchmaker_matched()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        20, this->_internal_matchmaker_matched(), output);
    }
  
    // .nakama.realtime.MatchmakerRemove matchmaker_remove = 21;
    if (has_matchmaker_remove()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        21, this->_internal_matchmaker_remove(), output);
    }
  
    // .nakama.realtime.MatchmakerTicket matchmaker_ticket = 22;
    if (has_matchmaker_ticket()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        22, this->_internal_matchmaker_ticket(), output);
    }
  
    // .nakama.realtime.Notifications notifications = 23;
    if (has_notifications()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        23, this->_internal_notifications(), output);
    }
  
    // .nakama.api.Rpc rpc = 24;
    if (has_rpc()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        24, this->_internal_rpc(), output);
    }
  
    // .nakama.realtime.Status status = 25;
    if (has_status()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        25, this->_internal_status(), output);
    }
  
    // .nakama.realtime.StatusFollow status_follow = 26;
    if (has_status_follow()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        26, this->_internal_status_follow(), output);
    }
  
    // .nakama.realtime.StatusPresenceEvent status_presence_event = 27;
    if (has_status_presence_event()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        27, this->_internal_status_presence_event(), output);
    }
  
    // .nakama.realtime.StatusUnfollow status_unfollow = 28;
    if (has_status_unfollow()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        28, this->_internal_status_unfollow(), output);
    }
  
    // .nakama.realtime.StatusUpdate status_update = 29;
    if (has_status_update()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        29, this->_internal_status_update(), output);
    }
  
    // .nakama.realtime.StreamData stream_data = 30;
    if (has_stream_data()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        30, this->_internal_stream_data(), output);
    }
  
    // .nakama.realtime.StreamPresenceEvent stream_presence_event = 31;
    if (has_stream_presence_event()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        31, this->_internal_stream_presence_event(), output);
    }
  
    // .nakama.realtime.Ping ping = 32;
    if (has_ping()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        32, this->_internal_ping(), output);
    }
  
    // .nakama.realtime.Pong pong = 33;
    if (has_pong()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        33, this->_internal_pong(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.Envelope)
  }
  
  ::google::protobuf::uint8* Envelope::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.Envelope)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string cid = 1;
    if (this->cid().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->cid().data(), static_cast<int>(this->cid().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Envelope.cid");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->cid(), target);
    }
  
    // .nakama.realtime.Channel channel = 2;
    if (has_channel()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          2, this->_internal_channel(), deterministic, target);
    }
  
    // .nakama.realtime.ChannelJoin channel_join = 3;
    if (has_channel_join()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          3, this->_internal_channel_join(), deterministic, target);
    }
  
    // .nakama.realtime.ChannelLeave channel_leave = 4;
    if (has_channel_leave()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          4, this->_internal_channel_leave(), deterministic, target);
    }
  
    // .nakama.api.ChannelMessage channel_message = 5;
    if (has_channel_message()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          5, this->_internal_channel_message(), deterministic, target);
    }
  
    // .nakama.realtime.ChannelMessageAck channel_message_ack = 6;
    if (has_channel_message_ack()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          6, this->_internal_channel_message_ack(), deterministic, target);
    }
  
    // .nakama.realtime.ChannelMessageSend channel_message_send = 7;
    if (has_channel_message_send()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          7, this->_internal_channel_message_send(), deterministic, target);
    }
  
    // .nakama.realtime.ChannelMessageUpdate channel_message_update = 8;
    if (has_channel_message_update()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          8, this->_internal_channel_message_update(), deterministic, target);
    }
  
    // .nakama.realtime.ChannelMessageRemove channel_message_remove = 9;
    if (has_channel_message_remove()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          9, this->_internal_channel_message_remove(), deterministic, target);
    }
  
    // .nakama.realtime.ChannelPresenceEvent channel_presence_event = 10;
    if (has_channel_presence_event()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          10, this->_internal_channel_presence_event(), deterministic, target);
    }
  
    // .nakama.realtime.Error error = 11;
    if (has_error()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          11, this->_internal_error(), deterministic, target);
    }
  
    // .nakama.realtime.Match match = 12;
    if (has_match()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          12, this->_internal_match(), deterministic, target);
    }
  
    // .nakama.realtime.MatchCreate match_create = 13;
    if (has_match_create()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          13, this->_internal_match_create(), deterministic, target);
    }
  
    // .nakama.realtime.MatchData match_data = 14;
    if (has_match_data()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          14, this->_internal_match_data(), deterministic, target);
    }
  
    // .nakama.realtime.MatchDataSend match_data_send = 15;
    if (has_match_data_send()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          15, this->_internal_match_data_send(), deterministic, target);
    }
  
    // .nakama.realtime.MatchJoin match_join = 16;
    if (has_match_join()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          16, this->_internal_match_join(), deterministic, target);
    }
  
    // .nakama.realtime.MatchLeave match_leave = 17;
    if (has_match_leave()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          17, this->_internal_match_leave(), deterministic, target);
    }
  
    // .nakama.realtime.MatchPresenceEvent match_presence_event = 18;
    if (has_match_presence_event()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          18, this->_internal_match_presence_event(), deterministic, target);
    }
  
    // .nakama.realtime.MatchmakerAdd matchmaker_add = 19;
    if (has_matchmaker_add()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          19, this->_internal_matchmaker_add(), deterministic, target);
    }
  
    // .nakama.realtime.MatchmakerMatched matchmaker_matched = 20;
    if (has_matchmaker_matched()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          20, this->_internal_matchmaker_matched(), deterministic, target);
    }
  
    // .nakama.realtime.MatchmakerRemove matchmaker_remove = 21;
    if (has_matchmaker_remove()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          21, this->_internal_matchmaker_remove(), deterministic, target);
    }
  
    // .nakama.realtime.MatchmakerTicket matchmaker_ticket = 22;
    if (has_matchmaker_ticket()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          22, this->_internal_matchmaker_ticket(), deterministic, target);
    }
  
    // .nakama.realtime.Notifications notifications = 23;
    if (has_notifications()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          23, this->_internal_notifications(), deterministic, target);
    }
  
    // .nakama.api.Rpc rpc = 24;
    if (has_rpc()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          24, this->_internal_rpc(), deterministic, target);
    }
  
    // .nakama.realtime.Status status = 25;
    if (has_status()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          25, this->_internal_status(), deterministic, target);
    }
  
    // .nakama.realtime.StatusFollow status_follow = 26;
    if (has_status_follow()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          26, this->_internal_status_follow(), deterministic, target);
    }
  
    // .nakama.realtime.StatusPresenceEvent status_presence_event = 27;
    if (has_status_presence_event()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          27, this->_internal_status_presence_event(), deterministic, target);
    }
  
    // .nakama.realtime.StatusUnfollow status_unfollow = 28;
    if (has_status_unfollow()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          28, this->_internal_status_unfollow(), deterministic, target);
    }
  
    // .nakama.realtime.StatusUpdate status_update = 29;
    if (has_status_update()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          29, this->_internal_status_update(), deterministic, target);
    }
  
    // .nakama.realtime.StreamData stream_data = 30;
    if (has_stream_data()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          30, this->_internal_stream_data(), deterministic, target);
    }
  
    // .nakama.realtime.StreamPresenceEvent stream_presence_event = 31;
    if (has_stream_presence_event()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          31, this->_internal_stream_presence_event(), deterministic, target);
    }
  
    // .nakama.realtime.Ping ping = 32;
    if (has_ping()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          32, this->_internal_ping(), deterministic, target);
    }
  
    // .nakama.realtime.Pong pong = 33;
    if (has_pong()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          33, this->_internal_pong(), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.Envelope)
    return target;
  }
  
  size_t Envelope::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.Envelope)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string cid = 1;
    if (this->cid().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->cid());
    }
  
    switch (message_case()) {
      // .nakama.realtime.Channel channel = 2;
      case kChannel: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.channel_);
        break;
      }
      // .nakama.realtime.ChannelJoin channel_join = 3;
      case kChannelJoin: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.channel_join_);
        break;
      }
      // .nakama.realtime.ChannelLeave channel_leave = 4;
      case kChannelLeave: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.channel_leave_);
        break;
      }
      // .nakama.api.ChannelMessage channel_message = 5;
      case kChannelMessage: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.channel_message_);
        break;
      }
      // .nakama.realtime.ChannelMessageAck channel_message_ack = 6;
      case kChannelMessageAck: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.channel_message_ack_);
        break;
      }
      // .nakama.realtime.ChannelMessageSend channel_message_send = 7;
      case kChannelMessageSend: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.channel_message_send_);
        break;
      }
      // .nakama.realtime.ChannelMessageUpdate channel_message_update = 8;
      case kChannelMessageUpdate: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.channel_message_update_);
        break;
      }
      // .nakama.realtime.ChannelMessageRemove channel_message_remove = 9;
      case kChannelMessageRemove: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.channel_message_remove_);
        break;
      }
      // .nakama.realtime.ChannelPresenceEvent channel_presence_event = 10;
      case kChannelPresenceEvent: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.channel_presence_event_);
        break;
      }
      // .nakama.realtime.Error error = 11;
      case kError: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.error_);
        break;
      }
      // .nakama.realtime.Match match = 12;
      case kMatch: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.match_);
        break;
      }
      // .nakama.realtime.MatchCreate match_create = 13;
      case kMatchCreate: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.match_create_);
        break;
      }
      // .nakama.realtime.MatchData match_data = 14;
      case kMatchData: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.match_data_);
        break;
      }
      // .nakama.realtime.MatchDataSend match_data_send = 15;
      case kMatchDataSend: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.match_data_send_);
        break;
      }
      // .nakama.realtime.MatchJoin match_join = 16;
      case kMatchJoin: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.match_join_);
        break;
      }
      // .nakama.realtime.MatchLeave match_leave = 17;
      case kMatchLeave: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.match_leave_);
        break;
      }
      // .nakama.realtime.MatchPresenceEvent match_presence_event = 18;
      case kMatchPresenceEvent: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.match_presence_event_);
        break;
      }
      // .nakama.realtime.MatchmakerAdd matchmaker_add = 19;
      case kMatchmakerAdd: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.matchmaker_add_);
        break;
      }
      // .nakama.realtime.MatchmakerMatched matchmaker_matched = 20;
      case kMatchmakerMatched: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.matchmaker_matched_);
        break;
      }
      // .nakama.realtime.MatchmakerRemove matchmaker_remove = 21;
      case kMatchmakerRemove: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.matchmaker_remove_);
        break;
      }
      // .nakama.realtime.MatchmakerTicket matchmaker_ticket = 22;
      case kMatchmakerTicket: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.matchmaker_ticket_);
        break;
      }
      // .nakama.realtime.Notifications notifications = 23;
      case kNotifications: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.notifications_);
        break;
      }
      // .nakama.api.Rpc rpc = 24;
      case kRpc: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.rpc_);
        break;
      }
      // .nakama.realtime.Status status = 25;
      case kStatus: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.status_);
        break;
      }
      // .nakama.realtime.StatusFollow status_follow = 26;
      case kStatusFollow: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.status_follow_);
        break;
      }
      // .nakama.realtime.StatusPresenceEvent status_presence_event = 27;
      case kStatusPresenceEvent: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.status_presence_event_);
        break;
      }
      // .nakama.realtime.StatusUnfollow status_unfollow = 28;
      case kStatusUnfollow: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.status_unfollow_);
        break;
      }
      // .nakama.realtime.StatusUpdate status_update = 29;
      case kStatusUpdate: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.status_update_);
        break;
      }
      // .nakama.realtime.StreamData stream_data = 30;
      case kStreamData: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.stream_data_);
        break;
      }
      // .nakama.realtime.StreamPresenceEvent stream_presence_event = 31;
      case kStreamPresenceEvent: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.stream_presence_event_);
        break;
      }
      // .nakama.realtime.Ping ping = 32;
      case kPing: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.ping_);
        break;
      }
      // .nakama.realtime.Pong pong = 33;
      case kPong: {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            *message_.pong_);
        break;
      }
      case MESSAGE_NOT_SET: {
        break;
      }
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Envelope::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.Envelope)
    GOOGLE_DCHECK_NE(&from, this);
    const Envelope* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const Envelope>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.Envelope)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.Envelope)
      MergeFrom(*source);
    }
  }
  
  void Envelope::MergeFrom(const Envelope& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.Envelope)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.cid().size() > 0) {
  
      cid_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.cid_);
    }
    switch (from.message_case()) {
      case kChannel: {
        mutable_channel()->::nakama::realtime::Channel::MergeFrom(from.channel());
        break;
      }
      case kChannelJoin: {
        mutable_channel_join()->::nakama::realtime::ChannelJoin::MergeFrom(from.channel_join());
        break;
      }
      case kChannelLeave: {
        mutable_channel_leave()->::nakama::realtime::ChannelLeave::MergeFrom(from.channel_leave());
        break;
      }
      case kChannelMessage: {
        mutable_channel_message()->::nakama::api::ChannelMessage::MergeFrom(from.channel_message());
        break;
      }
      case kChannelMessageAck: {
        mutable_channel_message_ack()->::nakama::realtime::ChannelMessageAck::MergeFrom(from.channel_message_ack());
        break;
      }
      case kChannelMessageSend: {
        mutable_channel_message_send()->::nakama::realtime::ChannelMessageSend::MergeFrom(from.channel_message_send());
        break;
      }
      case kChannelMessageUpdate: {
        mutable_channel_message_update()->::nakama::realtime::ChannelMessageUpdate::MergeFrom(from.channel_message_update());
        break;
      }
      case kChannelMessageRemove: {
        mutable_channel_message_remove()->::nakama::realtime::ChannelMessageRemove::MergeFrom(from.channel_message_remove());
        break;
      }
      case kChannelPresenceEvent: {
        mutable_channel_presence_event()->::nakama::realtime::ChannelPresenceEvent::MergeFrom(from.channel_presence_event());
        break;
      }
      case kError: {
        mutable_error()->::nakama::realtime::Error::MergeFrom(from.error());
        break;
      }
      case kMatch: {
        mutable_match()->::nakama::realtime::Match::MergeFrom(from.match());
        break;
      }
      case kMatchCreate: {
        mutable_match_create()->::nakama::realtime::MatchCreate::MergeFrom(from.match_create());
        break;
      }
      case kMatchData: {
        mutable_match_data()->::nakama::realtime::MatchData::MergeFrom(from.match_data());
        break;
      }
      case kMatchDataSend: {
        mutable_match_data_send()->::nakama::realtime::MatchDataSend::MergeFrom(from.match_data_send());
        break;
      }
      case kMatchJoin: {
        mutable_match_join()->::nakama::realtime::MatchJoin::MergeFrom(from.match_join());
        break;
      }
      case kMatchLeave: {
        mutable_match_leave()->::nakama::realtime::MatchLeave::MergeFrom(from.match_leave());
        break;
      }
      case kMatchPresenceEvent: {
        mutable_match_presence_event()->::nakama::realtime::MatchPresenceEvent::MergeFrom(from.match_presence_event());
        break;
      }
      case kMatchmakerAdd: {
        mutable_matchmaker_add()->::nakama::realtime::MatchmakerAdd::MergeFrom(from.matchmaker_add());
        break;
      }
      case kMatchmakerMatched: {
        mutable_matchmaker_matched()->::nakama::realtime::MatchmakerMatched::MergeFrom(from.matchmaker_matched());
        break;
      }
      case kMatchmakerRemove: {
        mutable_matchmaker_remove()->::nakama::realtime::MatchmakerRemove::MergeFrom(from.matchmaker_remove());
        break;
      }
      case kMatchmakerTicket: {
        mutable_matchmaker_ticket()->::nakama::realtime::MatchmakerTicket::MergeFrom(from.matchmaker_ticket());
        break;
      }
      case kNotifications: {
        mutable_notifications()->::nakama::realtime::Notifications::MergeFrom(from.notifications());
        break;
      }
      case kRpc: {
        mutable_rpc()->::nakama::api::Rpc::MergeFrom(from.rpc());
        break;
      }
      case kStatus: {
        mutable_status()->::nakama::realtime::Status::MergeFrom(from.status());
        break;
      }
      case kStatusFollow: {
        mutable_status_follow()->::nakama::realtime::StatusFollow::MergeFrom(from.status_follow());
        break;
      }
      case kStatusPresenceEvent: {
        mutable_status_presence_event()->::nakama::realtime::StatusPresenceEvent::MergeFrom(from.status_presence_event());
        break;
      }
      case kStatusUnfollow: {
        mutable_status_unfollow()->::nakama::realtime::StatusUnfollow::MergeFrom(from.status_unfollow());
        break;
      }
      case kStatusUpdate: {
        mutable_status_update()->::nakama::realtime::StatusUpdate::MergeFrom(from.status_update());
        break;
      }
      case kStreamData: {
        mutable_stream_data()->::nakama::realtime::StreamData::MergeFrom(from.stream_data());
        break;
      }
      case kStreamPresenceEvent: {
        mutable_stream_presence_event()->::nakama::realtime::StreamPresenceEvent::MergeFrom(from.stream_presence_event());
        break;
      }
      case kPing: {
        mutable_ping()->::nakama::realtime::Ping::MergeFrom(from.ping());
        break;
      }
      case kPong: {
        mutable_pong()->::nakama::realtime::Pong::MergeFrom(from.pong());
        break;
      }
      case MESSAGE_NOT_SET: {
        break;
      }
    }
  }
  
  void Envelope::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.Envelope)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Envelope::CopyFrom(const Envelope& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.Envelope)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Envelope::IsInitialized() const {
    return true;
  }
  
  void Envelope::Swap(Envelope* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void Envelope::InternalSwap(Envelope* other) {
    using std::swap;
    cid_.Swap(&other->cid_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(message_, other->message_);
    swap(_oneof_case_[0], other->_oneof_case_[0]);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata Envelope::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void Channel::InitAsDefaultInstance() {
    ::nakama::realtime::_Channel_default_instance_._instance.get_mutable()->self_ = const_cast< ::nakama::realtime::UserPresence*>(
        ::nakama::realtime::UserPresence::internal_default_instance());
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int Channel::kIdFieldNumber;
  const int Channel::kPresencesFieldNumber;
  const int Channel::kSelfFieldNumber;
  const int Channel::kRoomNameFieldNumber;
  const int Channel::kGroupIdFieldNumber;
  const int Channel::kUserIdOneFieldNumber;
  const int Channel::kUserIdTwoFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  Channel::Channel()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Channel.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.Channel)
  }
  Channel::Channel(const Channel& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        presences_(from.presences_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.id().size() > 0) {
      id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.id_);
    }
    room_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.room_name().size() > 0) {
      room_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.room_name_);
    }
    group_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.group_id().size() > 0) {
      group_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.group_id_);
    }
    user_id_one_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.user_id_one().size() > 0) {
      user_id_one_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_one_);
    }
    user_id_two_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.user_id_two().size() > 0) {
      user_id_two_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_two_);
    }
    if (from.has_self()) {
      self_ = new ::nakama::realtime::UserPresence(*from.self_);
    } else {
      self_ = NULL;
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.Channel)
  }
  
  void Channel::SharedCtor() {
    id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    room_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    group_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_one_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_two_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    self_ = NULL;
  }
  
  Channel::~Channel() {
    // @@protoc_insertion_point(destructor:nakama.realtime.Channel)
    SharedDtor();
  }
  
  void Channel::SharedDtor() {
    id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    room_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    group_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_one_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_two_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete self_;
  }
  
  void Channel::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* Channel::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const Channel& Channel::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Channel.base);
    return *internal_default_instance();
  }
  
  
  void Channel::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.Channel)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    presences_.Clear();
    id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    room_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    group_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_one_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_two_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == NULL && self_ != NULL) {
      delete self_;
    }
    self_ = NULL;
    _internal_metadata_.Clear();
  }
  
  bool Channel::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.Channel)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->id().data(), static_cast<int>(this->id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Channel.id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence presences = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_presences()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.UserPresence self = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_self()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string room_name = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_room_name()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->room_name().data(), static_cast<int>(this->room_name().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Channel.room_name"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string group_id = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_group_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->group_id().data(), static_cast<int>(this->group_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Channel.group_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string user_id_one = 6;
        case 6: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_user_id_one()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->user_id_one().data(), static_cast<int>(this->user_id_one().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Channel.user_id_one"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string user_id_two = 7;
        case 7: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_user_id_two()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->user_id_two().data(), static_cast<int>(this->user_id_two().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Channel.user_id_two"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.Channel)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.Channel)
    return false;
  #undef DO_
  }
  
  void Channel::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.Channel)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string id = 1;
    if (this->id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->id().data(), static_cast<int>(this->id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->id(), output);
    }
  
    // repeated .nakama.realtime.UserPresence presences = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->presences_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        2,
        this->presences(static_cast<int>(i)),
        output);
    }
  
    // .nakama.realtime.UserPresence self = 3;
    if (this->has_self()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        3, this->_internal_self(), output);
    }
  
    // string room_name = 4;
    if (this->room_name().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->room_name().data(), static_cast<int>(this->room_name().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.room_name");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        4, this->room_name(), output);
    }
  
    // string group_id = 5;
    if (this->group_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->group_id().data(), static_cast<int>(this->group_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.group_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        5, this->group_id(), output);
    }
  
    // string user_id_one = 6;
    if (this->user_id_one().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_one().data(), static_cast<int>(this->user_id_one().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.user_id_one");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        6, this->user_id_one(), output);
    }
  
    // string user_id_two = 7;
    if (this->user_id_two().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_two().data(), static_cast<int>(this->user_id_two().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.user_id_two");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        7, this->user_id_two(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.Channel)
  }
  
  ::google::protobuf::uint8* Channel::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.Channel)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string id = 1;
    if (this->id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->id().data(), static_cast<int>(this->id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->id(), target);
    }
  
    // repeated .nakama.realtime.UserPresence presences = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->presences_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          2, this->presences(static_cast<int>(i)), deterministic, target);
    }
  
    // .nakama.realtime.UserPresence self = 3;
    if (this->has_self()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          3, this->_internal_self(), deterministic, target);
    }
  
    // string room_name = 4;
    if (this->room_name().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->room_name().data(), static_cast<int>(this->room_name().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.room_name");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          4, this->room_name(), target);
    }
  
    // string group_id = 5;
    if (this->group_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->group_id().data(), static_cast<int>(this->group_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.group_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          5, this->group_id(), target);
    }
  
    // string user_id_one = 6;
    if (this->user_id_one().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_one().data(), static_cast<int>(this->user_id_one().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.user_id_one");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          6, this->user_id_one(), target);
    }
  
    // string user_id_two = 7;
    if (this->user_id_two().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_two().data(), static_cast<int>(this->user_id_two().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Channel.user_id_two");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          7, this->user_id_two(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.Channel)
    return target;
  }
  
  size_t Channel::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.Channel)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.realtime.UserPresence presences = 2;
    {
      unsigned int count = static_cast<unsigned int>(this->presences_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->presences(static_cast<int>(i)));
      }
    }
  
    // string id = 1;
    if (this->id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->id());
    }
  
    // string room_name = 4;
    if (this->room_name().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->room_name());
    }
  
    // string group_id = 5;
    if (this->group_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->group_id());
    }
  
    // string user_id_one = 6;
    if (this->user_id_one().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->user_id_one());
    }
  
    // string user_id_two = 7;
    if (this->user_id_two().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->user_id_two());
    }
  
    // .nakama.realtime.UserPresence self = 3;
    if (this->has_self()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *self_);
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Channel::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.Channel)
    GOOGLE_DCHECK_NE(&from, this);
    const Channel* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const Channel>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.Channel)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.Channel)
      MergeFrom(*source);
    }
  }
  
  void Channel::MergeFrom(const Channel& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.Channel)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    presences_.MergeFrom(from.presences_);
    if (from.id().size() > 0) {
  
      id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.id_);
    }
    if (from.room_name().size() > 0) {
  
      room_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.room_name_);
    }
    if (from.group_id().size() > 0) {
  
      group_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.group_id_);
    }
    if (from.user_id_one().size() > 0) {
  
      user_id_one_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_one_);
    }
    if (from.user_id_two().size() > 0) {
  
      user_id_two_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_two_);
    }
    if (from.has_self()) {
      mutable_self()->::nakama::realtime::UserPresence::MergeFrom(from.self());
    }
  }
  
  void Channel::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.Channel)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Channel::CopyFrom(const Channel& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.Channel)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Channel::IsInitialized() const {
    return true;
  }
  
  void Channel::Swap(Channel* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void Channel::InternalSwap(Channel* other) {
    using std::swap;
    CastToBase(&presences_)->InternalSwap(CastToBase(&other->presences_));
    id_.Swap(&other->id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    room_name_.Swap(&other->room_name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    group_id_.Swap(&other->group_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    user_id_one_.Swap(&other->user_id_one_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    user_id_two_.Swap(&other->user_id_two_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(self_, other->self_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata Channel::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void ChannelJoin::InitAsDefaultInstance() {
    ::nakama::realtime::_ChannelJoin_default_instance_._instance.get_mutable()->persistence_ = const_cast< ::google::protobuf::BoolValue*>(
        ::google::protobuf::BoolValue::internal_default_instance());
    ::nakama::realtime::_ChannelJoin_default_instance_._instance.get_mutable()->hidden_ = const_cast< ::google::protobuf::BoolValue*>(
        ::google::protobuf::BoolValue::internal_default_instance());
  }
  void ChannelJoin::clear_persistence() {
    if (GetArenaNoVirtual() == NULL && persistence_ != NULL) {
      delete persistence_;
    }
    persistence_ = NULL;
  }
  void ChannelJoin::clear_hidden() {
    if (GetArenaNoVirtual() == NULL && hidden_ != NULL) {
      delete hidden_;
    }
    hidden_ = NULL;
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int ChannelJoin::kTargetFieldNumber;
  const int ChannelJoin::kTypeFieldNumber;
  const int ChannelJoin::kPersistenceFieldNumber;
  const int ChannelJoin::kHiddenFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  ChannelJoin::ChannelJoin()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelJoin.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.ChannelJoin)
  }
  ChannelJoin::ChannelJoin(const ChannelJoin& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    target_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.target().size() > 0) {
      target_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.target_);
    }
    if (from.has_persistence()) {
      persistence_ = new ::google::protobuf::BoolValue(*from.persistence_);
    } else {
      persistence_ = NULL;
    }
    if (from.has_hidden()) {
      hidden_ = new ::google::protobuf::BoolValue(*from.hidden_);
    } else {
      hidden_ = NULL;
    }
    type_ = from.type_;
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.ChannelJoin)
  }
  
  void ChannelJoin::SharedCtor() {
    target_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&persistence_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&type_) -
        reinterpret_cast<char*>(&persistence_)) + sizeof(type_));
  }
  
  ChannelJoin::~ChannelJoin() {
    // @@protoc_insertion_point(destructor:nakama.realtime.ChannelJoin)
    SharedDtor();
  }
  
  void ChannelJoin::SharedDtor() {
    target_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete persistence_;
    if (this != internal_default_instance()) delete hidden_;
  }
  
  void ChannelJoin::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* ChannelJoin::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const ChannelJoin& ChannelJoin::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelJoin.base);
    return *internal_default_instance();
  }
  
  
  void ChannelJoin::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.ChannelJoin)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    target_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == NULL && persistence_ != NULL) {
      delete persistence_;
    }
    persistence_ = NULL;
    if (GetArenaNoVirtual() == NULL && hidden_ != NULL) {
      delete hidden_;
    }
    hidden_ = NULL;
    type_ = 0;
    _internal_metadata_.Clear();
  }
  
  bool ChannelJoin::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.ChannelJoin)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string target = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_target()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->target().data(), static_cast<int>(this->target().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelJoin.target"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // int32 type = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &type_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .google.protobuf.BoolValue persistence = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_persistence()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .google.protobuf.BoolValue hidden = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_hidden()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.ChannelJoin)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.ChannelJoin)
    return false;
  #undef DO_
  }
  
  void ChannelJoin::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.ChannelJoin)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string target = 1;
    if (this->target().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->target().data(), static_cast<int>(this->target().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelJoin.target");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->target(), output);
    }
  
    // int32 type = 2;
    if (this->type() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->type(), output);
    }
  
    // .google.protobuf.BoolValue persistence = 3;
    if (this->has_persistence()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        3, this->_internal_persistence(), output);
    }
  
    // .google.protobuf.BoolValue hidden = 4;
    if (this->has_hidden()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        4, this->_internal_hidden(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.ChannelJoin)
  }
  
  ::google::protobuf::uint8* ChannelJoin::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.ChannelJoin)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string target = 1;
    if (this->target().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->target().data(), static_cast<int>(this->target().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelJoin.target");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->target(), target);
    }
  
    // int32 type = 2;
    if (this->type() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->type(), target);
    }
  
    // .google.protobuf.BoolValue persistence = 3;
    if (this->has_persistence()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          3, this->_internal_persistence(), deterministic, target);
    }
  
    // .google.protobuf.BoolValue hidden = 4;
    if (this->has_hidden()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          4, this->_internal_hidden(), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.ChannelJoin)
    return target;
  }
  
  size_t ChannelJoin::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.ChannelJoin)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string target = 1;
    if (this->target().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->target());
    }
  
    // .google.protobuf.BoolValue persistence = 3;
    if (this->has_persistence()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *persistence_);
    }
  
    // .google.protobuf.BoolValue hidden = 4;
    if (this->has_hidden()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *hidden_);
    }
  
    // int32 type = 2;
    if (this->type() != 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->type());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void ChannelJoin::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.ChannelJoin)
    GOOGLE_DCHECK_NE(&from, this);
    const ChannelJoin* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const ChannelJoin>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.ChannelJoin)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.ChannelJoin)
      MergeFrom(*source);
    }
  }
  
  void ChannelJoin::MergeFrom(const ChannelJoin& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.ChannelJoin)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.target().size() > 0) {
  
      target_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.target_);
    }
    if (from.has_persistence()) {
      mutable_persistence()->::google::protobuf::BoolValue::MergeFrom(from.persistence());
    }
    if (from.has_hidden()) {
      mutable_hidden()->::google::protobuf::BoolValue::MergeFrom(from.hidden());
    }
    if (from.type() != 0) {
      set_type(from.type());
    }
  }
  
  void ChannelJoin::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.ChannelJoin)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void ChannelJoin::CopyFrom(const ChannelJoin& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.ChannelJoin)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool ChannelJoin::IsInitialized() const {
    return true;
  }
  
  void ChannelJoin::Swap(ChannelJoin* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void ChannelJoin::InternalSwap(ChannelJoin* other) {
    using std::swap;
    target_.Swap(&other->target_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(persistence_, other->persistence_);
    swap(hidden_, other->hidden_);
    swap(type_, other->type_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata ChannelJoin::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void ChannelLeave::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int ChannelLeave::kChannelIdFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  ChannelLeave::ChannelLeave()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelLeave.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.ChannelLeave)
  }
  ChannelLeave::ChannelLeave(const ChannelLeave& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.channel_id().size() > 0) {
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.ChannelLeave)
  }
  
  void ChannelLeave::SharedCtor() {
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  ChannelLeave::~ChannelLeave() {
    // @@protoc_insertion_point(destructor:nakama.realtime.ChannelLeave)
    SharedDtor();
  }
  
  void ChannelLeave::SharedDtor() {
    channel_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void ChannelLeave::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* ChannelLeave::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const ChannelLeave& ChannelLeave::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelLeave.base);
    return *internal_default_instance();
  }
  
  
  void ChannelLeave::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.ChannelLeave)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    channel_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    _internal_metadata_.Clear();
  }
  
  bool ChannelLeave::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.ChannelLeave)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string channel_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_channel_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->channel_id().data(), static_cast<int>(this->channel_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelLeave.channel_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.ChannelLeave)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.ChannelLeave)
    return false;
  #undef DO_
  }
  
  void ChannelLeave::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.ChannelLeave)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelLeave.channel_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->channel_id(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.ChannelLeave)
  }
  
  ::google::protobuf::uint8* ChannelLeave::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.ChannelLeave)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelLeave.channel_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->channel_id(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.ChannelLeave)
    return target;
  }
  
  size_t ChannelLeave::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.ChannelLeave)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->channel_id());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void ChannelLeave::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.ChannelLeave)
    GOOGLE_DCHECK_NE(&from, this);
    const ChannelLeave* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const ChannelLeave>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.ChannelLeave)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.ChannelLeave)
      MergeFrom(*source);
    }
  }
  
  void ChannelLeave::MergeFrom(const ChannelLeave& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.ChannelLeave)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.channel_id().size() > 0) {
  
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
  }
  
  void ChannelLeave::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.ChannelLeave)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void ChannelLeave::CopyFrom(const ChannelLeave& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.ChannelLeave)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool ChannelLeave::IsInitialized() const {
    return true;
  }
  
  void ChannelLeave::Swap(ChannelLeave* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void ChannelLeave::InternalSwap(ChannelLeave* other) {
    using std::swap;
    channel_id_.Swap(&other->channel_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata ChannelLeave::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void ChannelMessageAck::InitAsDefaultInstance() {
    ::nakama::realtime::_ChannelMessageAck_default_instance_._instance.get_mutable()->code_ = const_cast< ::google::protobuf::Int32Value*>(
        ::google::protobuf::Int32Value::internal_default_instance());
    ::nakama::realtime::_ChannelMessageAck_default_instance_._instance.get_mutable()->create_time_ = const_cast< ::google::protobuf::Timestamp*>(
        ::google::protobuf::Timestamp::internal_default_instance());
    ::nakama::realtime::_ChannelMessageAck_default_instance_._instance.get_mutable()->update_time_ = const_cast< ::google::protobuf::Timestamp*>(
        ::google::protobuf::Timestamp::internal_default_instance());
    ::nakama::realtime::_ChannelMessageAck_default_instance_._instance.get_mutable()->persistent_ = const_cast< ::google::protobuf::BoolValue*>(
        ::google::protobuf::BoolValue::internal_default_instance());
  }
  void ChannelMessageAck::clear_code() {
    if (GetArenaNoVirtual() == NULL && code_ != NULL) {
      delete code_;
    }
    code_ = NULL;
  }
  void ChannelMessageAck::clear_create_time() {
    if (GetArenaNoVirtual() == NULL && create_time_ != NULL) {
      delete create_time_;
    }
    create_time_ = NULL;
  }
  void ChannelMessageAck::clear_update_time() {
    if (GetArenaNoVirtual() == NULL && update_time_ != NULL) {
      delete update_time_;
    }
    update_time_ = NULL;
  }
  void ChannelMessageAck::clear_persistent() {
    if (GetArenaNoVirtual() == NULL && persistent_ != NULL) {
      delete persistent_;
    }
    persistent_ = NULL;
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int ChannelMessageAck::kChannelIdFieldNumber;
  const int ChannelMessageAck::kMessageIdFieldNumber;
  const int ChannelMessageAck::kCodeFieldNumber;
  const int ChannelMessageAck::kUsernameFieldNumber;
  const int ChannelMessageAck::kCreateTimeFieldNumber;
  const int ChannelMessageAck::kUpdateTimeFieldNumber;
  const int ChannelMessageAck::kPersistentFieldNumber;
  const int ChannelMessageAck::kRoomNameFieldNumber;
  const int ChannelMessageAck::kGroupIdFieldNumber;
  const int ChannelMessageAck::kUserIdOneFieldNumber;
  const int ChannelMessageAck::kUserIdTwoFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  ChannelMessageAck::ChannelMessageAck()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageAck.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.ChannelMessageAck)
  }
  ChannelMessageAck::ChannelMessageAck(const ChannelMessageAck& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.channel_id().size() > 0) {
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    message_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.message_id().size() > 0) {
      message_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.message_id_);
    }
    username_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.username().size() > 0) {
      username_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.username_);
    }
    room_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.room_name().size() > 0) {
      room_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.room_name_);
    }
    group_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.group_id().size() > 0) {
      group_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.group_id_);
    }
    user_id_one_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.user_id_one().size() > 0) {
      user_id_one_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_one_);
    }
    user_id_two_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.user_id_two().size() > 0) {
      user_id_two_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_two_);
    }
    if (from.has_code()) {
      code_ = new ::google::protobuf::Int32Value(*from.code_);
    } else {
      code_ = NULL;
    }
    if (from.has_create_time()) {
      create_time_ = new ::google::protobuf::Timestamp(*from.create_time_);
    } else {
      create_time_ = NULL;
    }
    if (from.has_update_time()) {
      update_time_ = new ::google::protobuf::Timestamp(*from.update_time_);
    } else {
      update_time_ = NULL;
    }
    if (from.has_persistent()) {
      persistent_ = new ::google::protobuf::BoolValue(*from.persistent_);
    } else {
      persistent_ = NULL;
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.ChannelMessageAck)
  }
  
  void ChannelMessageAck::SharedCtor() {
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    message_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    username_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    room_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    group_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_one_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_two_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&code_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&persistent_) -
        reinterpret_cast<char*>(&code_)) + sizeof(persistent_));
  }
  
  ChannelMessageAck::~ChannelMessageAck() {
    // @@protoc_insertion_point(destructor:nakama.realtime.ChannelMessageAck)
    SharedDtor();
  }
  
  void ChannelMessageAck::SharedDtor() {
    channel_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    message_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    username_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    room_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    group_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_one_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_two_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete code_;
    if (this != internal_default_instance()) delete create_time_;
    if (this != internal_default_instance()) delete update_time_;
    if (this != internal_default_instance()) delete persistent_;
  }
  
  void ChannelMessageAck::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* ChannelMessageAck::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const ChannelMessageAck& ChannelMessageAck::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageAck.base);
    return *internal_default_instance();
  }
  
  
  void ChannelMessageAck::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.ChannelMessageAck)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    channel_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    message_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    username_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    room_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    group_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_one_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_two_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == NULL && code_ != NULL) {
      delete code_;
    }
    code_ = NULL;
    if (GetArenaNoVirtual() == NULL && create_time_ != NULL) {
      delete create_time_;
    }
    create_time_ = NULL;
    if (GetArenaNoVirtual() == NULL && update_time_ != NULL) {
      delete update_time_;
    }
    update_time_ = NULL;
    if (GetArenaNoVirtual() == NULL && persistent_ != NULL) {
      delete persistent_;
    }
    persistent_ = NULL;
    _internal_metadata_.Clear();
  }
  
  bool ChannelMessageAck::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.ChannelMessageAck)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string channel_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_channel_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->channel_id().data(), static_cast<int>(this->channel_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageAck.channel_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string message_id = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_message_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->message_id().data(), static_cast<int>(this->message_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageAck.message_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .google.protobuf.Int32Value code = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_code()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string username = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_username()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->username().data(), static_cast<int>(this->username().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageAck.username"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .google.protobuf.Timestamp create_time = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_create_time()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .google.protobuf.Timestamp update_time = 6;
        case 6: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_update_time()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .google.protobuf.BoolValue persistent = 7;
        case 7: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_persistent()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string room_name = 8;
        case 8: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_room_name()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->room_name().data(), static_cast<int>(this->room_name().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageAck.room_name"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string group_id = 9;
        case 9: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(74u /* 74 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_group_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->group_id().data(), static_cast<int>(this->group_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageAck.group_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string user_id_one = 10;
        case 10: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(82u /* 82 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_user_id_one()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->user_id_one().data(), static_cast<int>(this->user_id_one().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageAck.user_id_one"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string user_id_two = 11;
        case 11: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(90u /* 90 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_user_id_two()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->user_id_two().data(), static_cast<int>(this->user_id_two().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageAck.user_id_two"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.ChannelMessageAck)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.ChannelMessageAck)
    return false;
  #undef DO_
  }
  
  void ChannelMessageAck::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.ChannelMessageAck)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.channel_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->channel_id(), output);
    }
  
    // string message_id = 2;
    if (this->message_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->message_id().data(), static_cast<int>(this->message_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.message_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        2, this->message_id(), output);
    }
  
    // .google.protobuf.Int32Value code = 3;
    if (this->has_code()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        3, this->_internal_code(), output);
    }
  
    // string username = 4;
    if (this->username().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->username().data(), static_cast<int>(this->username().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.username");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        4, this->username(), output);
    }
  
    // .google.protobuf.Timestamp create_time = 5;
    if (this->has_create_time()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        5, this->_internal_create_time(), output);
    }
  
    // .google.protobuf.Timestamp update_time = 6;
    if (this->has_update_time()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        6, this->_internal_update_time(), output);
    }
  
    // .google.protobuf.BoolValue persistent = 7;
    if (this->has_persistent()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        7, this->_internal_persistent(), output);
    }
  
    // string room_name = 8;
    if (this->room_name().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->room_name().data(), static_cast<int>(this->room_name().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.room_name");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        8, this->room_name(), output);
    }
  
    // string group_id = 9;
    if (this->group_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->group_id().data(), static_cast<int>(this->group_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.group_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        9, this->group_id(), output);
    }
  
    // string user_id_one = 10;
    if (this->user_id_one().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_one().data(), static_cast<int>(this->user_id_one().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.user_id_one");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        10, this->user_id_one(), output);
    }
  
    // string user_id_two = 11;
    if (this->user_id_two().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_two().data(), static_cast<int>(this->user_id_two().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.user_id_two");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        11, this->user_id_two(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.ChannelMessageAck)
  }
  
  ::google::protobuf::uint8* ChannelMessageAck::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.ChannelMessageAck)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.channel_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->channel_id(), target);
    }
  
    // string message_id = 2;
    if (this->message_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->message_id().data(), static_cast<int>(this->message_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.message_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          2, this->message_id(), target);
    }
  
    // .google.protobuf.Int32Value code = 3;
    if (this->has_code()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          3, this->_internal_code(), deterministic, target);
    }
  
    // string username = 4;
    if (this->username().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->username().data(), static_cast<int>(this->username().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.username");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          4, this->username(), target);
    }
  
    // .google.protobuf.Timestamp create_time = 5;
    if (this->has_create_time()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          5, this->_internal_create_time(), deterministic, target);
    }
  
    // .google.protobuf.Timestamp update_time = 6;
    if (this->has_update_time()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          6, this->_internal_update_time(), deterministic, target);
    }
  
    // .google.protobuf.BoolValue persistent = 7;
    if (this->has_persistent()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          7, this->_internal_persistent(), deterministic, target);
    }
  
    // string room_name = 8;
    if (this->room_name().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->room_name().data(), static_cast<int>(this->room_name().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.room_name");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          8, this->room_name(), target);
    }
  
    // string group_id = 9;
    if (this->group_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->group_id().data(), static_cast<int>(this->group_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.group_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          9, this->group_id(), target);
    }
  
    // string user_id_one = 10;
    if (this->user_id_one().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_one().data(), static_cast<int>(this->user_id_one().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.user_id_one");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          10, this->user_id_one(), target);
    }
  
    // string user_id_two = 11;
    if (this->user_id_two().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_two().data(), static_cast<int>(this->user_id_two().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageAck.user_id_two");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          11, this->user_id_two(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.ChannelMessageAck)
    return target;
  }
  
  size_t ChannelMessageAck::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.ChannelMessageAck)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->channel_id());
    }
  
    // string message_id = 2;
    if (this->message_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->message_id());
    }
  
    // string username = 4;
    if (this->username().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->username());
    }
  
    // string room_name = 8;
    if (this->room_name().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->room_name());
    }
  
    // string group_id = 9;
    if (this->group_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->group_id());
    }
  
    // string user_id_one = 10;
    if (this->user_id_one().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->user_id_one());
    }
  
    // string user_id_two = 11;
    if (this->user_id_two().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->user_id_two());
    }
  
    // .google.protobuf.Int32Value code = 3;
    if (this->has_code()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *code_);
    }
  
    // .google.protobuf.Timestamp create_time = 5;
    if (this->has_create_time()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *create_time_);
    }
  
    // .google.protobuf.Timestamp update_time = 6;
    if (this->has_update_time()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *update_time_);
    }
  
    // .google.protobuf.BoolValue persistent = 7;
    if (this->has_persistent()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *persistent_);
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void ChannelMessageAck::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.ChannelMessageAck)
    GOOGLE_DCHECK_NE(&from, this);
    const ChannelMessageAck* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const ChannelMessageAck>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.ChannelMessageAck)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.ChannelMessageAck)
      MergeFrom(*source);
    }
  }
  
  void ChannelMessageAck::MergeFrom(const ChannelMessageAck& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.ChannelMessageAck)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.channel_id().size() > 0) {
  
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    if (from.message_id().size() > 0) {
  
      message_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.message_id_);
    }
    if (from.username().size() > 0) {
  
      username_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.username_);
    }
    if (from.room_name().size() > 0) {
  
      room_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.room_name_);
    }
    if (from.group_id().size() > 0) {
  
      group_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.group_id_);
    }
    if (from.user_id_one().size() > 0) {
  
      user_id_one_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_one_);
    }
    if (from.user_id_two().size() > 0) {
  
      user_id_two_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_two_);
    }
    if (from.has_code()) {
      mutable_code()->::google::protobuf::Int32Value::MergeFrom(from.code());
    }
    if (from.has_create_time()) {
      mutable_create_time()->::google::protobuf::Timestamp::MergeFrom(from.create_time());
    }
    if (from.has_update_time()) {
      mutable_update_time()->::google::protobuf::Timestamp::MergeFrom(from.update_time());
    }
    if (from.has_persistent()) {
      mutable_persistent()->::google::protobuf::BoolValue::MergeFrom(from.persistent());
    }
  }
  
  void ChannelMessageAck::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.ChannelMessageAck)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void ChannelMessageAck::CopyFrom(const ChannelMessageAck& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.ChannelMessageAck)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool ChannelMessageAck::IsInitialized() const {
    return true;
  }
  
  void ChannelMessageAck::Swap(ChannelMessageAck* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void ChannelMessageAck::InternalSwap(ChannelMessageAck* other) {
    using std::swap;
    channel_id_.Swap(&other->channel_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    message_id_.Swap(&other->message_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    username_.Swap(&other->username_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    room_name_.Swap(&other->room_name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    group_id_.Swap(&other->group_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    user_id_one_.Swap(&other->user_id_one_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    user_id_two_.Swap(&other->user_id_two_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(code_, other->code_);
    swap(create_time_, other->create_time_);
    swap(update_time_, other->update_time_);
    swap(persistent_, other->persistent_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata ChannelMessageAck::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void ChannelMessageSend::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int ChannelMessageSend::kChannelIdFieldNumber;
  const int ChannelMessageSend::kContentFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  ChannelMessageSend::ChannelMessageSend()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageSend.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.ChannelMessageSend)
  }
  ChannelMessageSend::ChannelMessageSend(const ChannelMessageSend& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.channel_id().size() > 0) {
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.content().size() > 0) {
      content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.content_);
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.ChannelMessageSend)
  }
  
  void ChannelMessageSend::SharedCtor() {
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  ChannelMessageSend::~ChannelMessageSend() {
    // @@protoc_insertion_point(destructor:nakama.realtime.ChannelMessageSend)
    SharedDtor();
  }
  
  void ChannelMessageSend::SharedDtor() {
    channel_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    content_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void ChannelMessageSend::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* ChannelMessageSend::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const ChannelMessageSend& ChannelMessageSend::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageSend.base);
    return *internal_default_instance();
  }
  
  
  void ChannelMessageSend::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.ChannelMessageSend)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    channel_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    content_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    _internal_metadata_.Clear();
  }
  
  bool ChannelMessageSend::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.ChannelMessageSend)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string channel_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_channel_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->channel_id().data(), static_cast<int>(this->channel_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageSend.channel_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string content = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_content()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->content().data(), static_cast<int>(this->content().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageSend.content"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.ChannelMessageSend)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.ChannelMessageSend)
    return false;
  #undef DO_
  }
  
  void ChannelMessageSend::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.ChannelMessageSend)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageSend.channel_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->channel_id(), output);
    }
  
    // string content = 2;
    if (this->content().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->content().data(), static_cast<int>(this->content().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageSend.content");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        2, this->content(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.ChannelMessageSend)
  }
  
  ::google::protobuf::uint8* ChannelMessageSend::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.ChannelMessageSend)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageSend.channel_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->channel_id(), target);
    }
  
    // string content = 2;
    if (this->content().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->content().data(), static_cast<int>(this->content().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageSend.content");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          2, this->content(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.ChannelMessageSend)
    return target;
  }
  
  size_t ChannelMessageSend::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.ChannelMessageSend)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->channel_id());
    }
  
    // string content = 2;
    if (this->content().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->content());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void ChannelMessageSend::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.ChannelMessageSend)
    GOOGLE_DCHECK_NE(&from, this);
    const ChannelMessageSend* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const ChannelMessageSend>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.ChannelMessageSend)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.ChannelMessageSend)
      MergeFrom(*source);
    }
  }
  
  void ChannelMessageSend::MergeFrom(const ChannelMessageSend& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.ChannelMessageSend)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.channel_id().size() > 0) {
  
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    if (from.content().size() > 0) {
  
      content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.content_);
    }
  }
  
  void ChannelMessageSend::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.ChannelMessageSend)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void ChannelMessageSend::CopyFrom(const ChannelMessageSend& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.ChannelMessageSend)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool ChannelMessageSend::IsInitialized() const {
    return true;
  }
  
  void ChannelMessageSend::Swap(ChannelMessageSend* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void ChannelMessageSend::InternalSwap(ChannelMessageSend* other) {
    using std::swap;
    channel_id_.Swap(&other->channel_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    content_.Swap(&other->content_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata ChannelMessageSend::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void ChannelMessageUpdate::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int ChannelMessageUpdate::kChannelIdFieldNumber;
  const int ChannelMessageUpdate::kMessageIdFieldNumber;
  const int ChannelMessageUpdate::kContentFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  ChannelMessageUpdate::ChannelMessageUpdate()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageUpdate.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.ChannelMessageUpdate)
  }
  ChannelMessageUpdate::ChannelMessageUpdate(const ChannelMessageUpdate& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.channel_id().size() > 0) {
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    message_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.message_id().size() > 0) {
      message_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.message_id_);
    }
    content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.content().size() > 0) {
      content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.content_);
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.ChannelMessageUpdate)
  }
  
  void ChannelMessageUpdate::SharedCtor() {
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    message_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  ChannelMessageUpdate::~ChannelMessageUpdate() {
    // @@protoc_insertion_point(destructor:nakama.realtime.ChannelMessageUpdate)
    SharedDtor();
  }
  
  void ChannelMessageUpdate::SharedDtor() {
    channel_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    message_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    content_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void ChannelMessageUpdate::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* ChannelMessageUpdate::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const ChannelMessageUpdate& ChannelMessageUpdate::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageUpdate.base);
    return *internal_default_instance();
  }
  
  
  void ChannelMessageUpdate::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.ChannelMessageUpdate)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    channel_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    message_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    content_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    _internal_metadata_.Clear();
  }
  
  bool ChannelMessageUpdate::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.ChannelMessageUpdate)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string channel_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_channel_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->channel_id().data(), static_cast<int>(this->channel_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageUpdate.channel_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string message_id = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_message_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->message_id().data(), static_cast<int>(this->message_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageUpdate.message_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string content = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_content()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->content().data(), static_cast<int>(this->content().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageUpdate.content"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.ChannelMessageUpdate)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.ChannelMessageUpdate)
    return false;
  #undef DO_
  }
  
  void ChannelMessageUpdate::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.ChannelMessageUpdate)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageUpdate.channel_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->channel_id(), output);
    }
  
    // string message_id = 2;
    if (this->message_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->message_id().data(), static_cast<int>(this->message_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageUpdate.message_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        2, this->message_id(), output);
    }
  
    // string content = 3;
    if (this->content().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->content().data(), static_cast<int>(this->content().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageUpdate.content");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        3, this->content(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.ChannelMessageUpdate)
  }
  
  ::google::protobuf::uint8* ChannelMessageUpdate::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.ChannelMessageUpdate)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageUpdate.channel_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->channel_id(), target);
    }
  
    // string message_id = 2;
    if (this->message_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->message_id().data(), static_cast<int>(this->message_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageUpdate.message_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          2, this->message_id(), target);
    }
  
    // string content = 3;
    if (this->content().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->content().data(), static_cast<int>(this->content().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageUpdate.content");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          3, this->content(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.ChannelMessageUpdate)
    return target;
  }
  
  size_t ChannelMessageUpdate::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.ChannelMessageUpdate)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->channel_id());
    }
  
    // string message_id = 2;
    if (this->message_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->message_id());
    }
  
    // string content = 3;
    if (this->content().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->content());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void ChannelMessageUpdate::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.ChannelMessageUpdate)
    GOOGLE_DCHECK_NE(&from, this);
    const ChannelMessageUpdate* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const ChannelMessageUpdate>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.ChannelMessageUpdate)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.ChannelMessageUpdate)
      MergeFrom(*source);
    }
  }
  
  void ChannelMessageUpdate::MergeFrom(const ChannelMessageUpdate& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.ChannelMessageUpdate)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.channel_id().size() > 0) {
  
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    if (from.message_id().size() > 0) {
  
      message_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.message_id_);
    }
    if (from.content().size() > 0) {
  
      content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.content_);
    }
  }
  
  void ChannelMessageUpdate::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.ChannelMessageUpdate)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void ChannelMessageUpdate::CopyFrom(const ChannelMessageUpdate& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.ChannelMessageUpdate)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool ChannelMessageUpdate::IsInitialized() const {
    return true;
  }
  
  void ChannelMessageUpdate::Swap(ChannelMessageUpdate* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void ChannelMessageUpdate::InternalSwap(ChannelMessageUpdate* other) {
    using std::swap;
    channel_id_.Swap(&other->channel_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    message_id_.Swap(&other->message_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    content_.Swap(&other->content_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata ChannelMessageUpdate::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void ChannelMessageRemove::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int ChannelMessageRemove::kChannelIdFieldNumber;
  const int ChannelMessageRemove::kMessageIdFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  ChannelMessageRemove::ChannelMessageRemove()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageRemove.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.ChannelMessageRemove)
  }
  ChannelMessageRemove::ChannelMessageRemove(const ChannelMessageRemove& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.channel_id().size() > 0) {
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    message_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.message_id().size() > 0) {
      message_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.message_id_);
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.ChannelMessageRemove)
  }
  
  void ChannelMessageRemove::SharedCtor() {
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    message_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  ChannelMessageRemove::~ChannelMessageRemove() {
    // @@protoc_insertion_point(destructor:nakama.realtime.ChannelMessageRemove)
    SharedDtor();
  }
  
  void ChannelMessageRemove::SharedDtor() {
    channel_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    message_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void ChannelMessageRemove::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* ChannelMessageRemove::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const ChannelMessageRemove& ChannelMessageRemove::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelMessageRemove.base);
    return *internal_default_instance();
  }
  
  
  void ChannelMessageRemove::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.ChannelMessageRemove)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    channel_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    message_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    _internal_metadata_.Clear();
  }
  
  bool ChannelMessageRemove::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.ChannelMessageRemove)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string channel_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_channel_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->channel_id().data(), static_cast<int>(this->channel_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageRemove.channel_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string message_id = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_message_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->message_id().data(), static_cast<int>(this->message_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelMessageRemove.message_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.ChannelMessageRemove)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.ChannelMessageRemove)
    return false;
  #undef DO_
  }
  
  void ChannelMessageRemove::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.ChannelMessageRemove)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageRemove.channel_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->channel_id(), output);
    }
  
    // string message_id = 2;
    if (this->message_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->message_id().data(), static_cast<int>(this->message_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageRemove.message_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        2, this->message_id(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.ChannelMessageRemove)
  }
  
  ::google::protobuf::uint8* ChannelMessageRemove::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.ChannelMessageRemove)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageRemove.channel_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->channel_id(), target);
    }
  
    // string message_id = 2;
    if (this->message_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->message_id().data(), static_cast<int>(this->message_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelMessageRemove.message_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          2, this->message_id(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.ChannelMessageRemove)
    return target;
  }
  
  size_t ChannelMessageRemove::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.ChannelMessageRemove)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->channel_id());
    }
  
    // string message_id = 2;
    if (this->message_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->message_id());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void ChannelMessageRemove::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.ChannelMessageRemove)
    GOOGLE_DCHECK_NE(&from, this);
    const ChannelMessageRemove* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const ChannelMessageRemove>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.ChannelMessageRemove)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.ChannelMessageRemove)
      MergeFrom(*source);
    }
  }
  
  void ChannelMessageRemove::MergeFrom(const ChannelMessageRemove& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.ChannelMessageRemove)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.channel_id().size() > 0) {
  
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    if (from.message_id().size() > 0) {
  
      message_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.message_id_);
    }
  }
  
  void ChannelMessageRemove::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.ChannelMessageRemove)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void ChannelMessageRemove::CopyFrom(const ChannelMessageRemove& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.ChannelMessageRemove)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool ChannelMessageRemove::IsInitialized() const {
    return true;
  }
  
  void ChannelMessageRemove::Swap(ChannelMessageRemove* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void ChannelMessageRemove::InternalSwap(ChannelMessageRemove* other) {
    using std::swap;
    channel_id_.Swap(&other->channel_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    message_id_.Swap(&other->message_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata ChannelMessageRemove::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void ChannelPresenceEvent::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int ChannelPresenceEvent::kChannelIdFieldNumber;
  const int ChannelPresenceEvent::kJoinsFieldNumber;
  const int ChannelPresenceEvent::kLeavesFieldNumber;
  const int ChannelPresenceEvent::kRoomNameFieldNumber;
  const int ChannelPresenceEvent::kGroupIdFieldNumber;
  const int ChannelPresenceEvent::kUserIdOneFieldNumber;
  const int ChannelPresenceEvent::kUserIdTwoFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  ChannelPresenceEvent::ChannelPresenceEvent()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelPresenceEvent.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.ChannelPresenceEvent)
  }
  ChannelPresenceEvent::ChannelPresenceEvent(const ChannelPresenceEvent& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        joins_(from.joins_),
        leaves_(from.leaves_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.channel_id().size() > 0) {
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    room_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.room_name().size() > 0) {
      room_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.room_name_);
    }
    group_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.group_id().size() > 0) {
      group_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.group_id_);
    }
    user_id_one_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.user_id_one().size() > 0) {
      user_id_one_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_one_);
    }
    user_id_two_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.user_id_two().size() > 0) {
      user_id_two_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_two_);
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.ChannelPresenceEvent)
  }
  
  void ChannelPresenceEvent::SharedCtor() {
    channel_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    room_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    group_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_one_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_two_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  ChannelPresenceEvent::~ChannelPresenceEvent() {
    // @@protoc_insertion_point(destructor:nakama.realtime.ChannelPresenceEvent)
    SharedDtor();
  }
  
  void ChannelPresenceEvent::SharedDtor() {
    channel_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    room_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    group_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_one_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_two_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void ChannelPresenceEvent::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* ChannelPresenceEvent::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const ChannelPresenceEvent& ChannelPresenceEvent::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_ChannelPresenceEvent.base);
    return *internal_default_instance();
  }
  
  
  void ChannelPresenceEvent::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.ChannelPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    joins_.Clear();
    leaves_.Clear();
    channel_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    room_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    group_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_one_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    user_id_two_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    _internal_metadata_.Clear();
  }
  
  bool ChannelPresenceEvent::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.ChannelPresenceEvent)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string channel_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_channel_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->channel_id().data(), static_cast<int>(this->channel_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelPresenceEvent.channel_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence joins = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_joins()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence leaves = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_leaves()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string room_name = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_room_name()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->room_name().data(), static_cast<int>(this->room_name().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelPresenceEvent.room_name"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string group_id = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_group_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->group_id().data(), static_cast<int>(this->group_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelPresenceEvent.group_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string user_id_one = 6;
        case 6: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_user_id_one()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->user_id_one().data(), static_cast<int>(this->user_id_one().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelPresenceEvent.user_id_one"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string user_id_two = 7;
        case 7: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_user_id_two()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->user_id_two().data(), static_cast<int>(this->user_id_two().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.ChannelPresenceEvent.user_id_two"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.ChannelPresenceEvent)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.ChannelPresenceEvent)
    return false;
  #undef DO_
  }
  
  void ChannelPresenceEvent::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.ChannelPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.channel_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->channel_id(), output);
    }
  
    // repeated .nakama.realtime.UserPresence joins = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->joins_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        2,
        this->joins(static_cast<int>(i)),
        output);
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->leaves_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        3,
        this->leaves(static_cast<int>(i)),
        output);
    }
  
    // string room_name = 4;
    if (this->room_name().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->room_name().data(), static_cast<int>(this->room_name().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.room_name");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        4, this->room_name(), output);
    }
  
    // string group_id = 5;
    if (this->group_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->group_id().data(), static_cast<int>(this->group_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.group_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        5, this->group_id(), output);
    }
  
    // string user_id_one = 6;
    if (this->user_id_one().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_one().data(), static_cast<int>(this->user_id_one().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.user_id_one");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        6, this->user_id_one(), output);
    }
  
    // string user_id_two = 7;
    if (this->user_id_two().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_two().data(), static_cast<int>(this->user_id_two().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.user_id_two");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        7, this->user_id_two(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.ChannelPresenceEvent)
  }
  
  ::google::protobuf::uint8* ChannelPresenceEvent::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.ChannelPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->channel_id().data(), static_cast<int>(this->channel_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.channel_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->channel_id(), target);
    }
  
    // repeated .nakama.realtime.UserPresence joins = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->joins_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          2, this->joins(static_cast<int>(i)), deterministic, target);
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->leaves_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          3, this->leaves(static_cast<int>(i)), deterministic, target);
    }
  
    // string room_name = 4;
    if (this->room_name().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->room_name().data(), static_cast<int>(this->room_name().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.room_name");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          4, this->room_name(), target);
    }
  
    // string group_id = 5;
    if (this->group_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->group_id().data(), static_cast<int>(this->group_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.group_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          5, this->group_id(), target);
    }
  
    // string user_id_one = 6;
    if (this->user_id_one().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_one().data(), static_cast<int>(this->user_id_one().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.user_id_one");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          6, this->user_id_one(), target);
    }
  
    // string user_id_two = 7;
    if (this->user_id_two().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id_two().data(), static_cast<int>(this->user_id_two().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.ChannelPresenceEvent.user_id_two");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          7, this->user_id_two(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.ChannelPresenceEvent)
    return target;
  }
  
  size_t ChannelPresenceEvent::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.ChannelPresenceEvent)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.realtime.UserPresence joins = 2;
    {
      unsigned int count = static_cast<unsigned int>(this->joins_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->joins(static_cast<int>(i)));
      }
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    {
      unsigned int count = static_cast<unsigned int>(this->leaves_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->leaves(static_cast<int>(i)));
      }
    }
  
    // string channel_id = 1;
    if (this->channel_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->channel_id());
    }
  
    // string room_name = 4;
    if (this->room_name().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->room_name());
    }
  
    // string group_id = 5;
    if (this->group_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->group_id());
    }
  
    // string user_id_one = 6;
    if (this->user_id_one().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->user_id_one());
    }
  
    // string user_id_two = 7;
    if (this->user_id_two().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->user_id_two());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void ChannelPresenceEvent::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.ChannelPresenceEvent)
    GOOGLE_DCHECK_NE(&from, this);
    const ChannelPresenceEvent* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const ChannelPresenceEvent>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.ChannelPresenceEvent)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.ChannelPresenceEvent)
      MergeFrom(*source);
    }
  }
  
  void ChannelPresenceEvent::MergeFrom(const ChannelPresenceEvent& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.ChannelPresenceEvent)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    joins_.MergeFrom(from.joins_);
    leaves_.MergeFrom(from.leaves_);
    if (from.channel_id().size() > 0) {
  
      channel_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.channel_id_);
    }
    if (from.room_name().size() > 0) {
  
      room_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.room_name_);
    }
    if (from.group_id().size() > 0) {
  
      group_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.group_id_);
    }
    if (from.user_id_one().size() > 0) {
  
      user_id_one_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_one_);
    }
    if (from.user_id_two().size() > 0) {
  
      user_id_two_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_two_);
    }
  }
  
  void ChannelPresenceEvent::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.ChannelPresenceEvent)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void ChannelPresenceEvent::CopyFrom(const ChannelPresenceEvent& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.ChannelPresenceEvent)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool ChannelPresenceEvent::IsInitialized() const {
    return true;
  }
  
  void ChannelPresenceEvent::Swap(ChannelPresenceEvent* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void ChannelPresenceEvent::InternalSwap(ChannelPresenceEvent* other) {
    using std::swap;
    CastToBase(&joins_)->InternalSwap(CastToBase(&other->joins_));
    CastToBase(&leaves_)->InternalSwap(CastToBase(&other->leaves_));
    channel_id_.Swap(&other->channel_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    room_name_.Swap(&other->room_name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    group_id_.Swap(&other->group_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    user_id_one_.Swap(&other->user_id_one_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    user_id_two_.Swap(&other->user_id_two_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata ChannelPresenceEvent::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  Error_ContextEntry_DoNotUse::Error_ContextEntry_DoNotUse() {}
  Error_ContextEntry_DoNotUse::Error_ContextEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
  void Error_ContextEntry_DoNotUse::MergeFrom(const Error_ContextEntry_DoNotUse& other) {
    MergeFromInternal(other);
  }
  ::google::protobuf::Metadata Error_ContextEntry_DoNotUse::GetMetadata() const {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[9];
  }
  void Error_ContextEntry_DoNotUse::MergeFrom(
      const ::google::protobuf::Message& other) {
    ::google::protobuf::Message::MergeFrom(other);
  }
  
  
  // ===================================================================
  
  void Error::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int Error::kCodeFieldNumber;
  const int Error::kMessageFieldNumber;
  const int Error::kContextFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  Error::Error()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Error.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.Error)
  }
  Error::Error(const Error& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    context_.MergeFrom(from.context_);
    message_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.message().size() > 0) {
      message_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.message_);
    }
    code_ = from.code_;
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.Error)
  }
  
  void Error::SharedCtor() {
    message_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    code_ = 0;
  }
  
  Error::~Error() {
    // @@protoc_insertion_point(destructor:nakama.realtime.Error)
    SharedDtor();
  }
  
  void Error::SharedDtor() {
    message_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void Error::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* Error::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const Error& Error::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Error.base);
    return *internal_default_instance();
  }
  
  
  void Error::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.Error)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    context_.Clear();
    message_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    code_ = 0;
    _internal_metadata_.Clear();
  }
  
  bool Error::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.Error)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // int32 code = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &code_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string message = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_message()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->message().data(), static_cast<int>(this->message().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Error.message"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // map<string, string> context = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            Error_ContextEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
                Error_ContextEntry_DoNotUse,
                ::std::string, ::std::string,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                0 >,
              ::google::protobuf::Map< ::std::string, ::std::string > > parser(&context_);
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, &parser));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.key().data(), static_cast<int>(parser.key().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Error.ContextEntry.key"));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.value().data(), static_cast<int>(parser.value().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Error.ContextEntry.value"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.Error)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.Error)
    return false;
  #undef DO_
  }
  
  void Error::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.Error)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // int32 code = 1;
    if (this->code() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->code(), output);
    }
  
    // string message = 2;
    if (this->message().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->message().data(), static_cast<int>(this->message().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Error.message");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        2, this->message(), output);
    }
  
    // map<string, string> context = 3;
    if (!this->context().empty()) {
      typedef ::google::protobuf::Map< ::std::string, ::std::string >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.Error.ContextEntry.key");
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->second.data(), static_cast<int>(p->second.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.Error.ContextEntry.value");
        }
      };
  
      if (output->IsSerializationDeterministic() &&
          this->context().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->context().size()]);
        typedef ::google::protobuf::Map< ::std::string, ::std::string >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->context().begin();
            it != this->context().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<Error_ContextEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(context_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              3, *entry, output);
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<Error_ContextEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->context().begin();
            it != this->context().end(); ++it) {
          entry.reset(context_.NewEntryWrapper(
              it->first, it->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              3, *entry, output);
          Utf8Check::Check(&*it);
        }
      }
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.Error)
  }
  
  ::google::protobuf::uint8* Error::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.Error)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // int32 code = 1;
    if (this->code() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->code(), target);
    }
  
    // string message = 2;
    if (this->message().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->message().data(), static_cast<int>(this->message().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Error.message");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          2, this->message(), target);
    }
  
    // map<string, string> context = 3;
    if (!this->context().empty()) {
      typedef ::google::protobuf::Map< ::std::string, ::std::string >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.Error.ContextEntry.key");
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->second.data(), static_cast<int>(p->second.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.Error.ContextEntry.value");
        }
      };
  
      if (deterministic &&
          this->context().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->context().size()]);
        typedef ::google::protobuf::Map< ::std::string, ::std::string >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->context().begin();
            it != this->context().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<Error_ContextEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(context_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         3, *entry, deterministic, target);
  ;
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<Error_ContextEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->context().begin();
            it != this->context().end(); ++it) {
          entry.reset(context_.NewEntryWrapper(
              it->first, it->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         3, *entry, deterministic, target);
  ;
          Utf8Check::Check(&*it);
        }
      }
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.Error)
    return target;
  }
  
  size_t Error::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.Error)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // map<string, string> context = 3;
    total_size += 1 *
        ::google::protobuf::internal::FromIntSize(this->context_size());
    {
      ::std::unique_ptr<Error_ContextEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
          it = this->context().begin();
          it != this->context().end(); ++it) {
        entry.reset(context_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    // string message = 2;
    if (this->message().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->message());
    }
  
    // int32 code = 1;
    if (this->code() != 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->code());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Error::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.Error)
    GOOGLE_DCHECK_NE(&from, this);
    const Error* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const Error>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.Error)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.Error)
      MergeFrom(*source);
    }
  }
  
  void Error::MergeFrom(const Error& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.Error)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    context_.MergeFrom(from.context_);
    if (from.message().size() > 0) {
  
      message_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.message_);
    }
    if (from.code() != 0) {
      set_code(from.code());
    }
  }
  
  void Error::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.Error)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Error::CopyFrom(const Error& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.Error)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Error::IsInitialized() const {
    return true;
  }
  
  void Error::Swap(Error* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void Error::InternalSwap(Error* other) {
    using std::swap;
    context_.Swap(&other->context_);
    message_.Swap(&other->message_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(code_, other->code_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata Error::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void Match::InitAsDefaultInstance() {
    ::nakama::realtime::_Match_default_instance_._instance.get_mutable()->label_ = const_cast< ::google::protobuf::StringValue*>(
        ::google::protobuf::StringValue::internal_default_instance());
    ::nakama::realtime::_Match_default_instance_._instance.get_mutable()->self_ = const_cast< ::nakama::realtime::UserPresence*>(
        ::nakama::realtime::UserPresence::internal_default_instance());
  }
  void Match::clear_label() {
    if (GetArenaNoVirtual() == NULL && label_ != NULL) {
      delete label_;
    }
    label_ = NULL;
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int Match::kMatchIdFieldNumber;
  const int Match::kAuthoritativeFieldNumber;
  const int Match::kLabelFieldNumber;
  const int Match::kSizeFieldNumber;
  const int Match::kPresencesFieldNumber;
  const int Match::kSelfFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  Match::Match()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Match.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.Match)
  }
  Match::Match(const Match& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        presences_(from.presences_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.match_id().size() > 0) {
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
    if (from.has_label()) {
      label_ = new ::google::protobuf::StringValue(*from.label_);
    } else {
      label_ = NULL;
    }
    if (from.has_self()) {
      self_ = new ::nakama::realtime::UserPresence(*from.self_);
    } else {
      self_ = NULL;
    }
    ::memcpy(&authoritative_, &from.authoritative_,
      static_cast<size_t>(reinterpret_cast<char*>(&size_) -
      reinterpret_cast<char*>(&authoritative_)) + sizeof(size_));
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.Match)
  }
  
  void Match::SharedCtor() {
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&label_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&size_) -
        reinterpret_cast<char*>(&label_)) + sizeof(size_));
  }
  
  Match::~Match() {
    // @@protoc_insertion_point(destructor:nakama.realtime.Match)
    SharedDtor();
  }
  
  void Match::SharedDtor() {
    match_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete label_;
    if (this != internal_default_instance()) delete self_;
  }
  
  void Match::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* Match::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const Match& Match::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Match.base);
    return *internal_default_instance();
  }
  
  
  void Match::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.Match)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    presences_.Clear();
    match_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == NULL && label_ != NULL) {
      delete label_;
    }
    label_ = NULL;
    if (GetArenaNoVirtual() == NULL && self_ != NULL) {
      delete self_;
    }
    self_ = NULL;
    ::memset(&authoritative_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&size_) -
        reinterpret_cast<char*>(&authoritative_)) + sizeof(size_));
    _internal_metadata_.Clear();
  }
  
  bool Match::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.Match)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string match_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_match_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->match_id().data(), static_cast<int>(this->match_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Match.match_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // bool authoritative = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                   input, &authoritative_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .google.protobuf.StringValue label = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_label()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // int32 size = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &size_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence presences = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_presences()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.UserPresence self = 6;
        case 6: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_self()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.Match)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.Match)
    return false;
  #undef DO_
  }
  
  void Match::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.Match)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Match.match_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->match_id(), output);
    }
  
    // bool authoritative = 2;
    if (this->authoritative() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteBool(2, this->authoritative(), output);
    }
  
    // .google.protobuf.StringValue label = 3;
    if (this->has_label()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        3, this->_internal_label(), output);
    }
  
    // int32 size = 4;
    if (this->size() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->size(), output);
    }
  
    // repeated .nakama.realtime.UserPresence presences = 5;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->presences_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        5,
        this->presences(static_cast<int>(i)),
        output);
    }
  
    // .nakama.realtime.UserPresence self = 6;
    if (this->has_self()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        6, this->_internal_self(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.Match)
  }
  
  ::google::protobuf::uint8* Match::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.Match)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Match.match_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->match_id(), target);
    }
  
    // bool authoritative = 2;
    if (this->authoritative() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(2, this->authoritative(), target);
    }
  
    // .google.protobuf.StringValue label = 3;
    if (this->has_label()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          3, this->_internal_label(), deterministic, target);
    }
  
    // int32 size = 4;
    if (this->size() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(4, this->size(), target);
    }
  
    // repeated .nakama.realtime.UserPresence presences = 5;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->presences_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          5, this->presences(static_cast<int>(i)), deterministic, target);
    }
  
    // .nakama.realtime.UserPresence self = 6;
    if (this->has_self()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          6, this->_internal_self(), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.Match)
    return target;
  }
  
  size_t Match::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.Match)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.realtime.UserPresence presences = 5;
    {
      unsigned int count = static_cast<unsigned int>(this->presences_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->presences(static_cast<int>(i)));
      }
    }
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->match_id());
    }
  
    // .google.protobuf.StringValue label = 3;
    if (this->has_label()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *label_);
    }
  
    // .nakama.realtime.UserPresence self = 6;
    if (this->has_self()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *self_);
    }
  
    // bool authoritative = 2;
    if (this->authoritative() != 0) {
      total_size += 1 + 1;
    }
  
    // int32 size = 4;
    if (this->size() != 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->size());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Match::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.Match)
    GOOGLE_DCHECK_NE(&from, this);
    const Match* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const Match>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.Match)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.Match)
      MergeFrom(*source);
    }
  }
  
  void Match::MergeFrom(const Match& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.Match)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    presences_.MergeFrom(from.presences_);
    if (from.match_id().size() > 0) {
  
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
    if (from.has_label()) {
      mutable_label()->::google::protobuf::StringValue::MergeFrom(from.label());
    }
    if (from.has_self()) {
      mutable_self()->::nakama::realtime::UserPresence::MergeFrom(from.self());
    }
    if (from.authoritative() != 0) {
      set_authoritative(from.authoritative());
    }
    if (from.size() != 0) {
      set_size(from.size());
    }
  }
  
  void Match::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.Match)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Match::CopyFrom(const Match& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.Match)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Match::IsInitialized() const {
    return true;
  }
  
  void Match::Swap(Match* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void Match::InternalSwap(Match* other) {
    using std::swap;
    CastToBase(&presences_)->InternalSwap(CastToBase(&other->presences_));
    match_id_.Swap(&other->match_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(label_, other->label_);
    swap(self_, other->self_);
    swap(authoritative_, other->authoritative_);
    swap(size_, other->size_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata Match::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void MatchCreate::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchCreate::MatchCreate()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchCreate.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchCreate)
  }
  MatchCreate::MatchCreate(const MatchCreate& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchCreate)
  }
  
  void MatchCreate::SharedCtor() {
  }
  
  MatchCreate::~MatchCreate() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchCreate)
    SharedDtor();
  }
  
  void MatchCreate::SharedDtor() {
  }
  
  void MatchCreate::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchCreate::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchCreate& MatchCreate::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchCreate.base);
    return *internal_default_instance();
  }
  
  
  void MatchCreate::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchCreate)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    _internal_metadata_.Clear();
  }
  
  bool MatchCreate::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchCreate)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
    handle_unusual:
      if (tag == 0) {
        goto success;
      }
      DO_(::google::protobuf::internal::WireFormat::SkipField(
            input, tag, _internal_metadata_.mutable_unknown_fields()));
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchCreate)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchCreate)
    return false;
  #undef DO_
  }
  
  void MatchCreate::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchCreate)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchCreate)
  }
  
  ::google::protobuf::uint8* MatchCreate::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchCreate)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchCreate)
    return target;
  }
  
  size_t MatchCreate::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchCreate)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchCreate::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchCreate)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchCreate* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchCreate>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchCreate)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchCreate)
      MergeFrom(*source);
    }
  }
  
  void MatchCreate::MergeFrom(const MatchCreate& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchCreate)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
  }
  
  void MatchCreate::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchCreate)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchCreate::CopyFrom(const MatchCreate& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchCreate)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchCreate::IsInitialized() const {
    return true;
  }
  
  void MatchCreate::Swap(MatchCreate* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchCreate::InternalSwap(MatchCreate* other) {
    using std::swap;
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchCreate::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void MatchData::InitAsDefaultInstance() {
    ::nakama::realtime::_MatchData_default_instance_._instance.get_mutable()->presence_ = const_cast< ::nakama::realtime::UserPresence*>(
        ::nakama::realtime::UserPresence::internal_default_instance());
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchData::kMatchIdFieldNumber;
  const int MatchData::kPresenceFieldNumber;
  const int MatchData::kOpCodeFieldNumber;
  const int MatchData::kDataFieldNumber;
  const int MatchData::kReliableFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchData::MatchData()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchData.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchData)
  }
  MatchData::MatchData(const MatchData& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.match_id().size() > 0) {
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
    data_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.data().size() > 0) {
      data_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.data_);
    }
    if (from.has_presence()) {
      presence_ = new ::nakama::realtime::UserPresence(*from.presence_);
    } else {
      presence_ = NULL;
    }
    ::memcpy(&op_code_, &from.op_code_,
      static_cast<size_t>(reinterpret_cast<char*>(&reliable_) -
      reinterpret_cast<char*>(&op_code_)) + sizeof(reliable_));
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchData)
  }
  
  void MatchData::SharedCtor() {
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    data_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&presence_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&reliable_) -
        reinterpret_cast<char*>(&presence_)) + sizeof(reliable_));
  }
  
  MatchData::~MatchData() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchData)
    SharedDtor();
  }
  
  void MatchData::SharedDtor() {
    match_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    data_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete presence_;
  }
  
  void MatchData::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchData::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchData& MatchData::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchData.base);
    return *internal_default_instance();
  }
  
  
  void MatchData::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchData)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    match_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    data_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == NULL && presence_ != NULL) {
      delete presence_;
    }
    presence_ = NULL;
    ::memset(&op_code_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&reliable_) -
        reinterpret_cast<char*>(&op_code_)) + sizeof(reliable_));
    _internal_metadata_.Clear();
  }
  
  bool MatchData::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchData)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string match_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_match_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->match_id().data(), static_cast<int>(this->match_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchData.match_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.UserPresence presence = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_presence()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // int64 op_code = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &op_code_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // bytes data = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                  input, this->mutable_data()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // bool reliable = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                   input, &reliable_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchData)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchData)
    return false;
  #undef DO_
  }
  
  void MatchData::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchData)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchData.match_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->match_id(), output);
    }
  
    // .nakama.realtime.UserPresence presence = 2;
    if (this->has_presence()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        2, this->_internal_presence(), output);
    }
  
    // int64 op_code = 3;
    if (this->op_code() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(3, this->op_code(), output);
    }
  
    // bytes data = 4;
    if (this->data().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
        4, this->data(), output);
    }
  
    // bool reliable = 5;
    if (this->reliable() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteBool(5, this->reliable(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchData)
  }
  
  ::google::protobuf::uint8* MatchData::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchData)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchData.match_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->match_id(), target);
    }
  
    // .nakama.realtime.UserPresence presence = 2;
    if (this->has_presence()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          2, this->_internal_presence(), deterministic, target);
    }
  
    // int64 op_code = 3;
    if (this->op_code() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(3, this->op_code(), target);
    }
  
    // bytes data = 4;
    if (this->data().size() > 0) {
      target =
        ::google::protobuf::internal::WireFormatLite::WriteBytesToArray(
          4, this->data(), target);
    }
  
    // bool reliable = 5;
    if (this->reliable() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(5, this->reliable(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchData)
    return target;
  }
  
  size_t MatchData::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchData)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->match_id());
    }
  
    // bytes data = 4;
    if (this->data().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::BytesSize(
          this->data());
    }
  
    // .nakama.realtime.UserPresence presence = 2;
    if (this->has_presence()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *presence_);
    }
  
    // int64 op_code = 3;
    if (this->op_code() != 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int64Size(
          this->op_code());
    }
  
    // bool reliable = 5;
    if (this->reliable() != 0) {
      total_size += 1 + 1;
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchData::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchData)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchData* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchData>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchData)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchData)
      MergeFrom(*source);
    }
  }
  
  void MatchData::MergeFrom(const MatchData& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchData)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.match_id().size() > 0) {
  
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
    if (from.data().size() > 0) {
  
      data_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.data_);
    }
    if (from.has_presence()) {
      mutable_presence()->::nakama::realtime::UserPresence::MergeFrom(from.presence());
    }
    if (from.op_code() != 0) {
      set_op_code(from.op_code());
    }
    if (from.reliable() != 0) {
      set_reliable(from.reliable());
    }
  }
  
  void MatchData::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchData)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchData::CopyFrom(const MatchData& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchData)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchData::IsInitialized() const {
    return true;
  }
  
  void MatchData::Swap(MatchData* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchData::InternalSwap(MatchData* other) {
    using std::swap;
    match_id_.Swap(&other->match_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    data_.Swap(&other->data_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(presence_, other->presence_);
    swap(op_code_, other->op_code_);
    swap(reliable_, other->reliable_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchData::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void MatchDataSend::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchDataSend::kMatchIdFieldNumber;
  const int MatchDataSend::kOpCodeFieldNumber;
  const int MatchDataSend::kDataFieldNumber;
  const int MatchDataSend::kPresencesFieldNumber;
  const int MatchDataSend::kReliableFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchDataSend::MatchDataSend()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchDataSend.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchDataSend)
  }
  MatchDataSend::MatchDataSend(const MatchDataSend& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        presences_(from.presences_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.match_id().size() > 0) {
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
    data_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.data().size() > 0) {
      data_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.data_);
    }
    ::memcpy(&op_code_, &from.op_code_,
      static_cast<size_t>(reinterpret_cast<char*>(&reliable_) -
      reinterpret_cast<char*>(&op_code_)) + sizeof(reliable_));
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchDataSend)
  }
  
  void MatchDataSend::SharedCtor() {
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    data_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&op_code_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&reliable_) -
        reinterpret_cast<char*>(&op_code_)) + sizeof(reliable_));
  }
  
  MatchDataSend::~MatchDataSend() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchDataSend)
    SharedDtor();
  }
  
  void MatchDataSend::SharedDtor() {
    match_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    data_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void MatchDataSend::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchDataSend::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchDataSend& MatchDataSend::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchDataSend.base);
    return *internal_default_instance();
  }
  
  
  void MatchDataSend::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchDataSend)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    presences_.Clear();
    match_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    data_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&op_code_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&reliable_) -
        reinterpret_cast<char*>(&op_code_)) + sizeof(reliable_));
    _internal_metadata_.Clear();
  }
  
  bool MatchDataSend::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchDataSend)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string match_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_match_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->match_id().data(), static_cast<int>(this->match_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchDataSend.match_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // int64 op_code = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &op_code_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // bytes data = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                  input, this->mutable_data()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence presences = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_presences()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // bool reliable = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                   input, &reliable_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchDataSend)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchDataSend)
    return false;
  #undef DO_
  }
  
  void MatchDataSend::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchDataSend)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchDataSend.match_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->match_id(), output);
    }
  
    // int64 op_code = 2;
    if (this->op_code() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->op_code(), output);
    }
  
    // bytes data = 3;
    if (this->data().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
        3, this->data(), output);
    }
  
    // repeated .nakama.realtime.UserPresence presences = 4;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->presences_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        4,
        this->presences(static_cast<int>(i)),
        output);
    }
  
    // bool reliable = 5;
    if (this->reliable() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteBool(5, this->reliable(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchDataSend)
  }
  
  ::google::protobuf::uint8* MatchDataSend::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchDataSend)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchDataSend.match_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->match_id(), target);
    }
  
    // int64 op_code = 2;
    if (this->op_code() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(2, this->op_code(), target);
    }
  
    // bytes data = 3;
    if (this->data().size() > 0) {
      target =
        ::google::protobuf::internal::WireFormatLite::WriteBytesToArray(
          3, this->data(), target);
    }
  
    // repeated .nakama.realtime.UserPresence presences = 4;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->presences_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          4, this->presences(static_cast<int>(i)), deterministic, target);
    }
  
    // bool reliable = 5;
    if (this->reliable() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(5, this->reliable(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchDataSend)
    return target;
  }
  
  size_t MatchDataSend::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchDataSend)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.realtime.UserPresence presences = 4;
    {
      unsigned int count = static_cast<unsigned int>(this->presences_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->presences(static_cast<int>(i)));
      }
    }
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->match_id());
    }
  
    // bytes data = 3;
    if (this->data().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::BytesSize(
          this->data());
    }
  
    // int64 op_code = 2;
    if (this->op_code() != 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int64Size(
          this->op_code());
    }
  
    // bool reliable = 5;
    if (this->reliable() != 0) {
      total_size += 1 + 1;
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchDataSend::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchDataSend)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchDataSend* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchDataSend>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchDataSend)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchDataSend)
      MergeFrom(*source);
    }
  }
  
  void MatchDataSend::MergeFrom(const MatchDataSend& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchDataSend)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    presences_.MergeFrom(from.presences_);
    if (from.match_id().size() > 0) {
  
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
    if (from.data().size() > 0) {
  
      data_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.data_);
    }
    if (from.op_code() != 0) {
      set_op_code(from.op_code());
    }
    if (from.reliable() != 0) {
      set_reliable(from.reliable());
    }
  }
  
  void MatchDataSend::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchDataSend)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchDataSend::CopyFrom(const MatchDataSend& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchDataSend)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchDataSend::IsInitialized() const {
    return true;
  }
  
  void MatchDataSend::Swap(MatchDataSend* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchDataSend::InternalSwap(MatchDataSend* other) {
    using std::swap;
    CastToBase(&presences_)->InternalSwap(CastToBase(&other->presences_));
    match_id_.Swap(&other->match_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    data_.Swap(&other->data_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(op_code_, other->op_code_);
    swap(reliable_, other->reliable_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchDataSend::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  MatchJoin_MetadataEntry_DoNotUse::MatchJoin_MetadataEntry_DoNotUse() {}
  MatchJoin_MetadataEntry_DoNotUse::MatchJoin_MetadataEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
  void MatchJoin_MetadataEntry_DoNotUse::MergeFrom(const MatchJoin_MetadataEntry_DoNotUse& other) {
    MergeFromInternal(other);
  }
  ::google::protobuf::Metadata MatchJoin_MetadataEntry_DoNotUse::GetMetadata() const {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[15];
  }
  void MatchJoin_MetadataEntry_DoNotUse::MergeFrom(
      const ::google::protobuf::Message& other) {
    ::google::protobuf::Message::MergeFrom(other);
  }
  
  
  // ===================================================================
  
  void MatchJoin::InitAsDefaultInstance() {
    ::nakama::realtime::_MatchJoin_default_instance_.match_id_.UnsafeSetDefault(
        &::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::nakama::realtime::_MatchJoin_default_instance_.token_.UnsafeSetDefault(
        &::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchJoin::kMatchIdFieldNumber;
  const int MatchJoin::kTokenFieldNumber;
  const int MatchJoin::kMetadataFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchJoin::MatchJoin()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchJoin.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchJoin)
  }
  MatchJoin::MatchJoin(const MatchJoin& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    metadata_.MergeFrom(from.metadata_);
    clear_has_id();
    switch (from.id_case()) {
      case kMatchId: {
        set_match_id(from.match_id());
        break;
      }
      case kToken: {
        set_token(from.token());
        break;
      }
      case ID_NOT_SET: {
        break;
      }
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchJoin)
  }
  
  void MatchJoin::SharedCtor() {
    clear_has_id();
  }
  
  MatchJoin::~MatchJoin() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchJoin)
    SharedDtor();
  }
  
  void MatchJoin::SharedDtor() {
    if (has_id()) {
      clear_id();
    }
  }
  
  void MatchJoin::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchJoin::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchJoin& MatchJoin::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchJoin.base);
    return *internal_default_instance();
  }
  
  
  void MatchJoin::clear_id() {
  // @@protoc_insertion_point(one_of_clear_start:nakama.realtime.MatchJoin)
    switch (id_case()) {
      case kMatchId: {
        id_.match_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
        break;
      }
      case kToken: {
        id_.token_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
        break;
      }
      case ID_NOT_SET: {
        break;
      }
    }
    _oneof_case_[0] = ID_NOT_SET;
  }
  
  
  void MatchJoin::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchJoin)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    metadata_.Clear();
    clear_id();
    _internal_metadata_.Clear();
  }
  
  bool MatchJoin::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchJoin)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string match_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_match_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->match_id().data(), static_cast<int>(this->match_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchJoin.match_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string token = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_token()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->token().data(), static_cast<int>(this->token().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchJoin.token"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // map<string, string> metadata = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            MatchJoin_MetadataEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
                MatchJoin_MetadataEntry_DoNotUse,
                ::std::string, ::std::string,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                0 >,
              ::google::protobuf::Map< ::std::string, ::std::string > > parser(&metadata_);
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, &parser));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.key().data(), static_cast<int>(parser.key().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchJoin.MetadataEntry.key"));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.value().data(), static_cast<int>(parser.value().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchJoin.MetadataEntry.value"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchJoin)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchJoin)
    return false;
  #undef DO_
  }
  
  void MatchJoin::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchJoin)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (has_match_id()) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchJoin.match_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->match_id(), output);
    }
  
    // string token = 2;
    if (has_token()) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->token().data(), static_cast<int>(this->token().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchJoin.token");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        2, this->token(), output);
    }
  
    // map<string, string> metadata = 3;
    if (!this->metadata().empty()) {
      typedef ::google::protobuf::Map< ::std::string, ::std::string >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchJoin.MetadataEntry.key");
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->second.data(), static_cast<int>(p->second.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchJoin.MetadataEntry.value");
        }
      };
  
      if (output->IsSerializationDeterministic() &&
          this->metadata().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->metadata().size()]);
        typedef ::google::protobuf::Map< ::std::string, ::std::string >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->metadata().begin();
            it != this->metadata().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchJoin_MetadataEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(metadata_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              3, *entry, output);
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchJoin_MetadataEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->metadata().begin();
            it != this->metadata().end(); ++it) {
          entry.reset(metadata_.NewEntryWrapper(
              it->first, it->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              3, *entry, output);
          Utf8Check::Check(&*it);
        }
      }
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchJoin)
  }
  
  ::google::protobuf::uint8* MatchJoin::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchJoin)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (has_match_id()) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchJoin.match_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->match_id(), target);
    }
  
    // string token = 2;
    if (has_token()) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->token().data(), static_cast<int>(this->token().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchJoin.token");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          2, this->token(), target);
    }
  
    // map<string, string> metadata = 3;
    if (!this->metadata().empty()) {
      typedef ::google::protobuf::Map< ::std::string, ::std::string >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchJoin.MetadataEntry.key");
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->second.data(), static_cast<int>(p->second.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchJoin.MetadataEntry.value");
        }
      };
  
      if (deterministic &&
          this->metadata().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->metadata().size()]);
        typedef ::google::protobuf::Map< ::std::string, ::std::string >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->metadata().begin();
            it != this->metadata().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchJoin_MetadataEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(metadata_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         3, *entry, deterministic, target);
  ;
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchJoin_MetadataEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->metadata().begin();
            it != this->metadata().end(); ++it) {
          entry.reset(metadata_.NewEntryWrapper(
              it->first, it->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         3, *entry, deterministic, target);
  ;
          Utf8Check::Check(&*it);
        }
      }
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchJoin)
    return target;
  }
  
  size_t MatchJoin::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchJoin)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // map<string, string> metadata = 3;
    total_size += 1 *
        ::google::protobuf::internal::FromIntSize(this->metadata_size());
    {
      ::std::unique_ptr<MatchJoin_MetadataEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
          it = this->metadata().begin();
          it != this->metadata().end(); ++it) {
        entry.reset(metadata_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    switch (id_case()) {
      // string match_id = 1;
      case kMatchId: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->match_id());
        break;
      }
      // string token = 2;
      case kToken: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->token());
        break;
      }
      case ID_NOT_SET: {
        break;
      }
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchJoin::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchJoin)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchJoin* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchJoin>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchJoin)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchJoin)
      MergeFrom(*source);
    }
  }
  
  void MatchJoin::MergeFrom(const MatchJoin& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchJoin)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    metadata_.MergeFrom(from.metadata_);
    switch (from.id_case()) {
      case kMatchId: {
        set_match_id(from.match_id());
        break;
      }
      case kToken: {
        set_token(from.token());
        break;
      }
      case ID_NOT_SET: {
        break;
      }
    }
  }
  
  void MatchJoin::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchJoin)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchJoin::CopyFrom(const MatchJoin& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchJoin)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchJoin::IsInitialized() const {
    return true;
  }
  
  void MatchJoin::Swap(MatchJoin* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchJoin::InternalSwap(MatchJoin* other) {
    using std::swap;
    metadata_.Swap(&other->metadata_);
    swap(id_, other->id_);
    swap(_oneof_case_[0], other->_oneof_case_[0]);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchJoin::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void MatchLeave::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchLeave::kMatchIdFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchLeave::MatchLeave()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchLeave.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchLeave)
  }
  MatchLeave::MatchLeave(const MatchLeave& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.match_id().size() > 0) {
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchLeave)
  }
  
  void MatchLeave::SharedCtor() {
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  MatchLeave::~MatchLeave() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchLeave)
    SharedDtor();
  }
  
  void MatchLeave::SharedDtor() {
    match_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void MatchLeave::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchLeave::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchLeave& MatchLeave::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchLeave.base);
    return *internal_default_instance();
  }
  
  
  void MatchLeave::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchLeave)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    match_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    _internal_metadata_.Clear();
  }
  
  bool MatchLeave::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchLeave)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string match_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_match_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->match_id().data(), static_cast<int>(this->match_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchLeave.match_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchLeave)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchLeave)
    return false;
  #undef DO_
  }
  
  void MatchLeave::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchLeave)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchLeave.match_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->match_id(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchLeave)
  }
  
  ::google::protobuf::uint8* MatchLeave::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchLeave)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchLeave.match_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->match_id(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchLeave)
    return target;
  }
  
  size_t MatchLeave::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchLeave)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->match_id());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchLeave::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchLeave)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchLeave* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchLeave>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchLeave)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchLeave)
      MergeFrom(*source);
    }
  }
  
  void MatchLeave::MergeFrom(const MatchLeave& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchLeave)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.match_id().size() > 0) {
  
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
  }
  
  void MatchLeave::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchLeave)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchLeave::CopyFrom(const MatchLeave& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchLeave)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchLeave::IsInitialized() const {
    return true;
  }
  
  void MatchLeave::Swap(MatchLeave* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchLeave::InternalSwap(MatchLeave* other) {
    using std::swap;
    match_id_.Swap(&other->match_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchLeave::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void MatchPresenceEvent::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchPresenceEvent::kMatchIdFieldNumber;
  const int MatchPresenceEvent::kJoinsFieldNumber;
  const int MatchPresenceEvent::kLeavesFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchPresenceEvent::MatchPresenceEvent()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchPresenceEvent.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchPresenceEvent)
  }
  MatchPresenceEvent::MatchPresenceEvent(const MatchPresenceEvent& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        joins_(from.joins_),
        leaves_(from.leaves_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.match_id().size() > 0) {
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchPresenceEvent)
  }
  
  void MatchPresenceEvent::SharedCtor() {
    match_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  MatchPresenceEvent::~MatchPresenceEvent() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchPresenceEvent)
    SharedDtor();
  }
  
  void MatchPresenceEvent::SharedDtor() {
    match_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void MatchPresenceEvent::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchPresenceEvent::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchPresenceEvent& MatchPresenceEvent::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchPresenceEvent.base);
    return *internal_default_instance();
  }
  
  
  void MatchPresenceEvent::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    joins_.Clear();
    leaves_.Clear();
    match_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    _internal_metadata_.Clear();
  }
  
  bool MatchPresenceEvent::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchPresenceEvent)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string match_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_match_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->match_id().data(), static_cast<int>(this->match_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchPresenceEvent.match_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence joins = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_joins()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence leaves = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_leaves()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchPresenceEvent)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchPresenceEvent)
    return false;
  #undef DO_
  }
  
  void MatchPresenceEvent::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchPresenceEvent.match_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->match_id(), output);
    }
  
    // repeated .nakama.realtime.UserPresence joins = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->joins_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        2,
        this->joins(static_cast<int>(i)),
        output);
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->leaves_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        3,
        this->leaves(static_cast<int>(i)),
        output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchPresenceEvent)
  }
  
  ::google::protobuf::uint8* MatchPresenceEvent::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchPresenceEvent.match_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->match_id(), target);
    }
  
    // repeated .nakama.realtime.UserPresence joins = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->joins_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          2, this->joins(static_cast<int>(i)), deterministic, target);
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->leaves_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          3, this->leaves(static_cast<int>(i)), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchPresenceEvent)
    return target;
  }
  
  size_t MatchPresenceEvent::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchPresenceEvent)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.realtime.UserPresence joins = 2;
    {
      unsigned int count = static_cast<unsigned int>(this->joins_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->joins(static_cast<int>(i)));
      }
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    {
      unsigned int count = static_cast<unsigned int>(this->leaves_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->leaves(static_cast<int>(i)));
      }
    }
  
    // string match_id = 1;
    if (this->match_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->match_id());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchPresenceEvent::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchPresenceEvent)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchPresenceEvent* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchPresenceEvent>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchPresenceEvent)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchPresenceEvent)
      MergeFrom(*source);
    }
  }
  
  void MatchPresenceEvent::MergeFrom(const MatchPresenceEvent& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchPresenceEvent)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    joins_.MergeFrom(from.joins_);
    leaves_.MergeFrom(from.leaves_);
    if (from.match_id().size() > 0) {
  
      match_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.match_id_);
    }
  }
  
  void MatchPresenceEvent::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchPresenceEvent)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchPresenceEvent::CopyFrom(const MatchPresenceEvent& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchPresenceEvent)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchPresenceEvent::IsInitialized() const {
    return true;
  }
  
  void MatchPresenceEvent::Swap(MatchPresenceEvent* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchPresenceEvent::InternalSwap(MatchPresenceEvent* other) {
    using std::swap;
    CastToBase(&joins_)->InternalSwap(CastToBase(&other->joins_));
    CastToBase(&leaves_)->InternalSwap(CastToBase(&other->leaves_));
    match_id_.Swap(&other->match_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchPresenceEvent::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  MatchmakerAdd_StringPropertiesEntry_DoNotUse::MatchmakerAdd_StringPropertiesEntry_DoNotUse() {}
  MatchmakerAdd_StringPropertiesEntry_DoNotUse::MatchmakerAdd_StringPropertiesEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
  void MatchmakerAdd_StringPropertiesEntry_DoNotUse::MergeFrom(const MatchmakerAdd_StringPropertiesEntry_DoNotUse& other) {
    MergeFromInternal(other);
  }
  ::google::protobuf::Metadata MatchmakerAdd_StringPropertiesEntry_DoNotUse::GetMetadata() const {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[19];
  }
  void MatchmakerAdd_StringPropertiesEntry_DoNotUse::MergeFrom(
      const ::google::protobuf::Message& other) {
    ::google::protobuf::Message::MergeFrom(other);
  }
  
  
  // ===================================================================
  
  MatchmakerAdd_NumericPropertiesEntry_DoNotUse::MatchmakerAdd_NumericPropertiesEntry_DoNotUse() {}
  MatchmakerAdd_NumericPropertiesEntry_DoNotUse::MatchmakerAdd_NumericPropertiesEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
  void MatchmakerAdd_NumericPropertiesEntry_DoNotUse::MergeFrom(const MatchmakerAdd_NumericPropertiesEntry_DoNotUse& other) {
    MergeFromInternal(other);
  }
  ::google::protobuf::Metadata MatchmakerAdd_NumericPropertiesEntry_DoNotUse::GetMetadata() const {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[20];
  }
  void MatchmakerAdd_NumericPropertiesEntry_DoNotUse::MergeFrom(
      const ::google::protobuf::Message& other) {
    ::google::protobuf::Message::MergeFrom(other);
  }
  
  
  // ===================================================================
  
  void MatchmakerAdd::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchmakerAdd::kMinCountFieldNumber;
  const int MatchmakerAdd::kMaxCountFieldNumber;
  const int MatchmakerAdd::kQueryFieldNumber;
  const int MatchmakerAdd::kStringPropertiesFieldNumber;
  const int MatchmakerAdd::kNumericPropertiesFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchmakerAdd::MatchmakerAdd()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerAdd.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchmakerAdd)
  }
  MatchmakerAdd::MatchmakerAdd(const MatchmakerAdd& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    string_properties_.MergeFrom(from.string_properties_);
    numeric_properties_.MergeFrom(from.numeric_properties_);
    query_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.query().size() > 0) {
      query_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.query_);
    }
    ::memcpy(&min_count_, &from.min_count_,
      static_cast<size_t>(reinterpret_cast<char*>(&max_count_) -
      reinterpret_cast<char*>(&min_count_)) + sizeof(max_count_));
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchmakerAdd)
  }
  
  void MatchmakerAdd::SharedCtor() {
    query_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&min_count_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&max_count_) -
        reinterpret_cast<char*>(&min_count_)) + sizeof(max_count_));
  }
  
  MatchmakerAdd::~MatchmakerAdd() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchmakerAdd)
    SharedDtor();
  }
  
  void MatchmakerAdd::SharedDtor() {
    query_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void MatchmakerAdd::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchmakerAdd::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchmakerAdd& MatchmakerAdd::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerAdd.base);
    return *internal_default_instance();
  }
  
  
  void MatchmakerAdd::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchmakerAdd)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    string_properties_.Clear();
    numeric_properties_.Clear();
    query_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&min_count_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&max_count_) -
        reinterpret_cast<char*>(&min_count_)) + sizeof(max_count_));
    _internal_metadata_.Clear();
  }
  
  bool MatchmakerAdd::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchmakerAdd)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // int32 min_count = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &min_count_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // int32 max_count = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &max_count_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string query = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_query()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->query().data(), static_cast<int>(this->query().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerAdd.query"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // map<string, string> string_properties = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            MatchmakerAdd_StringPropertiesEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
                MatchmakerAdd_StringPropertiesEntry_DoNotUse,
                ::std::string, ::std::string,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                0 >,
              ::google::protobuf::Map< ::std::string, ::std::string > > parser(&string_properties_);
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, &parser));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.key().data(), static_cast<int>(parser.key().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerAdd.StringPropertiesEntry.key"));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.value().data(), static_cast<int>(parser.value().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerAdd.StringPropertiesEntry.value"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // map<string, double> numeric_properties = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
            MatchmakerAdd_NumericPropertiesEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
                MatchmakerAdd_NumericPropertiesEntry_DoNotUse,
                ::std::string, double,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE,
                0 >,
              ::google::protobuf::Map< ::std::string, double > > parser(&numeric_properties_);
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, &parser));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.key().data(), static_cast<int>(parser.key().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerAdd.NumericPropertiesEntry.key"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchmakerAdd)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchmakerAdd)
    return false;
  #undef DO_
  }
  
  void MatchmakerAdd::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchmakerAdd)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // int32 min_count = 1;
    if (this->min_count() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->min_count(), output);
    }
  
    // int32 max_count = 2;
    if (this->max_count() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->max_count(), output);
    }
  
    // string query = 3;
    if (this->query().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->query().data(), static_cast<int>(this->query().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerAdd.query");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        3, this->query(), output);
    }
  
    // map<string, string> string_properties = 4;
    if (!this->string_properties().empty()) {
      typedef ::google::protobuf::Map< ::std::string, ::std::string >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerAdd.StringPropertiesEntry.key");
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->second.data(), static_cast<int>(p->second.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerAdd.StringPropertiesEntry.value");
        }
      };
  
      if (output->IsSerializationDeterministic() &&
          this->string_properties().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->string_properties().size()]);
        typedef ::google::protobuf::Map< ::std::string, ::std::string >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->string_properties().begin();
            it != this->string_properties().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchmakerAdd_StringPropertiesEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(string_properties_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              4, *entry, output);
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchmakerAdd_StringPropertiesEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->string_properties().begin();
            it != this->string_properties().end(); ++it) {
          entry.reset(string_properties_.NewEntryWrapper(
              it->first, it->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              4, *entry, output);
          Utf8Check::Check(&*it);
        }
      }
    }
  
    // map<string, double> numeric_properties = 5;
    if (!this->numeric_properties().empty()) {
      typedef ::google::protobuf::Map< ::std::string, double >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerAdd.NumericPropertiesEntry.key");
        }
      };
  
      if (output->IsSerializationDeterministic() &&
          this->numeric_properties().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->numeric_properties().size()]);
        typedef ::google::protobuf::Map< ::std::string, double >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, double >::const_iterator
            it = this->numeric_properties().begin();
            it != this->numeric_properties().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchmakerAdd_NumericPropertiesEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(numeric_properties_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              5, *entry, output);
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchmakerAdd_NumericPropertiesEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, double >::const_iterator
            it = this->numeric_properties().begin();
            it != this->numeric_properties().end(); ++it) {
          entry.reset(numeric_properties_.NewEntryWrapper(
              it->first, it->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              5, *entry, output);
          Utf8Check::Check(&*it);
        }
      }
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchmakerAdd)
  }
  
  ::google::protobuf::uint8* MatchmakerAdd::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchmakerAdd)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // int32 min_count = 1;
    if (this->min_count() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->min_count(), target);
    }
  
    // int32 max_count = 2;
    if (this->max_count() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->max_count(), target);
    }
  
    // string query = 3;
    if (this->query().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->query().data(), static_cast<int>(this->query().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerAdd.query");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          3, this->query(), target);
    }
  
    // map<string, string> string_properties = 4;
    if (!this->string_properties().empty()) {
      typedef ::google::protobuf::Map< ::std::string, ::std::string >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerAdd.StringPropertiesEntry.key");
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->second.data(), static_cast<int>(p->second.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerAdd.StringPropertiesEntry.value");
        }
      };
  
      if (deterministic &&
          this->string_properties().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->string_properties().size()]);
        typedef ::google::protobuf::Map< ::std::string, ::std::string >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->string_properties().begin();
            it != this->string_properties().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchmakerAdd_StringPropertiesEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(string_properties_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         4, *entry, deterministic, target);
  ;
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchmakerAdd_StringPropertiesEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->string_properties().begin();
            it != this->string_properties().end(); ++it) {
          entry.reset(string_properties_.NewEntryWrapper(
              it->first, it->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         4, *entry, deterministic, target);
  ;
          Utf8Check::Check(&*it);
        }
      }
    }
  
    // map<string, double> numeric_properties = 5;
    if (!this->numeric_properties().empty()) {
      typedef ::google::protobuf::Map< ::std::string, double >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerAdd.NumericPropertiesEntry.key");
        }
      };
  
      if (deterministic &&
          this->numeric_properties().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->numeric_properties().size()]);
        typedef ::google::protobuf::Map< ::std::string, double >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, double >::const_iterator
            it = this->numeric_properties().begin();
            it != this->numeric_properties().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchmakerAdd_NumericPropertiesEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(numeric_properties_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         5, *entry, deterministic, target);
  ;
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchmakerAdd_NumericPropertiesEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, double >::const_iterator
            it = this->numeric_properties().begin();
            it != this->numeric_properties().end(); ++it) {
          entry.reset(numeric_properties_.NewEntryWrapper(
              it->first, it->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         5, *entry, deterministic, target);
  ;
          Utf8Check::Check(&*it);
        }
      }
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchmakerAdd)
    return target;
  }
  
  size_t MatchmakerAdd::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchmakerAdd)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // map<string, string> string_properties = 4;
    total_size += 1 *
        ::google::protobuf::internal::FromIntSize(this->string_properties_size());
    {
      ::std::unique_ptr<MatchmakerAdd_StringPropertiesEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
          it = this->string_properties().begin();
          it != this->string_properties().end(); ++it) {
        entry.reset(string_properties_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    // map<string, double> numeric_properties = 5;
    total_size += 1 *
        ::google::protobuf::internal::FromIntSize(this->numeric_properties_size());
    {
      ::std::unique_ptr<MatchmakerAdd_NumericPropertiesEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, double >::const_iterator
          it = this->numeric_properties().begin();
          it != this->numeric_properties().end(); ++it) {
        entry.reset(numeric_properties_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    // string query = 3;
    if (this->query().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->query());
    }
  
    // int32 min_count = 1;
    if (this->min_count() != 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->min_count());
    }
  
    // int32 max_count = 2;
    if (this->max_count() != 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->max_count());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchmakerAdd::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchmakerAdd)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchmakerAdd* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchmakerAdd>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchmakerAdd)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchmakerAdd)
      MergeFrom(*source);
    }
  }
  
  void MatchmakerAdd::MergeFrom(const MatchmakerAdd& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchmakerAdd)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    string_properties_.MergeFrom(from.string_properties_);
    numeric_properties_.MergeFrom(from.numeric_properties_);
    if (from.query().size() > 0) {
  
      query_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.query_);
    }
    if (from.min_count() != 0) {
      set_min_count(from.min_count());
    }
    if (from.max_count() != 0) {
      set_max_count(from.max_count());
    }
  }
  
  void MatchmakerAdd::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchmakerAdd)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchmakerAdd::CopyFrom(const MatchmakerAdd& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchmakerAdd)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchmakerAdd::IsInitialized() const {
    return true;
  }
  
  void MatchmakerAdd::Swap(MatchmakerAdd* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchmakerAdd::InternalSwap(MatchmakerAdd* other) {
    using std::swap;
    string_properties_.Swap(&other->string_properties_);
    numeric_properties_.Swap(&other->numeric_properties_);
    query_.Swap(&other->query_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(min_count_, other->min_count_);
    swap(max_count_, other->max_count_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchmakerAdd::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse() {}
  MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
  void MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse::MergeFrom(const MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse& other) {
    MergeFromInternal(other);
  }
  ::google::protobuf::Metadata MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse::GetMetadata() const {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[22];
  }
  void MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse::MergeFrom(
      const ::google::protobuf::Message& other) {
    ::google::protobuf::Message::MergeFrom(other);
  }
  
  
  // ===================================================================
  
  MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse() {}
  MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
  void MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse::MergeFrom(const MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse& other) {
    MergeFromInternal(other);
  }
  ::google::protobuf::Metadata MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse::GetMetadata() const {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[23];
  }
  void MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse::MergeFrom(
      const ::google::protobuf::Message& other) {
    ::google::protobuf::Message::MergeFrom(other);
  }
  
  
  // ===================================================================
  
  void MatchmakerMatched_MatchmakerUser::InitAsDefaultInstance() {
    ::nakama::realtime::_MatchmakerMatched_MatchmakerUser_default_instance_._instance.get_mutable()->presence_ = const_cast< ::nakama::realtime::UserPresence*>(
        ::nakama::realtime::UserPresence::internal_default_instance());
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchmakerMatched_MatchmakerUser::kPresenceFieldNumber;
  const int MatchmakerMatched_MatchmakerUser::kStringPropertiesFieldNumber;
  const int MatchmakerMatched_MatchmakerUser::kNumericPropertiesFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchmakerMatched_MatchmakerUser::MatchmakerMatched_MatchmakerUser()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerMatched_MatchmakerUser.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchmakerMatched.MatchmakerUser)
  }
  MatchmakerMatched_MatchmakerUser::MatchmakerMatched_MatchmakerUser(const MatchmakerMatched_MatchmakerUser& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    string_properties_.MergeFrom(from.string_properties_);
    numeric_properties_.MergeFrom(from.numeric_properties_);
    if (from.has_presence()) {
      presence_ = new ::nakama::realtime::UserPresence(*from.presence_);
    } else {
      presence_ = NULL;
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchmakerMatched.MatchmakerUser)
  }
  
  void MatchmakerMatched_MatchmakerUser::SharedCtor() {
    presence_ = NULL;
  }
  
  MatchmakerMatched_MatchmakerUser::~MatchmakerMatched_MatchmakerUser() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    SharedDtor();
  }
  
  void MatchmakerMatched_MatchmakerUser::SharedDtor() {
    if (this != internal_default_instance()) delete presence_;
  }
  
  void MatchmakerMatched_MatchmakerUser::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchmakerMatched_MatchmakerUser::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchmakerMatched_MatchmakerUser& MatchmakerMatched_MatchmakerUser::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerMatched_MatchmakerUser.base);
    return *internal_default_instance();
  }
  
  
  void MatchmakerMatched_MatchmakerUser::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    string_properties_.Clear();
    numeric_properties_.Clear();
    if (GetArenaNoVirtual() == NULL && presence_ != NULL) {
      delete presence_;
    }
    presence_ = NULL;
    _internal_metadata_.Clear();
  }
  
  bool MatchmakerMatched_MatchmakerUser::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // .nakama.realtime.UserPresence presence = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_presence()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // map<string, string> string_properties = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
            MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
                MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse,
                ::std::string, ::std::string,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                0 >,
              ::google::protobuf::Map< ::std::string, ::std::string > > parser(&string_properties_);
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, &parser));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.key().data(), static_cast<int>(parser.key().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry.key"));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.value().data(), static_cast<int>(parser.value().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry.value"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // map<string, double> numeric_properties = 6;
        case 6: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
            MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
                MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse,
                ::std::string, double,
                ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
                ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE,
                0 >,
              ::google::protobuf::Map< ::std::string, double > > parser(&numeric_properties_);
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, &parser));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              parser.key().data(), static_cast<int>(parser.key().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerMatched.MatchmakerUser.NumericPropertiesEntry.key"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    return false;
  #undef DO_
  }
  
  void MatchmakerMatched_MatchmakerUser::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // .nakama.realtime.UserPresence presence = 1;
    if (this->has_presence()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        1, this->_internal_presence(), output);
    }
  
    // map<string, string> string_properties = 5;
    if (!this->string_properties().empty()) {
      typedef ::google::protobuf::Map< ::std::string, ::std::string >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry.key");
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->second.data(), static_cast<int>(p->second.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry.value");
        }
      };
  
      if (output->IsSerializationDeterministic() &&
          this->string_properties().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->string_properties().size()]);
        typedef ::google::protobuf::Map< ::std::string, ::std::string >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->string_properties().begin();
            it != this->string_properties().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(string_properties_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              5, *entry, output);
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->string_properties().begin();
            it != this->string_properties().end(); ++it) {
          entry.reset(string_properties_.NewEntryWrapper(
              it->first, it->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              5, *entry, output);
          Utf8Check::Check(&*it);
        }
      }
    }
  
    // map<string, double> numeric_properties = 6;
    if (!this->numeric_properties().empty()) {
      typedef ::google::protobuf::Map< ::std::string, double >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerMatched.MatchmakerUser.NumericPropertiesEntry.key");
        }
      };
  
      if (output->IsSerializationDeterministic() &&
          this->numeric_properties().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->numeric_properties().size()]);
        typedef ::google::protobuf::Map< ::std::string, double >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, double >::const_iterator
            it = this->numeric_properties().begin();
            it != this->numeric_properties().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(numeric_properties_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              6, *entry, output);
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, double >::const_iterator
            it = this->numeric_properties().begin();
            it != this->numeric_properties().end(); ++it) {
          entry.reset(numeric_properties_.NewEntryWrapper(
              it->first, it->second));
          ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
              6, *entry, output);
          Utf8Check::Check(&*it);
        }
      }
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchmakerMatched.MatchmakerUser)
  }
  
  ::google::protobuf::uint8* MatchmakerMatched_MatchmakerUser::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // .nakama.realtime.UserPresence presence = 1;
    if (this->has_presence()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          1, this->_internal_presence(), deterministic, target);
    }
  
    // map<string, string> string_properties = 5;
    if (!this->string_properties().empty()) {
      typedef ::google::protobuf::Map< ::std::string, ::std::string >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry.key");
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->second.data(), static_cast<int>(p->second.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry.value");
        }
      };
  
      if (deterministic &&
          this->string_properties().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->string_properties().size()]);
        typedef ::google::protobuf::Map< ::std::string, ::std::string >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->string_properties().begin();
            it != this->string_properties().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(string_properties_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         5, *entry, deterministic, target);
  ;
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
            it = this->string_properties().begin();
            it != this->string_properties().end(); ++it) {
          entry.reset(string_properties_.NewEntryWrapper(
              it->first, it->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         5, *entry, deterministic, target);
  ;
          Utf8Check::Check(&*it);
        }
      }
    }
  
    // map<string, double> numeric_properties = 6;
    if (!this->numeric_properties().empty()) {
      typedef ::google::protobuf::Map< ::std::string, double >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::google::protobuf::internal::WireFormatLite::SERIALIZE,
            "nakama.realtime.MatchmakerMatched.MatchmakerUser.NumericPropertiesEntry.key");
        }
      };
  
      if (deterministic &&
          this->numeric_properties().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->numeric_properties().size()]);
        typedef ::google::protobuf::Map< ::std::string, double >::size_type size_type;
        size_type n = 0;
        for (::google::protobuf::Map< ::std::string, double >::const_iterator
            it = this->numeric_properties().begin();
            it != this->numeric_properties().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse> entry;
        for (size_type i = 0; i < n; i++) {
          entry.reset(numeric_properties_.NewEntryWrapper(
              items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         6, *entry, deterministic, target);
  ;
          Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
        }
      } else {
        ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse> entry;
        for (::google::protobuf::Map< ::std::string, double >::const_iterator
            it = this->numeric_properties().begin();
            it != this->numeric_properties().end(); ++it) {
          entry.reset(numeric_properties_.NewEntryWrapper(
              it->first, it->second));
          target = ::google::protobuf::internal::WireFormatLite::
                     InternalWriteMessageNoVirtualToArray(
                         6, *entry, deterministic, target);
  ;
          Utf8Check::Check(&*it);
        }
      }
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    return target;
  }
  
  size_t MatchmakerMatched_MatchmakerUser::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // map<string, string> string_properties = 5;
    total_size += 1 *
        ::google::protobuf::internal::FromIntSize(this->string_properties_size());
    {
      ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
          it = this->string_properties().begin();
          it != this->string_properties().end(); ++it) {
        entry.reset(string_properties_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    // map<string, double> numeric_properties = 6;
    total_size += 1 *
        ::google::protobuf::internal::FromIntSize(this->numeric_properties_size());
    {
      ::std::unique_ptr<MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, double >::const_iterator
          it = this->numeric_properties().begin();
          it != this->numeric_properties().end(); ++it) {
        entry.reset(numeric_properties_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    // .nakama.realtime.UserPresence presence = 1;
    if (this->has_presence()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *presence_);
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchmakerMatched_MatchmakerUser::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchmakerMatched_MatchmakerUser* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchmakerMatched_MatchmakerUser>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchmakerMatched.MatchmakerUser)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchmakerMatched.MatchmakerUser)
      MergeFrom(*source);
    }
  }
  
  void MatchmakerMatched_MatchmakerUser::MergeFrom(const MatchmakerMatched_MatchmakerUser& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    string_properties_.MergeFrom(from.string_properties_);
    numeric_properties_.MergeFrom(from.numeric_properties_);
    if (from.has_presence()) {
      mutable_presence()->::nakama::realtime::UserPresence::MergeFrom(from.presence());
    }
  }
  
  void MatchmakerMatched_MatchmakerUser::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchmakerMatched_MatchmakerUser::CopyFrom(const MatchmakerMatched_MatchmakerUser& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchmakerMatched.MatchmakerUser)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchmakerMatched_MatchmakerUser::IsInitialized() const {
    return true;
  }
  
  void MatchmakerMatched_MatchmakerUser::Swap(MatchmakerMatched_MatchmakerUser* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchmakerMatched_MatchmakerUser::InternalSwap(MatchmakerMatched_MatchmakerUser* other) {
    using std::swap;
    string_properties_.Swap(&other->string_properties_);
    numeric_properties_.Swap(&other->numeric_properties_);
    swap(presence_, other->presence_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchmakerMatched_MatchmakerUser::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void MatchmakerMatched::InitAsDefaultInstance() {
    ::nakama::realtime::_MatchmakerMatched_default_instance_.match_id_.UnsafeSetDefault(
        &::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::nakama::realtime::_MatchmakerMatched_default_instance_.token_.UnsafeSetDefault(
        &::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::nakama::realtime::_MatchmakerMatched_default_instance_._instance.get_mutable()->self_ = const_cast< ::nakama::realtime::MatchmakerMatched_MatchmakerUser*>(
        ::nakama::realtime::MatchmakerMatched_MatchmakerUser::internal_default_instance());
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchmakerMatched::kTicketFieldNumber;
  const int MatchmakerMatched::kMatchIdFieldNumber;
  const int MatchmakerMatched::kTokenFieldNumber;
  const int MatchmakerMatched::kUsersFieldNumber;
  const int MatchmakerMatched::kSelfFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchmakerMatched::MatchmakerMatched()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerMatched.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchmakerMatched)
  }
  MatchmakerMatched::MatchmakerMatched(const MatchmakerMatched& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        users_(from.users_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ticket_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.ticket().size() > 0) {
      ticket_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.ticket_);
    }
    if (from.has_self()) {
      self_ = new ::nakama::realtime::MatchmakerMatched_MatchmakerUser(*from.self_);
    } else {
      self_ = NULL;
    }
    clear_has_id();
    switch (from.id_case()) {
      case kMatchId: {
        set_match_id(from.match_id());
        break;
      }
      case kToken: {
        set_token(from.token());
        break;
      }
      case ID_NOT_SET: {
        break;
      }
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchmakerMatched)
  }
  
  void MatchmakerMatched::SharedCtor() {
    ticket_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    self_ = NULL;
    clear_has_id();
  }
  
  MatchmakerMatched::~MatchmakerMatched() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchmakerMatched)
    SharedDtor();
  }
  
  void MatchmakerMatched::SharedDtor() {
    ticket_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete self_;
    if (has_id()) {
      clear_id();
    }
  }
  
  void MatchmakerMatched::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchmakerMatched::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchmakerMatched& MatchmakerMatched::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerMatched.base);
    return *internal_default_instance();
  }
  
  
  void MatchmakerMatched::clear_id() {
  // @@protoc_insertion_point(one_of_clear_start:nakama.realtime.MatchmakerMatched)
    switch (id_case()) {
      case kMatchId: {
        id_.match_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
        break;
      }
      case kToken: {
        id_.token_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
        break;
      }
      case ID_NOT_SET: {
        break;
      }
    }
    _oneof_case_[0] = ID_NOT_SET;
  }
  
  
  void MatchmakerMatched::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchmakerMatched)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    users_.Clear();
    ticket_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == NULL && self_ != NULL) {
      delete self_;
    }
    self_ = NULL;
    clear_id();
    _internal_metadata_.Clear();
  }
  
  bool MatchmakerMatched::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchmakerMatched)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string ticket = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_ticket()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->ticket().data(), static_cast<int>(this->ticket().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerMatched.ticket"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string match_id = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_match_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->match_id().data(), static_cast<int>(this->match_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerMatched.match_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string token = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_token()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->token().data(), static_cast<int>(this->token().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerMatched.token"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.MatchmakerMatched.MatchmakerUser users = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_users()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.MatchmakerMatched.MatchmakerUser self = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_self()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchmakerMatched)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchmakerMatched)
    return false;
  #undef DO_
  }
  
  void MatchmakerMatched::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchmakerMatched)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string ticket = 1;
    if (this->ticket().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->ticket().data(), static_cast<int>(this->ticket().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerMatched.ticket");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->ticket(), output);
    }
  
    // string match_id = 2;
    if (has_match_id()) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerMatched.match_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        2, this->match_id(), output);
    }
  
    // string token = 3;
    if (has_token()) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->token().data(), static_cast<int>(this->token().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerMatched.token");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        3, this->token(), output);
    }
  
    // repeated .nakama.realtime.MatchmakerMatched.MatchmakerUser users = 4;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->users_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        4,
        this->users(static_cast<int>(i)),
        output);
    }
  
    // .nakama.realtime.MatchmakerMatched.MatchmakerUser self = 5;
    if (this->has_self()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        5, this->_internal_self(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchmakerMatched)
  }
  
  ::google::protobuf::uint8* MatchmakerMatched::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchmakerMatched)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string ticket = 1;
    if (this->ticket().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->ticket().data(), static_cast<int>(this->ticket().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerMatched.ticket");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->ticket(), target);
    }
  
    // string match_id = 2;
    if (has_match_id()) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->match_id().data(), static_cast<int>(this->match_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerMatched.match_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          2, this->match_id(), target);
    }
  
    // string token = 3;
    if (has_token()) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->token().data(), static_cast<int>(this->token().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerMatched.token");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          3, this->token(), target);
    }
  
    // repeated .nakama.realtime.MatchmakerMatched.MatchmakerUser users = 4;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->users_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          4, this->users(static_cast<int>(i)), deterministic, target);
    }
  
    // .nakama.realtime.MatchmakerMatched.MatchmakerUser self = 5;
    if (this->has_self()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          5, this->_internal_self(), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchmakerMatched)
    return target;
  }
  
  size_t MatchmakerMatched::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchmakerMatched)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.realtime.MatchmakerMatched.MatchmakerUser users = 4;
    {
      unsigned int count = static_cast<unsigned int>(this->users_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->users(static_cast<int>(i)));
      }
    }
  
    // string ticket = 1;
    if (this->ticket().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->ticket());
    }
  
    // .nakama.realtime.MatchmakerMatched.MatchmakerUser self = 5;
    if (this->has_self()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *self_);
    }
  
    switch (id_case()) {
      // string match_id = 2;
      case kMatchId: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->match_id());
        break;
      }
      // string token = 3;
      case kToken: {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->token());
        break;
      }
      case ID_NOT_SET: {
        break;
      }
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchmakerMatched::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchmakerMatched)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchmakerMatched* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchmakerMatched>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchmakerMatched)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchmakerMatched)
      MergeFrom(*source);
    }
  }
  
  void MatchmakerMatched::MergeFrom(const MatchmakerMatched& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchmakerMatched)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    users_.MergeFrom(from.users_);
    if (from.ticket().size() > 0) {
  
      ticket_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.ticket_);
    }
    if (from.has_self()) {
      mutable_self()->::nakama::realtime::MatchmakerMatched_MatchmakerUser::MergeFrom(from.self());
    }
    switch (from.id_case()) {
      case kMatchId: {
        set_match_id(from.match_id());
        break;
      }
      case kToken: {
        set_token(from.token());
        break;
      }
      case ID_NOT_SET: {
        break;
      }
    }
  }
  
  void MatchmakerMatched::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchmakerMatched)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchmakerMatched::CopyFrom(const MatchmakerMatched& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchmakerMatched)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchmakerMatched::IsInitialized() const {
    return true;
  }
  
  void MatchmakerMatched::Swap(MatchmakerMatched* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchmakerMatched::InternalSwap(MatchmakerMatched* other) {
    using std::swap;
    CastToBase(&users_)->InternalSwap(CastToBase(&other->users_));
    ticket_.Swap(&other->ticket_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(self_, other->self_);
    swap(id_, other->id_);
    swap(_oneof_case_[0], other->_oneof_case_[0]);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchmakerMatched::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void MatchmakerRemove::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchmakerRemove::kTicketFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchmakerRemove::MatchmakerRemove()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerRemove.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchmakerRemove)
  }
  MatchmakerRemove::MatchmakerRemove(const MatchmakerRemove& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ticket_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.ticket().size() > 0) {
      ticket_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.ticket_);
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchmakerRemove)
  }
  
  void MatchmakerRemove::SharedCtor() {
    ticket_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  MatchmakerRemove::~MatchmakerRemove() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchmakerRemove)
    SharedDtor();
  }
  
  void MatchmakerRemove::SharedDtor() {
    ticket_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void MatchmakerRemove::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchmakerRemove::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchmakerRemove& MatchmakerRemove::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerRemove.base);
    return *internal_default_instance();
  }
  
  
  void MatchmakerRemove::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchmakerRemove)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    ticket_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    _internal_metadata_.Clear();
  }
  
  bool MatchmakerRemove::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchmakerRemove)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string ticket = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_ticket()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->ticket().data(), static_cast<int>(this->ticket().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerRemove.ticket"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchmakerRemove)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchmakerRemove)
    return false;
  #undef DO_
  }
  
  void MatchmakerRemove::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchmakerRemove)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string ticket = 1;
    if (this->ticket().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->ticket().data(), static_cast<int>(this->ticket().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerRemove.ticket");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->ticket(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchmakerRemove)
  }
  
  ::google::protobuf::uint8* MatchmakerRemove::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchmakerRemove)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string ticket = 1;
    if (this->ticket().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->ticket().data(), static_cast<int>(this->ticket().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerRemove.ticket");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->ticket(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchmakerRemove)
    return target;
  }
  
  size_t MatchmakerRemove::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchmakerRemove)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string ticket = 1;
    if (this->ticket().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->ticket());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchmakerRemove::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchmakerRemove)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchmakerRemove* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchmakerRemove>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchmakerRemove)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchmakerRemove)
      MergeFrom(*source);
    }
  }
  
  void MatchmakerRemove::MergeFrom(const MatchmakerRemove& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchmakerRemove)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.ticket().size() > 0) {
  
      ticket_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.ticket_);
    }
  }
  
  void MatchmakerRemove::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchmakerRemove)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchmakerRemove::CopyFrom(const MatchmakerRemove& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchmakerRemove)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchmakerRemove::IsInitialized() const {
    return true;
  }
  
  void MatchmakerRemove::Swap(MatchmakerRemove* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchmakerRemove::InternalSwap(MatchmakerRemove* other) {
    using std::swap;
    ticket_.Swap(&other->ticket_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchmakerRemove::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void MatchmakerTicket::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int MatchmakerTicket::kTicketFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  MatchmakerTicket::MatchmakerTicket()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerTicket.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.MatchmakerTicket)
  }
  MatchmakerTicket::MatchmakerTicket(const MatchmakerTicket& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ticket_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.ticket().size() > 0) {
      ticket_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.ticket_);
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.MatchmakerTicket)
  }
  
  void MatchmakerTicket::SharedCtor() {
    ticket_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  MatchmakerTicket::~MatchmakerTicket() {
    // @@protoc_insertion_point(destructor:nakama.realtime.MatchmakerTicket)
    SharedDtor();
  }
  
  void MatchmakerTicket::SharedDtor() {
    ticket_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void MatchmakerTicket::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* MatchmakerTicket::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const MatchmakerTicket& MatchmakerTicket::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_MatchmakerTicket.base);
    return *internal_default_instance();
  }
  
  
  void MatchmakerTicket::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.MatchmakerTicket)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    ticket_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    _internal_metadata_.Clear();
  }
  
  bool MatchmakerTicket::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.MatchmakerTicket)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string ticket = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_ticket()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->ticket().data(), static_cast<int>(this->ticket().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.MatchmakerTicket.ticket"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.MatchmakerTicket)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.MatchmakerTicket)
    return false;
  #undef DO_
  }
  
  void MatchmakerTicket::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.MatchmakerTicket)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string ticket = 1;
    if (this->ticket().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->ticket().data(), static_cast<int>(this->ticket().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerTicket.ticket");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->ticket(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.MatchmakerTicket)
  }
  
  ::google::protobuf::uint8* MatchmakerTicket::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.MatchmakerTicket)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string ticket = 1;
    if (this->ticket().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->ticket().data(), static_cast<int>(this->ticket().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.MatchmakerTicket.ticket");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->ticket(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.MatchmakerTicket)
    return target;
  }
  
  size_t MatchmakerTicket::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.MatchmakerTicket)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string ticket = 1;
    if (this->ticket().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->ticket());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MatchmakerTicket::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.MatchmakerTicket)
    GOOGLE_DCHECK_NE(&from, this);
    const MatchmakerTicket* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const MatchmakerTicket>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.MatchmakerTicket)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.MatchmakerTicket)
      MergeFrom(*source);
    }
  }
  
  void MatchmakerTicket::MergeFrom(const MatchmakerTicket& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.MatchmakerTicket)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.ticket().size() > 0) {
  
      ticket_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.ticket_);
    }
  }
  
  void MatchmakerTicket::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.MatchmakerTicket)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MatchmakerTicket::CopyFrom(const MatchmakerTicket& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.MatchmakerTicket)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MatchmakerTicket::IsInitialized() const {
    return true;
  }
  
  void MatchmakerTicket::Swap(MatchmakerTicket* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MatchmakerTicket::InternalSwap(MatchmakerTicket* other) {
    using std::swap;
    ticket_.Swap(&other->ticket_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata MatchmakerTicket::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void Notifications::InitAsDefaultInstance() {
  }
  void Notifications::clear_notifications() {
    notifications_.Clear();
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int Notifications::kNotificationsFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  Notifications::Notifications()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Notifications.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.Notifications)
  }
  Notifications::Notifications(const Notifications& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        notifications_(from.notifications_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.Notifications)
  }
  
  void Notifications::SharedCtor() {
  }
  
  Notifications::~Notifications() {
    // @@protoc_insertion_point(destructor:nakama.realtime.Notifications)
    SharedDtor();
  }
  
  void Notifications::SharedDtor() {
  }
  
  void Notifications::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* Notifications::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const Notifications& Notifications::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Notifications.base);
    return *internal_default_instance();
  }
  
  
  void Notifications::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.Notifications)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    notifications_.Clear();
    _internal_metadata_.Clear();
  }
  
  bool Notifications::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.Notifications)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // repeated .nakama.api.Notification notifications = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_notifications()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.Notifications)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.Notifications)
    return false;
  #undef DO_
  }
  
  void Notifications::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.Notifications)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated .nakama.api.Notification notifications = 1;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->notifications_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        1,
        this->notifications(static_cast<int>(i)),
        output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.Notifications)
  }
  
  ::google::protobuf::uint8* Notifications::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.Notifications)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated .nakama.api.Notification notifications = 1;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->notifications_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          1, this->notifications(static_cast<int>(i)), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.Notifications)
    return target;
  }
  
  size_t Notifications::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.Notifications)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.api.Notification notifications = 1;
    {
      unsigned int count = static_cast<unsigned int>(this->notifications_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->notifications(static_cast<int>(i)));
      }
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Notifications::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.Notifications)
    GOOGLE_DCHECK_NE(&from, this);
    const Notifications* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const Notifications>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.Notifications)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.Notifications)
      MergeFrom(*source);
    }
  }
  
  void Notifications::MergeFrom(const Notifications& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.Notifications)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    notifications_.MergeFrom(from.notifications_);
  }
  
  void Notifications::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.Notifications)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Notifications::CopyFrom(const Notifications& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.Notifications)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Notifications::IsInitialized() const {
    return true;
  }
  
  void Notifications::Swap(Notifications* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void Notifications::InternalSwap(Notifications* other) {
    using std::swap;
    CastToBase(&notifications_)->InternalSwap(CastToBase(&other->notifications_));
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata Notifications::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void Ping::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  Ping::Ping()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Ping.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.Ping)
  }
  Ping::Ping(const Ping& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.Ping)
  }
  
  void Ping::SharedCtor() {
  }
  
  Ping::~Ping() {
    // @@protoc_insertion_point(destructor:nakama.realtime.Ping)
    SharedDtor();
  }
  
  void Ping::SharedDtor() {
  }
  
  void Ping::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* Ping::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const Ping& Ping::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Ping.base);
    return *internal_default_instance();
  }
  
  
  void Ping::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.Ping)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    _internal_metadata_.Clear();
  }
  
  bool Ping::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.Ping)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
    handle_unusual:
      if (tag == 0) {
        goto success;
      }
      DO_(::google::protobuf::internal::WireFormat::SkipField(
            input, tag, _internal_metadata_.mutable_unknown_fields()));
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.Ping)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.Ping)
    return false;
  #undef DO_
  }
  
  void Ping::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.Ping)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.Ping)
  }
  
  ::google::protobuf::uint8* Ping::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.Ping)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.Ping)
    return target;
  }
  
  size_t Ping::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.Ping)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Ping::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.Ping)
    GOOGLE_DCHECK_NE(&from, this);
    const Ping* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const Ping>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.Ping)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.Ping)
      MergeFrom(*source);
    }
  }
  
  void Ping::MergeFrom(const Ping& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.Ping)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
  }
  
  void Ping::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.Ping)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Ping::CopyFrom(const Ping& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.Ping)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Ping::IsInitialized() const {
    return true;
  }
  
  void Ping::Swap(Ping* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void Ping::InternalSwap(Ping* other) {
    using std::swap;
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata Ping::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void Pong::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  Pong::Pong()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Pong.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.Pong)
  }
  Pong::Pong(const Pong& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.Pong)
  }
  
  void Pong::SharedCtor() {
  }
  
  Pong::~Pong() {
    // @@protoc_insertion_point(destructor:nakama.realtime.Pong)
    SharedDtor();
  }
  
  void Pong::SharedDtor() {
  }
  
  void Pong::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* Pong::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const Pong& Pong::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Pong.base);
    return *internal_default_instance();
  }
  
  
  void Pong::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.Pong)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    _internal_metadata_.Clear();
  }
  
  bool Pong::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.Pong)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
    handle_unusual:
      if (tag == 0) {
        goto success;
      }
      DO_(::google::protobuf::internal::WireFormat::SkipField(
            input, tag, _internal_metadata_.mutable_unknown_fields()));
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.Pong)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.Pong)
    return false;
  #undef DO_
  }
  
  void Pong::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.Pong)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.Pong)
  }
  
  ::google::protobuf::uint8* Pong::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.Pong)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.Pong)
    return target;
  }
  
  size_t Pong::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.Pong)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Pong::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.Pong)
    GOOGLE_DCHECK_NE(&from, this);
    const Pong* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const Pong>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.Pong)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.Pong)
      MergeFrom(*source);
    }
  }
  
  void Pong::MergeFrom(const Pong& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.Pong)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
  }
  
  void Pong::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.Pong)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Pong::CopyFrom(const Pong& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.Pong)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Pong::IsInitialized() const {
    return true;
  }
  
  void Pong::Swap(Pong* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void Pong::InternalSwap(Pong* other) {
    using std::swap;
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata Pong::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void Status::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int Status::kPresencesFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  Status::Status()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Status.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.Status)
  }
  Status::Status(const Status& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        presences_(from.presences_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.Status)
  }
  
  void Status::SharedCtor() {
  }
  
  Status::~Status() {
    // @@protoc_insertion_point(destructor:nakama.realtime.Status)
    SharedDtor();
  }
  
  void Status::SharedDtor() {
  }
  
  void Status::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* Status::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const Status& Status::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Status.base);
    return *internal_default_instance();
  }
  
  
  void Status::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.Status)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    presences_.Clear();
    _internal_metadata_.Clear();
  }
  
  bool Status::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.Status)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // repeated .nakama.realtime.UserPresence presences = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_presences()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.Status)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.Status)
    return false;
  #undef DO_
  }
  
  void Status::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.Status)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated .nakama.realtime.UserPresence presences = 1;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->presences_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        1,
        this->presences(static_cast<int>(i)),
        output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.Status)
  }
  
  ::google::protobuf::uint8* Status::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.Status)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated .nakama.realtime.UserPresence presences = 1;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->presences_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          1, this->presences(static_cast<int>(i)), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.Status)
    return target;
  }
  
  size_t Status::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.Status)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.realtime.UserPresence presences = 1;
    {
      unsigned int count = static_cast<unsigned int>(this->presences_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->presences(static_cast<int>(i)));
      }
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Status::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.Status)
    GOOGLE_DCHECK_NE(&from, this);
    const Status* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const Status>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.Status)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.Status)
      MergeFrom(*source);
    }
  }
  
  void Status::MergeFrom(const Status& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.Status)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    presences_.MergeFrom(from.presences_);
  }
  
  void Status::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.Status)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Status::CopyFrom(const Status& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.Status)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Status::IsInitialized() const {
    return true;
  }
  
  void Status::Swap(Status* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void Status::InternalSwap(Status* other) {
    using std::swap;
    CastToBase(&presences_)->InternalSwap(CastToBase(&other->presences_));
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata Status::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void StatusFollow::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int StatusFollow::kUserIdsFieldNumber;
  const int StatusFollow::kUsernamesFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  StatusFollow::StatusFollow()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusFollow.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.StatusFollow)
  }
  StatusFollow::StatusFollow(const StatusFollow& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        user_ids_(from.user_ids_),
        usernames_(from.usernames_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.StatusFollow)
  }
  
  void StatusFollow::SharedCtor() {
  }
  
  StatusFollow::~StatusFollow() {
    // @@protoc_insertion_point(destructor:nakama.realtime.StatusFollow)
    SharedDtor();
  }
  
  void StatusFollow::SharedDtor() {
  }
  
  void StatusFollow::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* StatusFollow::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const StatusFollow& StatusFollow::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusFollow.base);
    return *internal_default_instance();
  }
  
  
  void StatusFollow::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.StatusFollow)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    user_ids_.Clear();
    usernames_.Clear();
    _internal_metadata_.Clear();
  }
  
  bool StatusFollow::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.StatusFollow)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // repeated string user_ids = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->add_user_ids()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->user_ids(this->user_ids_size() - 1).data(),
              static_cast<int>(this->user_ids(this->user_ids_size() - 1).length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.StatusFollow.user_ids"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated string usernames = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->add_usernames()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->usernames(this->usernames_size() - 1).data(),
              static_cast<int>(this->usernames(this->usernames_size() - 1).length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.StatusFollow.usernames"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.StatusFollow)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.StatusFollow)
    return false;
  #undef DO_
  }
  
  void StatusFollow::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.StatusFollow)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated string user_ids = 1;
    for (int i = 0, n = this->user_ids_size(); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_ids(i).data(), static_cast<int>(this->user_ids(i).length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.StatusFollow.user_ids");
      ::google::protobuf::internal::WireFormatLite::WriteString(
        1, this->user_ids(i), output);
    }
  
    // repeated string usernames = 2;
    for (int i = 0, n = this->usernames_size(); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->usernames(i).data(), static_cast<int>(this->usernames(i).length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.StatusFollow.usernames");
      ::google::protobuf::internal::WireFormatLite::WriteString(
        2, this->usernames(i), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.StatusFollow)
  }
  
  ::google::protobuf::uint8* StatusFollow::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.StatusFollow)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated string user_ids = 1;
    for (int i = 0, n = this->user_ids_size(); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_ids(i).data(), static_cast<int>(this->user_ids(i).length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.StatusFollow.user_ids");
      target = ::google::protobuf::internal::WireFormatLite::
        WriteStringToArray(1, this->user_ids(i), target);
    }
  
    // repeated string usernames = 2;
    for (int i = 0, n = this->usernames_size(); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->usernames(i).data(), static_cast<int>(this->usernames(i).length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.StatusFollow.usernames");
      target = ::google::protobuf::internal::WireFormatLite::
        WriteStringToArray(2, this->usernames(i), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.StatusFollow)
    return target;
  }
  
  size_t StatusFollow::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.StatusFollow)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated string user_ids = 1;
    total_size += 1 *
        ::google::protobuf::internal::FromIntSize(this->user_ids_size());
    for (int i = 0, n = this->user_ids_size(); i < n; i++) {
      total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
        this->user_ids(i));
    }
  
    // repeated string usernames = 2;
    total_size += 1 *
        ::google::protobuf::internal::FromIntSize(this->usernames_size());
    for (int i = 0, n = this->usernames_size(); i < n; i++) {
      total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
        this->usernames(i));
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void StatusFollow::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.StatusFollow)
    GOOGLE_DCHECK_NE(&from, this);
    const StatusFollow* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const StatusFollow>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.StatusFollow)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.StatusFollow)
      MergeFrom(*source);
    }
  }
  
  void StatusFollow::MergeFrom(const StatusFollow& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.StatusFollow)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    user_ids_.MergeFrom(from.user_ids_);
    usernames_.MergeFrom(from.usernames_);
  }
  
  void StatusFollow::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.StatusFollow)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void StatusFollow::CopyFrom(const StatusFollow& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.StatusFollow)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool StatusFollow::IsInitialized() const {
    return true;
  }
  
  void StatusFollow::Swap(StatusFollow* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void StatusFollow::InternalSwap(StatusFollow* other) {
    using std::swap;
    user_ids_.InternalSwap(CastToBase(&other->user_ids_));
    usernames_.InternalSwap(CastToBase(&other->usernames_));
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata StatusFollow::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void StatusPresenceEvent::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int StatusPresenceEvent::kJoinsFieldNumber;
  const int StatusPresenceEvent::kLeavesFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  StatusPresenceEvent::StatusPresenceEvent()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusPresenceEvent.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.StatusPresenceEvent)
  }
  StatusPresenceEvent::StatusPresenceEvent(const StatusPresenceEvent& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        joins_(from.joins_),
        leaves_(from.leaves_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.StatusPresenceEvent)
  }
  
  void StatusPresenceEvent::SharedCtor() {
  }
  
  StatusPresenceEvent::~StatusPresenceEvent() {
    // @@protoc_insertion_point(destructor:nakama.realtime.StatusPresenceEvent)
    SharedDtor();
  }
  
  void StatusPresenceEvent::SharedDtor() {
  }
  
  void StatusPresenceEvent::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* StatusPresenceEvent::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const StatusPresenceEvent& StatusPresenceEvent::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusPresenceEvent.base);
    return *internal_default_instance();
  }
  
  
  void StatusPresenceEvent::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.StatusPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    joins_.Clear();
    leaves_.Clear();
    _internal_metadata_.Clear();
  }
  
  bool StatusPresenceEvent::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.StatusPresenceEvent)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // repeated .nakama.realtime.UserPresence joins = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_joins()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence leaves = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_leaves()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.StatusPresenceEvent)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.StatusPresenceEvent)
    return false;
  #undef DO_
  }
  
  void StatusPresenceEvent::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.StatusPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated .nakama.realtime.UserPresence joins = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->joins_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        2,
        this->joins(static_cast<int>(i)),
        output);
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->leaves_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        3,
        this->leaves(static_cast<int>(i)),
        output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.StatusPresenceEvent)
  }
  
  ::google::protobuf::uint8* StatusPresenceEvent::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.StatusPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated .nakama.realtime.UserPresence joins = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->joins_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          2, this->joins(static_cast<int>(i)), deterministic, target);
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->leaves_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          3, this->leaves(static_cast<int>(i)), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.StatusPresenceEvent)
    return target;
  }
  
  size_t StatusPresenceEvent::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.StatusPresenceEvent)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.realtime.UserPresence joins = 2;
    {
      unsigned int count = static_cast<unsigned int>(this->joins_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->joins(static_cast<int>(i)));
      }
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    {
      unsigned int count = static_cast<unsigned int>(this->leaves_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->leaves(static_cast<int>(i)));
      }
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void StatusPresenceEvent::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.StatusPresenceEvent)
    GOOGLE_DCHECK_NE(&from, this);
    const StatusPresenceEvent* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const StatusPresenceEvent>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.StatusPresenceEvent)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.StatusPresenceEvent)
      MergeFrom(*source);
    }
  }
  
  void StatusPresenceEvent::MergeFrom(const StatusPresenceEvent& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.StatusPresenceEvent)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    joins_.MergeFrom(from.joins_);
    leaves_.MergeFrom(from.leaves_);
  }
  
  void StatusPresenceEvent::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.StatusPresenceEvent)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void StatusPresenceEvent::CopyFrom(const StatusPresenceEvent& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.StatusPresenceEvent)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool StatusPresenceEvent::IsInitialized() const {
    return true;
  }
  
  void StatusPresenceEvent::Swap(StatusPresenceEvent* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void StatusPresenceEvent::InternalSwap(StatusPresenceEvent* other) {
    using std::swap;
    CastToBase(&joins_)->InternalSwap(CastToBase(&other->joins_));
    CastToBase(&leaves_)->InternalSwap(CastToBase(&other->leaves_));
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata StatusPresenceEvent::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void StatusUnfollow::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int StatusUnfollow::kUserIdsFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  StatusUnfollow::StatusUnfollow()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusUnfollow.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.StatusUnfollow)
  }
  StatusUnfollow::StatusUnfollow(const StatusUnfollow& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        user_ids_(from.user_ids_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.StatusUnfollow)
  }
  
  void StatusUnfollow::SharedCtor() {
  }
  
  StatusUnfollow::~StatusUnfollow() {
    // @@protoc_insertion_point(destructor:nakama.realtime.StatusUnfollow)
    SharedDtor();
  }
  
  void StatusUnfollow::SharedDtor() {
  }
  
  void StatusUnfollow::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* StatusUnfollow::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const StatusUnfollow& StatusUnfollow::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusUnfollow.base);
    return *internal_default_instance();
  }
  
  
  void StatusUnfollow::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.StatusUnfollow)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    user_ids_.Clear();
    _internal_metadata_.Clear();
  }
  
  bool StatusUnfollow::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.StatusUnfollow)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // repeated string user_ids = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->add_user_ids()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->user_ids(this->user_ids_size() - 1).data(),
              static_cast<int>(this->user_ids(this->user_ids_size() - 1).length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.StatusUnfollow.user_ids"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.StatusUnfollow)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.StatusUnfollow)
    return false;
  #undef DO_
  }
  
  void StatusUnfollow::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.StatusUnfollow)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated string user_ids = 1;
    for (int i = 0, n = this->user_ids_size(); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_ids(i).data(), static_cast<int>(this->user_ids(i).length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.StatusUnfollow.user_ids");
      ::google::protobuf::internal::WireFormatLite::WriteString(
        1, this->user_ids(i), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.StatusUnfollow)
  }
  
  ::google::protobuf::uint8* StatusUnfollow::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.StatusUnfollow)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated string user_ids = 1;
    for (int i = 0, n = this->user_ids_size(); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_ids(i).data(), static_cast<int>(this->user_ids(i).length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.StatusUnfollow.user_ids");
      target = ::google::protobuf::internal::WireFormatLite::
        WriteStringToArray(1, this->user_ids(i), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.StatusUnfollow)
    return target;
  }
  
  size_t StatusUnfollow::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.StatusUnfollow)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated string user_ids = 1;
    total_size += 1 *
        ::google::protobuf::internal::FromIntSize(this->user_ids_size());
    for (int i = 0, n = this->user_ids_size(); i < n; i++) {
      total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
        this->user_ids(i));
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void StatusUnfollow::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.StatusUnfollow)
    GOOGLE_DCHECK_NE(&from, this);
    const StatusUnfollow* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const StatusUnfollow>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.StatusUnfollow)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.StatusUnfollow)
      MergeFrom(*source);
    }
  }
  
  void StatusUnfollow::MergeFrom(const StatusUnfollow& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.StatusUnfollow)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    user_ids_.MergeFrom(from.user_ids_);
  }
  
  void StatusUnfollow::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.StatusUnfollow)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void StatusUnfollow::CopyFrom(const StatusUnfollow& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.StatusUnfollow)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool StatusUnfollow::IsInitialized() const {
    return true;
  }
  
  void StatusUnfollow::Swap(StatusUnfollow* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void StatusUnfollow::InternalSwap(StatusUnfollow* other) {
    using std::swap;
    user_ids_.InternalSwap(CastToBase(&other->user_ids_));
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata StatusUnfollow::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void StatusUpdate::InitAsDefaultInstance() {
    ::nakama::realtime::_StatusUpdate_default_instance_._instance.get_mutable()->status_ = const_cast< ::google::protobuf::StringValue*>(
        ::google::protobuf::StringValue::internal_default_instance());
  }
  void StatusUpdate::clear_status() {
    if (GetArenaNoVirtual() == NULL && status_ != NULL) {
      delete status_;
    }
    status_ = NULL;
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int StatusUpdate::kStatusFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  StatusUpdate::StatusUpdate()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusUpdate.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.StatusUpdate)
  }
  StatusUpdate::StatusUpdate(const StatusUpdate& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    if (from.has_status()) {
      status_ = new ::google::protobuf::StringValue(*from.status_);
    } else {
      status_ = NULL;
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.StatusUpdate)
  }
  
  void StatusUpdate::SharedCtor() {
    status_ = NULL;
  }
  
  StatusUpdate::~StatusUpdate() {
    // @@protoc_insertion_point(destructor:nakama.realtime.StatusUpdate)
    SharedDtor();
  }
  
  void StatusUpdate::SharedDtor() {
    if (this != internal_default_instance()) delete status_;
  }
  
  void StatusUpdate::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* StatusUpdate::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const StatusUpdate& StatusUpdate::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StatusUpdate.base);
    return *internal_default_instance();
  }
  
  
  void StatusUpdate::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.StatusUpdate)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    if (GetArenaNoVirtual() == NULL && status_ != NULL) {
      delete status_;
    }
    status_ = NULL;
    _internal_metadata_.Clear();
  }
  
  bool StatusUpdate::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.StatusUpdate)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // .google.protobuf.StringValue status = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_status()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.StatusUpdate)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.StatusUpdate)
    return false;
  #undef DO_
  }
  
  void StatusUpdate::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.StatusUpdate)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // .google.protobuf.StringValue status = 1;
    if (this->has_status()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        1, this->_internal_status(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.StatusUpdate)
  }
  
  ::google::protobuf::uint8* StatusUpdate::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.StatusUpdate)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // .google.protobuf.StringValue status = 1;
    if (this->has_status()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          1, this->_internal_status(), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.StatusUpdate)
    return target;
  }
  
  size_t StatusUpdate::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.StatusUpdate)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // .google.protobuf.StringValue status = 1;
    if (this->has_status()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *status_);
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void StatusUpdate::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.StatusUpdate)
    GOOGLE_DCHECK_NE(&from, this);
    const StatusUpdate* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const StatusUpdate>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.StatusUpdate)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.StatusUpdate)
      MergeFrom(*source);
    }
  }
  
  void StatusUpdate::MergeFrom(const StatusUpdate& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.StatusUpdate)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.has_status()) {
      mutable_status()->::google::protobuf::StringValue::MergeFrom(from.status());
    }
  }
  
  void StatusUpdate::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.StatusUpdate)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void StatusUpdate::CopyFrom(const StatusUpdate& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.StatusUpdate)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool StatusUpdate::IsInitialized() const {
    return true;
  }
  
  void StatusUpdate::Swap(StatusUpdate* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void StatusUpdate::InternalSwap(StatusUpdate* other) {
    using std::swap;
    swap(status_, other->status_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata StatusUpdate::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void Stream::InitAsDefaultInstance() {
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int Stream::kModeFieldNumber;
  const int Stream::kSubjectFieldNumber;
  const int Stream::kSubcontextFieldNumber;
  const int Stream::kLabelFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  Stream::Stream()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Stream.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.Stream)
  }
  Stream::Stream(const Stream& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    subject_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.subject().size() > 0) {
      subject_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.subject_);
    }
    subcontext_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.subcontext().size() > 0) {
      subcontext_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.subcontext_);
    }
    label_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.label().size() > 0) {
      label_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.label_);
    }
    mode_ = from.mode_;
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.Stream)
  }
  
  void Stream::SharedCtor() {
    subject_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    subcontext_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    label_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    mode_ = 0;
  }
  
  Stream::~Stream() {
    // @@protoc_insertion_point(destructor:nakama.realtime.Stream)
    SharedDtor();
  }
  
  void Stream::SharedDtor() {
    subject_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    subcontext_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    label_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  void Stream::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* Stream::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const Stream& Stream::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_Stream.base);
    return *internal_default_instance();
  }
  
  
  void Stream::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.Stream)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    subject_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    subcontext_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    label_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    mode_ = 0;
    _internal_metadata_.Clear();
  }
  
  bool Stream::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.Stream)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // int32 mode = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &mode_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string subject = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_subject()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->subject().data(), static_cast<int>(this->subject().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Stream.subject"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string subcontext = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_subcontext()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->subcontext().data(), static_cast<int>(this->subcontext().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Stream.subcontext"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string label = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_label()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->label().data(), static_cast<int>(this->label().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.Stream.label"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.Stream)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.Stream)
    return false;
  #undef DO_
  }
  
  void Stream::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.Stream)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // int32 mode = 1;
    if (this->mode() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->mode(), output);
    }
  
    // string subject = 2;
    if (this->subject().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->subject().data(), static_cast<int>(this->subject().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Stream.subject");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        2, this->subject(), output);
    }
  
    // string subcontext = 3;
    if (this->subcontext().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->subcontext().data(), static_cast<int>(this->subcontext().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Stream.subcontext");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        3, this->subcontext(), output);
    }
  
    // string label = 4;
    if (this->label().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->label().data(), static_cast<int>(this->label().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Stream.label");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        4, this->label(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.Stream)
  }
  
  ::google::protobuf::uint8* Stream::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.Stream)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // int32 mode = 1;
    if (this->mode() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->mode(), target);
    }
  
    // string subject = 2;
    if (this->subject().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->subject().data(), static_cast<int>(this->subject().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Stream.subject");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          2, this->subject(), target);
    }
  
    // string subcontext = 3;
    if (this->subcontext().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->subcontext().data(), static_cast<int>(this->subcontext().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Stream.subcontext");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          3, this->subcontext(), target);
    }
  
    // string label = 4;
    if (this->label().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->label().data(), static_cast<int>(this->label().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.Stream.label");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          4, this->label(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.Stream)
    return target;
  }
  
  size_t Stream::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.Stream)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string subject = 2;
    if (this->subject().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->subject());
    }
  
    // string subcontext = 3;
    if (this->subcontext().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->subcontext());
    }
  
    // string label = 4;
    if (this->label().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->label());
    }
  
    // int32 mode = 1;
    if (this->mode() != 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->mode());
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Stream::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.Stream)
    GOOGLE_DCHECK_NE(&from, this);
    const Stream* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const Stream>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.Stream)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.Stream)
      MergeFrom(*source);
    }
  }
  
  void Stream::MergeFrom(const Stream& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.Stream)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.subject().size() > 0) {
  
      subject_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.subject_);
    }
    if (from.subcontext().size() > 0) {
  
      subcontext_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.subcontext_);
    }
    if (from.label().size() > 0) {
  
      label_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.label_);
    }
    if (from.mode() != 0) {
      set_mode(from.mode());
    }
  }
  
  void Stream::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.Stream)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Stream::CopyFrom(const Stream& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.Stream)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Stream::IsInitialized() const {
    return true;
  }
  
  void Stream::Swap(Stream* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void Stream::InternalSwap(Stream* other) {
    using std::swap;
    subject_.Swap(&other->subject_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    subcontext_.Swap(&other->subcontext_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    label_.Swap(&other->label_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(mode_, other->mode_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata Stream::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void StreamData::InitAsDefaultInstance() {
    ::nakama::realtime::_StreamData_default_instance_._instance.get_mutable()->stream_ = const_cast< ::nakama::realtime::Stream*>(
        ::nakama::realtime::Stream::internal_default_instance());
    ::nakama::realtime::_StreamData_default_instance_._instance.get_mutable()->sender_ = const_cast< ::nakama::realtime::UserPresence*>(
        ::nakama::realtime::UserPresence::internal_default_instance());
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int StreamData::kStreamFieldNumber;
  const int StreamData::kSenderFieldNumber;
  const int StreamData::kDataFieldNumber;
  const int StreamData::kReliableFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  StreamData::StreamData()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StreamData.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.StreamData)
  }
  StreamData::StreamData(const StreamData& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    data_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.data().size() > 0) {
      data_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.data_);
    }
    if (from.has_stream()) {
      stream_ = new ::nakama::realtime::Stream(*from.stream_);
    } else {
      stream_ = NULL;
    }
    if (from.has_sender()) {
      sender_ = new ::nakama::realtime::UserPresence(*from.sender_);
    } else {
      sender_ = NULL;
    }
    reliable_ = from.reliable_;
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.StreamData)
  }
  
  void StreamData::SharedCtor() {
    data_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&stream_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&reliable_) -
        reinterpret_cast<char*>(&stream_)) + sizeof(reliable_));
  }
  
  StreamData::~StreamData() {
    // @@protoc_insertion_point(destructor:nakama.realtime.StreamData)
    SharedDtor();
  }
  
  void StreamData::SharedDtor() {
    data_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete stream_;
    if (this != internal_default_instance()) delete sender_;
  }
  
  void StreamData::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* StreamData::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const StreamData& StreamData::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StreamData.base);
    return *internal_default_instance();
  }
  
  
  void StreamData::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.StreamData)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    data_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == NULL && stream_ != NULL) {
      delete stream_;
    }
    stream_ = NULL;
    if (GetArenaNoVirtual() == NULL && sender_ != NULL) {
      delete sender_;
    }
    sender_ = NULL;
    reliable_ = false;
    _internal_metadata_.Clear();
  }
  
  bool StreamData::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.StreamData)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // .nakama.realtime.Stream stream = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_stream()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .nakama.realtime.UserPresence sender = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_sender()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string data = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_data()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->data().data(), static_cast<int>(this->data().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.StreamData.data"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // bool reliable = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                   input, &reliable_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.StreamData)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.StreamData)
    return false;
  #undef DO_
  }
  
  void StreamData::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.StreamData)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // .nakama.realtime.Stream stream = 1;
    if (this->has_stream()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        1, this->_internal_stream(), output);
    }
  
    // .nakama.realtime.UserPresence sender = 2;
    if (this->has_sender()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        2, this->_internal_sender(), output);
    }
  
    // string data = 3;
    if (this->data().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->data().data(), static_cast<int>(this->data().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.StreamData.data");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        3, this->data(), output);
    }
  
    // bool reliable = 4;
    if (this->reliable() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteBool(4, this->reliable(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.StreamData)
  }
  
  ::google::protobuf::uint8* StreamData::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.StreamData)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // .nakama.realtime.Stream stream = 1;
    if (this->has_stream()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          1, this->_internal_stream(), deterministic, target);
    }
  
    // .nakama.realtime.UserPresence sender = 2;
    if (this->has_sender()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          2, this->_internal_sender(), deterministic, target);
    }
  
    // string data = 3;
    if (this->data().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->data().data(), static_cast<int>(this->data().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.StreamData.data");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          3, this->data(), target);
    }
  
    // bool reliable = 4;
    if (this->reliable() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(4, this->reliable(), target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.StreamData)
    return target;
  }
  
  size_t StreamData::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.StreamData)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string data = 3;
    if (this->data().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->data());
    }
  
    // .nakama.realtime.Stream stream = 1;
    if (this->has_stream()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *stream_);
    }
  
    // .nakama.realtime.UserPresence sender = 2;
    if (this->has_sender()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *sender_);
    }
  
    // bool reliable = 4;
    if (this->reliable() != 0) {
      total_size += 1 + 1;
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void StreamData::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.StreamData)
    GOOGLE_DCHECK_NE(&from, this);
    const StreamData* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const StreamData>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.StreamData)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.StreamData)
      MergeFrom(*source);
    }
  }
  
  void StreamData::MergeFrom(const StreamData& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.StreamData)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.data().size() > 0) {
  
      data_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.data_);
    }
    if (from.has_stream()) {
      mutable_stream()->::nakama::realtime::Stream::MergeFrom(from.stream());
    }
    if (from.has_sender()) {
      mutable_sender()->::nakama::realtime::UserPresence::MergeFrom(from.sender());
    }
    if (from.reliable() != 0) {
      set_reliable(from.reliable());
    }
  }
  
  void StreamData::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.StreamData)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void StreamData::CopyFrom(const StreamData& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.StreamData)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool StreamData::IsInitialized() const {
    return true;
  }
  
  void StreamData::Swap(StreamData* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void StreamData::InternalSwap(StreamData* other) {
    using std::swap;
    data_.Swap(&other->data_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(stream_, other->stream_);
    swap(sender_, other->sender_);
    swap(reliable_, other->reliable_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata StreamData::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void StreamPresenceEvent::InitAsDefaultInstance() {
    ::nakama::realtime::_StreamPresenceEvent_default_instance_._instance.get_mutable()->stream_ = const_cast< ::nakama::realtime::Stream*>(
        ::nakama::realtime::Stream::internal_default_instance());
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int StreamPresenceEvent::kStreamFieldNumber;
  const int StreamPresenceEvent::kJoinsFieldNumber;
  const int StreamPresenceEvent::kLeavesFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  StreamPresenceEvent::StreamPresenceEvent()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StreamPresenceEvent.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.StreamPresenceEvent)
  }
  StreamPresenceEvent::StreamPresenceEvent(const StreamPresenceEvent& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL),
        joins_(from.joins_),
        leaves_(from.leaves_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    if (from.has_stream()) {
      stream_ = new ::nakama::realtime::Stream(*from.stream_);
    } else {
      stream_ = NULL;
    }
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.StreamPresenceEvent)
  }
  
  void StreamPresenceEvent::SharedCtor() {
    stream_ = NULL;
  }
  
  StreamPresenceEvent::~StreamPresenceEvent() {
    // @@protoc_insertion_point(destructor:nakama.realtime.StreamPresenceEvent)
    SharedDtor();
  }
  
  void StreamPresenceEvent::SharedDtor() {
    if (this != internal_default_instance()) delete stream_;
  }
  
  void StreamPresenceEvent::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* StreamPresenceEvent::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const StreamPresenceEvent& StreamPresenceEvent::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_StreamPresenceEvent.base);
    return *internal_default_instance();
  }
  
  
  void StreamPresenceEvent::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.StreamPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    joins_.Clear();
    leaves_.Clear();
    if (GetArenaNoVirtual() == NULL && stream_ != NULL) {
      delete stream_;
    }
    stream_ = NULL;
    _internal_metadata_.Clear();
  }
  
  bool StreamPresenceEvent::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.StreamPresenceEvent)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // .nakama.realtime.Stream stream = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_stream()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence joins = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_joins()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // repeated .nakama.realtime.UserPresence leaves = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                  input, add_leaves()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.StreamPresenceEvent)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.StreamPresenceEvent)
    return false;
  #undef DO_
  }
  
  void StreamPresenceEvent::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.StreamPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // .nakama.realtime.Stream stream = 1;
    if (this->has_stream()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        1, this->_internal_stream(), output);
    }
  
    // repeated .nakama.realtime.UserPresence joins = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->joins_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        2,
        this->joins(static_cast<int>(i)),
        output);
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->leaves_size()); i < n; i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        3,
        this->leaves(static_cast<int>(i)),
        output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.StreamPresenceEvent)
  }
  
  ::google::protobuf::uint8* StreamPresenceEvent::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.StreamPresenceEvent)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // .nakama.realtime.Stream stream = 1;
    if (this->has_stream()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          1, this->_internal_stream(), deterministic, target);
    }
  
    // repeated .nakama.realtime.UserPresence joins = 2;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->joins_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          2, this->joins(static_cast<int>(i)), deterministic, target);
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->leaves_size()); i < n; i++) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          3, this->leaves(static_cast<int>(i)), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.StreamPresenceEvent)
    return target;
  }
  
  size_t StreamPresenceEvent::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.StreamPresenceEvent)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // repeated .nakama.realtime.UserPresence joins = 2;
    {
      unsigned int count = static_cast<unsigned int>(this->joins_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->joins(static_cast<int>(i)));
      }
    }
  
    // repeated .nakama.realtime.UserPresence leaves = 3;
    {
      unsigned int count = static_cast<unsigned int>(this->leaves_size());
      total_size += 1UL * count;
      for (unsigned int i = 0; i < count; i++) {
        total_size +=
          ::google::protobuf::internal::WireFormatLite::MessageSize(
            this->leaves(static_cast<int>(i)));
      }
    }
  
    // .nakama.realtime.Stream stream = 1;
    if (this->has_stream()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *stream_);
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void StreamPresenceEvent::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.StreamPresenceEvent)
    GOOGLE_DCHECK_NE(&from, this);
    const StreamPresenceEvent* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const StreamPresenceEvent>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.StreamPresenceEvent)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.StreamPresenceEvent)
      MergeFrom(*source);
    }
  }
  
  void StreamPresenceEvent::MergeFrom(const StreamPresenceEvent& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.StreamPresenceEvent)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    joins_.MergeFrom(from.joins_);
    leaves_.MergeFrom(from.leaves_);
    if (from.has_stream()) {
      mutable_stream()->::nakama::realtime::Stream::MergeFrom(from.stream());
    }
  }
  
  void StreamPresenceEvent::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.StreamPresenceEvent)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void StreamPresenceEvent::CopyFrom(const StreamPresenceEvent& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.StreamPresenceEvent)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool StreamPresenceEvent::IsInitialized() const {
    return true;
  }
  
  void StreamPresenceEvent::Swap(StreamPresenceEvent* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void StreamPresenceEvent::InternalSwap(StreamPresenceEvent* other) {
    using std::swap;
    CastToBase(&joins_)->InternalSwap(CastToBase(&other->joins_));
    CastToBase(&leaves_)->InternalSwap(CastToBase(&other->leaves_));
    swap(stream_, other->stream_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata StreamPresenceEvent::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // ===================================================================
  
  void UserPresence::InitAsDefaultInstance() {
    ::nakama::realtime::_UserPresence_default_instance_._instance.get_mutable()->status_ = const_cast< ::google::protobuf::StringValue*>(
        ::google::protobuf::StringValue::internal_default_instance());
  }
  void UserPresence::clear_status() {
    if (GetArenaNoVirtual() == NULL && status_ != NULL) {
      delete status_;
    }
    status_ = NULL;
  }
  #if !defined(_MSC_VER) || _MSC_VER >= 1900
  const int UserPresence::kUserIdFieldNumber;
  const int UserPresence::kSessionIdFieldNumber;
  const int UserPresence::kUsernameFieldNumber;
  const int UserPresence::kPersistenceFieldNumber;
  const int UserPresence::kStatusFieldNumber;
  #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
  
  UserPresence::UserPresence()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    ::google::protobuf::internal::InitSCC(
        &protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base);
    SharedCtor();
    // @@protoc_insertion_point(constructor:nakama.realtime.UserPresence)
  }
  UserPresence::UserPresence(const UserPresence& from)
    : ::google::protobuf::Message(),
        _internal_metadata_(NULL) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    user_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.user_id().size() > 0) {
      user_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_);
    }
    session_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.session_id().size() > 0) {
      session_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.session_id_);
    }
    username_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (from.username().size() > 0) {
      username_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.username_);
    }
    if (from.has_status()) {
      status_ = new ::google::protobuf::StringValue(*from.status_);
    } else {
      status_ = NULL;
    }
    persistence_ = from.persistence_;
    // @@protoc_insertion_point(copy_constructor:nakama.realtime.UserPresence)
  }
  
  void UserPresence::SharedCtor() {
    user_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    session_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    username_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    ::memset(&status_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&persistence_) -
        reinterpret_cast<char*>(&status_)) + sizeof(persistence_));
  }
  
  UserPresence::~UserPresence() {
    // @@protoc_insertion_point(destructor:nakama.realtime.UserPresence)
    SharedDtor();
  }
  
  void UserPresence::SharedDtor() {
    user_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    session_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    username_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete status_;
  }
  
  void UserPresence::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ::google::protobuf::Descriptor* UserPresence::descriptor() {
    ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
  }
  
  const UserPresence& UserPresence::default_instance() {
    ::google::protobuf::internal::InitSCC(&protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::scc_info_UserPresence.base);
    return *internal_default_instance();
  }
  
  
  void UserPresence::Clear() {
  // @@protoc_insertion_point(message_clear_start:nakama.realtime.UserPresence)
    ::google::protobuf::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    user_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    session_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    username_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == NULL && status_ != NULL) {
      delete status_;
    }
    status_ = NULL;
    persistence_ = false;
    _internal_metadata_.Clear();
  }
  
  bool UserPresence::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:nakama.realtime.UserPresence)
    for (;;) {
      ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // string user_id = 1;
        case 1: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_user_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->user_id().data(), static_cast<int>(this->user_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.UserPresence.user_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string session_id = 2;
        case 2: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_session_id()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->session_id().data(), static_cast<int>(this->session_id().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.UserPresence.session_id"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // string username = 3;
        case 3: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_username()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->username().data(), static_cast<int>(this->username().length()),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "nakama.realtime.UserPresence.username"));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // bool persistence = 4;
        case 4: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {
  
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                   input, &persistence_)));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        // .google.protobuf.StringValue status = 5;
        case 5: {
          if (static_cast< ::google::protobuf::uint8>(tag) ==
              static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                 input, mutable_status()));
          } else {
            goto handle_unusual;
          }
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormat::SkipField(
                input, tag, _internal_metadata_.mutable_unknown_fields()));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:nakama.realtime.UserPresence)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:nakama.realtime.UserPresence)
    return false;
  #undef DO_
  }
  
  void UserPresence::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:nakama.realtime.UserPresence)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string user_id = 1;
    if (this->user_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id().data(), static_cast<int>(this->user_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.UserPresence.user_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->user_id(), output);
    }
  
    // string session_id = 2;
    if (this->session_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->session_id().data(), static_cast<int>(this->session_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.UserPresence.session_id");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        2, this->session_id(), output);
    }
  
    // string username = 3;
    if (this->username().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->username().data(), static_cast<int>(this->username().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.UserPresence.username");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        3, this->username(), output);
    }
  
    // bool persistence = 4;
    if (this->persistence() != 0) {
      ::google::protobuf::internal::WireFormatLite::WriteBool(4, this->persistence(), output);
    }
  
    // .google.protobuf.StringValue status = 5;
    if (this->has_status()) {
      ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
        5, this->_internal_status(), output);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
    }
    // @@protoc_insertion_point(serialize_end:nakama.realtime.UserPresence)
  }
  
  ::google::protobuf::uint8* UserPresence::InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const {
    (void)deterministic; // Unused
    // @@protoc_insertion_point(serialize_to_array_start:nakama.realtime.UserPresence)
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string user_id = 1;
    if (this->user_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->user_id().data(), static_cast<int>(this->user_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.UserPresence.user_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->user_id(), target);
    }
  
    // string session_id = 2;
    if (this->session_id().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->session_id().data(), static_cast<int>(this->session_id().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.UserPresence.session_id");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          2, this->session_id(), target);
    }
  
    // string username = 3;
    if (this->username().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->username().data(), static_cast<int>(this->username().length()),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "nakama.realtime.UserPresence.username");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          3, this->username(), target);
    }
  
    // bool persistence = 4;
    if (this->persistence() != 0) {
      target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(4, this->persistence(), target);
    }
  
    // .google.protobuf.StringValue status = 5;
    if (this->has_status()) {
      target = ::google::protobuf::internal::WireFormatLite::
        InternalWriteMessageToArray(
          5, this->_internal_status(), deterministic, target);
    }
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
    }
    // @@protoc_insertion_point(serialize_to_array_end:nakama.realtime.UserPresence)
    return target;
  }
  
  size_t UserPresence::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:nakama.realtime.UserPresence)
    size_t total_size = 0;
  
    if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
      total_size +=
        ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
          (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
    }
    // string user_id = 1;
    if (this->user_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->user_id());
    }
  
    // string session_id = 2;
    if (this->session_id().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->session_id());
    }
  
    // string username = 3;
    if (this->username().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->username());
    }
  
    // .google.protobuf.StringValue status = 5;
    if (this->has_status()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *status_);
    }
  
    // bool persistence = 4;
    if (this->persistence() != 0) {
      total_size += 1 + 1;
    }
  
    int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void UserPresence::MergeFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:nakama.realtime.UserPresence)
    GOOGLE_DCHECK_NE(&from, this);
    const UserPresence* source =
        ::google::protobuf::internal::DynamicCastToGenerated<const UserPresence>(
            &from);
    if (source == NULL) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:nakama.realtime.UserPresence)
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:nakama.realtime.UserPresence)
      MergeFrom(*source);
    }
  }
  
  void UserPresence::MergeFrom(const UserPresence& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:nakama.realtime.UserPresence)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::google::protobuf::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from.user_id().size() > 0) {
  
      user_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.user_id_);
    }
    if (from.session_id().size() > 0) {
  
      session_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.session_id_);
    }
    if (from.username().size() > 0) {
  
      username_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.username_);
    }
    if (from.has_status()) {
      mutable_status()->::google::protobuf::StringValue::MergeFrom(from.status());
    }
    if (from.persistence() != 0) {
      set_persistence(from.persistence());
    }
  }
  
  void UserPresence::CopyFrom(const ::google::protobuf::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:nakama.realtime.UserPresence)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void UserPresence::CopyFrom(const UserPresence& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:nakama.realtime.UserPresence)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool UserPresence::IsInitialized() const {
    return true;
  }
  
  void UserPresence::Swap(UserPresence* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void UserPresence::InternalSwap(UserPresence* other) {
    using std::swap;
    user_id_.Swap(&other->user_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    session_id_.Swap(&other->session_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    username_.Swap(&other->username_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(status_, other->status_);
    swap(persistence_, other->persistence_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
  }
  
  ::google::protobuf::Metadata UserPresence::GetMetadata() const {
    protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::protobuf_AssignDescriptorsOnce();
    return ::protobuf_github_2ecom_2fheroiclabs_2fnakama_2dcommon_2frtapi_2frealtime_2eproto::file_level_metadata[kIndexInFileMessages];
  }
  
  
  // @@protoc_insertion_point(namespace_scope)
  }  // namespace realtime
  }  // namespace nakama
  namespace google {
  namespace protobuf {
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Envelope* Arena::CreateMaybeMessage< ::nakama::realtime::Envelope >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Envelope >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Channel* Arena::CreateMaybeMessage< ::nakama::realtime::Channel >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Channel >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::ChannelJoin* Arena::CreateMaybeMessage< ::nakama::realtime::ChannelJoin >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::ChannelJoin >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::ChannelLeave* Arena::CreateMaybeMessage< ::nakama::realtime::ChannelLeave >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::ChannelLeave >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::ChannelMessageAck* Arena::CreateMaybeMessage< ::nakama::realtime::ChannelMessageAck >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::ChannelMessageAck >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::ChannelMessageSend* Arena::CreateMaybeMessage< ::nakama::realtime::ChannelMessageSend >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::ChannelMessageSend >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::ChannelMessageUpdate* Arena::CreateMaybeMessage< ::nakama::realtime::ChannelMessageUpdate >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::ChannelMessageUpdate >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::ChannelMessageRemove* Arena::CreateMaybeMessage< ::nakama::realtime::ChannelMessageRemove >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::ChannelMessageRemove >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::ChannelPresenceEvent* Arena::CreateMaybeMessage< ::nakama::realtime::ChannelPresenceEvent >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::ChannelPresenceEvent >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Error_ContextEntry_DoNotUse* Arena::CreateMaybeMessage< ::nakama::realtime::Error_ContextEntry_DoNotUse >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Error_ContextEntry_DoNotUse >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Error* Arena::CreateMaybeMessage< ::nakama::realtime::Error >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Error >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Match* Arena::CreateMaybeMessage< ::nakama::realtime::Match >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Match >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchCreate* Arena::CreateMaybeMessage< ::nakama::realtime::MatchCreate >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchCreate >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchData* Arena::CreateMaybeMessage< ::nakama::realtime::MatchData >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchData >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchDataSend* Arena::CreateMaybeMessage< ::nakama::realtime::MatchDataSend >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchDataSend >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse* Arena::CreateMaybeMessage< ::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchJoin_MetadataEntry_DoNotUse >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchJoin* Arena::CreateMaybeMessage< ::nakama::realtime::MatchJoin >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchJoin >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchLeave* Arena::CreateMaybeMessage< ::nakama::realtime::MatchLeave >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchLeave >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchPresenceEvent* Arena::CreateMaybeMessage< ::nakama::realtime::MatchPresenceEvent >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchPresenceEvent >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse* Arena::CreateMaybeMessage< ::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchmakerAdd_StringPropertiesEntry_DoNotUse >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse* Arena::CreateMaybeMessage< ::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchmakerAdd_NumericPropertiesEntry_DoNotUse >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchmakerAdd* Arena::CreateMaybeMessage< ::nakama::realtime::MatchmakerAdd >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchmakerAdd >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse* Arena::CreateMaybeMessage< ::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchmakerMatched_MatchmakerUser_StringPropertiesEntry_DoNotUse >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse* Arena::CreateMaybeMessage< ::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchmakerMatched_MatchmakerUser_NumericPropertiesEntry_DoNotUse >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchmakerMatched_MatchmakerUser* Arena::CreateMaybeMessage< ::nakama::realtime::MatchmakerMatched_MatchmakerUser >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchmakerMatched_MatchmakerUser >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchmakerMatched* Arena::CreateMaybeMessage< ::nakama::realtime::MatchmakerMatched >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchmakerMatched >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchmakerRemove* Arena::CreateMaybeMessage< ::nakama::realtime::MatchmakerRemove >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchmakerRemove >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::MatchmakerTicket* Arena::CreateMaybeMessage< ::nakama::realtime::MatchmakerTicket >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::MatchmakerTicket >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Notifications* Arena::CreateMaybeMessage< ::nakama::realtime::Notifications >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Notifications >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Ping* Arena::CreateMaybeMessage< ::nakama::realtime::Ping >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Ping >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Pong* Arena::CreateMaybeMessage< ::nakama::realtime::Pong >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Pong >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Status* Arena::CreateMaybeMessage< ::nakama::realtime::Status >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Status >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::StatusFollow* Arena::CreateMaybeMessage< ::nakama::realtime::StatusFollow >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::StatusFollow >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::StatusPresenceEvent* Arena::CreateMaybeMessage< ::nakama::realtime::StatusPresenceEvent >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::StatusPresenceEvent >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::StatusUnfollow* Arena::CreateMaybeMessage< ::nakama::realtime::StatusUnfollow >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::StatusUnfollow >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::StatusUpdate* Arena::CreateMaybeMessage< ::nakama::realtime::StatusUpdate >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::StatusUpdate >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::Stream* Arena::CreateMaybeMessage< ::nakama::realtime::Stream >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::Stream >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::StreamData* Arena::CreateMaybeMessage< ::nakama::realtime::StreamData >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::StreamData >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::StreamPresenceEvent* Arena::CreateMaybeMessage< ::nakama::realtime::StreamPresenceEvent >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::StreamPresenceEvent >(arena);
  }
  template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::nakama::realtime::UserPresence* Arena::CreateMaybeMessage< ::nakama::realtime::UserPresence >(Arena* arena) {
    return Arena::CreateInternal< ::nakama::realtime::UserPresence >(arena);
  }
  }  // namespace protobuf
  }  // namespace google
  
  // @@protoc_insertion_point(global_scope)
  