From aaaee303689069a0959fd714adf01496dba71467 Mon Sep 17 00:00:00 2001 From: xkeyC <3334969096@qq.com> Date: Tue, 18 Nov 2025 23:10:04 +0800 Subject: [PATCH] feat: init Party Room --- lib/common/conf/url_conf.dart | 7 + lib/generated/proto/auth/auth.pb.dart | 731 ++++ lib/generated/proto/auth/auth.pbenum.dart | 11 + lib/generated/proto/auth/auth.pbgrpc.dart | 187 ++ lib/generated/proto/auth/auth.pbjson.dart | 188 ++ lib/generated/proto/common/common.pb.dart | 601 ++++ lib/generated/proto/common/common.pbenum.dart | 11 + lib/generated/proto/common/common.pbgrpc.dart | 164 + lib/generated/proto/common/common.pbjson.dart | 160 + lib/generated/proto/partroom/partroom.pb.dart | 2980 +++++++++++++++++ .../proto/partroom/partroom.pbenum.dart | 56 + .../proto/partroom/partroom.pbgrpc.dart | 543 +++ .../proto/partroom/partroom.pbjson.dart | 759 +++++ lib/provider/party_room.dart | 889 +++++ lib/provider/party_room.freezed.dart | 1153 +++++++ lib/provider/party_room.g.dart | 68 + .../input_method_dialog_ui_model.g.dart | 2 +- .../localization/localization_ui_model.dart | 8 +- .../localization/localization_ui_model.g.dart | 2 +- lib/ui/index_ui.dart | 135 +- lib/ui/nav/nav_state.dart | 2 + lib/ui/nav/nav_state.g.dart | 2 +- lib/ui/party_room/party_room_ui.dart | 55 +- lib/ui/party_room/party_room_ui_model.dart | 262 ++ .../party_room_ui_model.freezed.dart | 313 ++ lib/ui/party_room/party_room_ui_model.g.dart | 63 + .../widgets/create_room_dialog.dart | 190 ++ .../widgets/party_room_connect_page.dart | 98 + .../widgets/party_room_detail_page.dart | 689 ++++ .../widgets/party_room_list_page.dart | 371 ++ .../widgets/party_room_register_page.dart | 364 ++ pubspec.lock | 72 +- pubspec.yaml | 8 +- update_grpc.bat | 1 - 34 files changed, 10999 insertions(+), 146 deletions(-) create mode 100644 lib/generated/proto/auth/auth.pb.dart create mode 100644 lib/generated/proto/auth/auth.pbenum.dart create mode 100644 lib/generated/proto/auth/auth.pbgrpc.dart create mode 100644 lib/generated/proto/auth/auth.pbjson.dart create mode 100644 lib/generated/proto/common/common.pb.dart create mode 100644 lib/generated/proto/common/common.pbenum.dart create mode 100644 lib/generated/proto/common/common.pbgrpc.dart create mode 100644 lib/generated/proto/common/common.pbjson.dart create mode 100644 lib/generated/proto/partroom/partroom.pb.dart create mode 100644 lib/generated/proto/partroom/partroom.pbenum.dart create mode 100644 lib/generated/proto/partroom/partroom.pbgrpc.dart create mode 100644 lib/generated/proto/partroom/partroom.pbjson.dart create mode 100644 lib/provider/party_room.dart create mode 100644 lib/provider/party_room.freezed.dart create mode 100644 lib/provider/party_room.g.dart create mode 100644 lib/ui/party_room/party_room_ui_model.dart create mode 100644 lib/ui/party_room/party_room_ui_model.freezed.dart create mode 100644 lib/ui/party_room/party_room_ui_model.g.dart create mode 100644 lib/ui/party_room/widgets/create_room_dialog.dart create mode 100644 lib/ui/party_room/widgets/party_room_connect_page.dart create mode 100644 lib/ui/party_room/widgets/party_room_detail_page.dart create mode 100644 lib/ui/party_room/widgets/party_room_list_page.dart create mode 100644 lib/ui/party_room/widgets/party_room_register_page.dart delete mode 100644 update_grpc.bat diff --git a/lib/common/conf/url_conf.dart b/lib/common/conf/url_conf.dart index cee49ce..c46a977 100644 --- a/lib/common/conf/url_conf.dart +++ b/lib/common/conf/url_conf.dart @@ -32,6 +32,13 @@ class URLConf { static String get devReleaseUrl => "$gitApiHome/SCToolBox/Release/releases"; + /// PartyRoom Server + static const String partyRoomServerAddress = "localhost"; + static const int partyRoomServerPort = 50051; + + /// RSI Avatar Base URL + static const String rsiAvatarBaseUrl = "https://robertsspaceindustries.com"; + static Future checkHost() async { // 使用 DNS 获取可用列表 final gitApiList = _genFinalList(await dnsLookupTxt("git.dns.scbox.org")); diff --git a/lib/generated/proto/auth/auth.pb.dart b/lib/generated/proto/auth/auth.pb.dart new file mode 100644 index 0000000..2dbcda6 --- /dev/null +++ b/lib/generated/proto/auth/auth.pb.dart @@ -0,0 +1,731 @@ +// This is a generated file - do not edit. +// +// Generated from proto/auth/auth.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions; + +/// 服务状态请求 +class StatusRequest extends $pb.GeneratedMessage { + factory StatusRequest() => create(); + + StatusRequest._(); + + factory StatusRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory StatusRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'StatusRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + StatusRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + StatusRequest copyWith(void Function(StatusRequest) updates) => + super.copyWith((message) => updates(message as StatusRequest)) + as StatusRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static StatusRequest create() => StatusRequest._(); + @$core.override + StatusRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static StatusRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static StatusRequest? _defaultInstance; +} + +/// 服务状态响应 +class StatusResponse extends $pb.GeneratedMessage { + factory StatusResponse({ + $core.bool? online, + $core.String? message, + $fixnum.Int64? serverTime, + }) { + final result = create(); + if (online != null) result.online = online; + if (message != null) result.message = message; + if (serverTime != null) result.serverTime = serverTime; + return result; + } + + StatusResponse._(); + + factory StatusResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory StatusResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'StatusResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'online') + ..aOS(2, _omitFieldNames ? '' : 'message') + ..aInt64(3, _omitFieldNames ? '' : 'serverTime') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + StatusResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + StatusResponse copyWith(void Function(StatusResponse) updates) => + super.copyWith((message) => updates(message as StatusResponse)) + as StatusResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static StatusResponse create() => StatusResponse._(); + @$core.override + StatusResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static StatusResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static StatusResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get online => $_getBF(0); + @$pb.TagNumber(1) + set online($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasOnline() => $_has(0); + @$pb.TagNumber(1) + void clearOnline() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get message => $_getSZ(1); + @$pb.TagNumber(2) + set message($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasMessage() => $_has(1); + @$pb.TagNumber(2) + void clearMessage() => $_clearField(2); + + @$pb.TagNumber(3) + $fixnum.Int64 get serverTime => $_getI64(2); + @$pb.TagNumber(3) + set serverTime($fixnum.Int64 value) => $_setInt64(2, value); + @$pb.TagNumber(3) + $core.bool hasServerTime() => $_has(2); + @$pb.TagNumber(3) + void clearServerTime() => $_clearField(3); +} + +/// 登录请求 +class LoginRequest extends $pb.GeneratedMessage { + factory LoginRequest() => create(); + + LoginRequest._(); + + factory LoginRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory LoginRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'LoginRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + LoginRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + LoginRequest copyWith(void Function(LoginRequest) updates) => + super.copyWith((message) => updates(message as LoginRequest)) + as LoginRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static LoginRequest create() => LoginRequest._(); + @$core.override + LoginRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static LoginRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static LoginRequest? _defaultInstance; +} + +/// 游戏用户信息 +class GameUserInfo extends $pb.GeneratedMessage { + factory GameUserInfo({ + $core.String? gameUserId, + $core.String? handleName, + $core.String? avatarUrl, + $core.String? citizenRecord, + $fixnum.Int64? enlistedDate, + }) { + final result = create(); + if (gameUserId != null) result.gameUserId = gameUserId; + if (handleName != null) result.handleName = handleName; + if (avatarUrl != null) result.avatarUrl = avatarUrl; + if (citizenRecord != null) result.citizenRecord = citizenRecord; + if (enlistedDate != null) result.enlistedDate = enlistedDate; + return result; + } + + GameUserInfo._(); + + factory GameUserInfo.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GameUserInfo.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GameUserInfo', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'gameUserId') + ..aOS(2, _omitFieldNames ? '' : 'handleName') + ..aOS(3, _omitFieldNames ? '' : 'avatarUrl') + ..aOS(4, _omitFieldNames ? '' : 'citizenRecord') + ..aInt64(5, _omitFieldNames ? '' : 'enlistedDate') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GameUserInfo clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GameUserInfo copyWith(void Function(GameUserInfo) updates) => + super.copyWith((message) => updates(message as GameUserInfo)) + as GameUserInfo; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GameUserInfo create() => GameUserInfo._(); + @$core.override + GameUserInfo createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GameUserInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GameUserInfo? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get gameUserId => $_getSZ(0); + @$pb.TagNumber(1) + set gameUserId($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasGameUserId() => $_has(0); + @$pb.TagNumber(1) + void clearGameUserId() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get handleName => $_getSZ(1); + @$pb.TagNumber(2) + set handleName($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasHandleName() => $_has(1); + @$pb.TagNumber(2) + void clearHandleName() => $_clearField(2); + + @$pb.TagNumber(3) + $core.String get avatarUrl => $_getSZ(2); + @$pb.TagNumber(3) + set avatarUrl($core.String value) => $_setString(2, value); + @$pb.TagNumber(3) + $core.bool hasAvatarUrl() => $_has(2); + @$pb.TagNumber(3) + void clearAvatarUrl() => $_clearField(3); + + @$pb.TagNumber(4) + $core.String get citizenRecord => $_getSZ(3); + @$pb.TagNumber(4) + set citizenRecord($core.String value) => $_setString(3, value); + @$pb.TagNumber(4) + $core.bool hasCitizenRecord() => $_has(3); + @$pb.TagNumber(4) + void clearCitizenRecord() => $_clearField(4); + + @$pb.TagNumber(5) + $fixnum.Int64 get enlistedDate => $_getI64(4); + @$pb.TagNumber(5) + set enlistedDate($fixnum.Int64 value) => $_setInt64(4, value); + @$pb.TagNumber(5) + $core.bool hasEnlistedDate() => $_has(4); + @$pb.TagNumber(5) + void clearEnlistedDate() => $_clearField(5); +} + +/// 登录响应 +class LoginResponse extends $pb.GeneratedMessage { + factory LoginResponse({ + $core.String? uuid, + GameUserInfo? userInfo, + $fixnum.Int64? lastLoginTime, + }) { + final result = create(); + if (uuid != null) result.uuid = uuid; + if (userInfo != null) result.userInfo = userInfo; + if (lastLoginTime != null) result.lastLoginTime = lastLoginTime; + return result; + } + + LoginResponse._(); + + factory LoginResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory LoginResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'LoginResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'uuid') + ..aOM(2, _omitFieldNames ? '' : 'userInfo', + subBuilder: GameUserInfo.create) + ..aInt64(3, _omitFieldNames ? '' : 'lastLoginTime') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + LoginResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + LoginResponse copyWith(void Function(LoginResponse) updates) => + super.copyWith((message) => updates(message as LoginResponse)) + as LoginResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static LoginResponse create() => LoginResponse._(); + @$core.override + LoginResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static LoginResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static LoginResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get uuid => $_getSZ(0); + @$pb.TagNumber(1) + set uuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasUuid() => $_has(0); + @$pb.TagNumber(1) + void clearUuid() => $_clearField(1); + + @$pb.TagNumber(2) + GameUserInfo get userInfo => $_getN(1); + @$pb.TagNumber(2) + set userInfo(GameUserInfo value) => $_setField(2, value); + @$pb.TagNumber(2) + $core.bool hasUserInfo() => $_has(1); + @$pb.TagNumber(2) + void clearUserInfo() => $_clearField(2); + @$pb.TagNumber(2) + GameUserInfo ensureUserInfo() => $_ensure(1); + + @$pb.TagNumber(3) + $fixnum.Int64 get lastLoginTime => $_getI64(2); + @$pb.TagNumber(3) + set lastLoginTime($fixnum.Int64 value) => $_setInt64(2, value); + @$pb.TagNumber(3) + $core.bool hasLastLoginTime() => $_has(2); + @$pb.TagNumber(3) + void clearLastLoginTime() => $_clearField(3); +} + +/// 预注册请求 +class PreRegisterRequest extends $pb.GeneratedMessage { + factory PreRegisterRequest({ + $core.String? uuid, + $core.String? gameUserId, + }) { + final result = create(); + if (uuid != null) result.uuid = uuid; + if (gameUserId != null) result.gameUserId = gameUserId; + return result; + } + + PreRegisterRequest._(); + + factory PreRegisterRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory PreRegisterRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'PreRegisterRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'uuid') + ..aOS(2, _omitFieldNames ? '' : 'gameUserId') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + PreRegisterRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + PreRegisterRequest copyWith(void Function(PreRegisterRequest) updates) => + super.copyWith((message) => updates(message as PreRegisterRequest)) + as PreRegisterRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static PreRegisterRequest create() => PreRegisterRequest._(); + @$core.override + PreRegisterRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static PreRegisterRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static PreRegisterRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get uuid => $_getSZ(0); + @$pb.TagNumber(1) + set uuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasUuid() => $_has(0); + @$pb.TagNumber(1) + void clearUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get gameUserId => $_getSZ(1); + @$pb.TagNumber(2) + set gameUserId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasGameUserId() => $_has(1); + @$pb.TagNumber(2) + void clearGameUserId() => $_clearField(2); +} + +/// 预注册响应 +class PreRegisterResponse extends $pb.GeneratedMessage { + factory PreRegisterResponse({ + $core.String? verificationCode, + $fixnum.Int64? expireTime, + }) { + final result = create(); + if (verificationCode != null) result.verificationCode = verificationCode; + if (expireTime != null) result.expireTime = expireTime; + return result; + } + + PreRegisterResponse._(); + + factory PreRegisterResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory PreRegisterResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'PreRegisterResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'verificationCode') + ..aInt64(2, _omitFieldNames ? '' : 'expireTime') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + PreRegisterResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + PreRegisterResponse copyWith(void Function(PreRegisterResponse) updates) => + super.copyWith((message) => updates(message as PreRegisterResponse)) + as PreRegisterResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static PreRegisterResponse create() => PreRegisterResponse._(); + @$core.override + PreRegisterResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static PreRegisterResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static PreRegisterResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get verificationCode => $_getSZ(0); + @$pb.TagNumber(1) + set verificationCode($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasVerificationCode() => $_has(0); + @$pb.TagNumber(1) + void clearVerificationCode() => $_clearField(1); + + @$pb.TagNumber(2) + $fixnum.Int64 get expireTime => $_getI64(1); + @$pb.TagNumber(2) + set expireTime($fixnum.Int64 value) => $_setInt64(1, value); + @$pb.TagNumber(2) + $core.bool hasExpireTime() => $_has(1); + @$pb.TagNumber(2) + void clearExpireTime() => $_clearField(2); +} + +/// 注册请求 +class RegisterRequest extends $pb.GeneratedMessage { + factory RegisterRequest({ + $core.String? uuid, + $core.String? gameUserId, + }) { + final result = create(); + if (uuid != null) result.uuid = uuid; + if (gameUserId != null) result.gameUserId = gameUserId; + return result; + } + + RegisterRequest._(); + + factory RegisterRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory RegisterRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'RegisterRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'uuid') + ..aOS(2, _omitFieldNames ? '' : 'gameUserId') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RegisterRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RegisterRequest copyWith(void Function(RegisterRequest) updates) => + super.copyWith((message) => updates(message as RegisterRequest)) + as RegisterRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static RegisterRequest create() => RegisterRequest._(); + @$core.override + RegisterRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static RegisterRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static RegisterRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get uuid => $_getSZ(0); + @$pb.TagNumber(1) + set uuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasUuid() => $_has(0); + @$pb.TagNumber(1) + void clearUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get gameUserId => $_getSZ(1); + @$pb.TagNumber(2) + set gameUserId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasGameUserId() => $_has(1); + @$pb.TagNumber(2) + void clearGameUserId() => $_clearField(2); +} + +/// 注册响应 +class RegisterResponse extends $pb.GeneratedMessage { + factory RegisterResponse({ + $core.String? partyRoomSecretKey, + GameUserInfo? userInfo, + }) { + final result = create(); + if (partyRoomSecretKey != null) + result.partyRoomSecretKey = partyRoomSecretKey; + if (userInfo != null) result.userInfo = userInfo; + return result; + } + + RegisterResponse._(); + + factory RegisterResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory RegisterResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'RegisterResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'partyRoomSecretKey') + ..aOM(2, _omitFieldNames ? '' : 'userInfo', + subBuilder: GameUserInfo.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RegisterResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RegisterResponse copyWith(void Function(RegisterResponse) updates) => + super.copyWith((message) => updates(message as RegisterResponse)) + as RegisterResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static RegisterResponse create() => RegisterResponse._(); + @$core.override + RegisterResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static RegisterResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static RegisterResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get partyRoomSecretKey => $_getSZ(0); + @$pb.TagNumber(1) + set partyRoomSecretKey($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasPartyRoomSecretKey() => $_has(0); + @$pb.TagNumber(1) + void clearPartyRoomSecretKey() => $_clearField(1); + + @$pb.TagNumber(2) + GameUserInfo get userInfo => $_getN(1); + @$pb.TagNumber(2) + set userInfo(GameUserInfo value) => $_setField(2, value); + @$pb.TagNumber(2) + $core.bool hasUserInfo() => $_has(1); + @$pb.TagNumber(2) + void clearUserInfo() => $_clearField(2); + @$pb.TagNumber(2) + GameUserInfo ensureUserInfo() => $_ensure(1); +} + +/// 注销请求 +class UnregisterRequest extends $pb.GeneratedMessage { + factory UnregisterRequest() => create(); + + UnregisterRequest._(); + + factory UnregisterRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory UnregisterRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'UnregisterRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + UnregisterRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + UnregisterRequest copyWith(void Function(UnregisterRequest) updates) => + super.copyWith((message) => updates(message as UnregisterRequest)) + as UnregisterRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static UnregisterRequest create() => UnregisterRequest._(); + @$core.override + UnregisterRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static UnregisterRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static UnregisterRequest? _defaultInstance; +} + +/// 注销响应 +class UnregisterResponse extends $pb.GeneratedMessage { + factory UnregisterResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + UnregisterResponse._(); + + factory UnregisterResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory UnregisterResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'UnregisterResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'auth'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + UnregisterResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + UnregisterResponse copyWith(void Function(UnregisterResponse) updates) => + super.copyWith((message) => updates(message as UnregisterResponse)) + as UnregisterResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static UnregisterResponse create() => UnregisterResponse._(); + @$core.override + UnregisterResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static UnregisterResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static UnregisterResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +const $core.bool _omitFieldNames = + $core.bool.fromEnvironment('protobuf.omit_field_names'); +const $core.bool _omitMessageNames = + $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/lib/generated/proto/auth/auth.pbenum.dart b/lib/generated/proto/auth/auth.pbenum.dart new file mode 100644 index 0000000..d79107f --- /dev/null +++ b/lib/generated/proto/auth/auth.pbenum.dart @@ -0,0 +1,11 @@ +// This is a generated file - do not edit. +// +// Generated from proto/auth/auth.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names diff --git a/lib/generated/proto/auth/auth.pbgrpc.dart b/lib/generated/proto/auth/auth.pbgrpc.dart new file mode 100644 index 0000000..e366d42 --- /dev/null +++ b/lib/generated/proto/auth/auth.pbgrpc.dart @@ -0,0 +1,187 @@ +// This is a generated file - do not edit. +// +// Generated from proto/auth/auth.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names + +import 'dart:async' as $async; +import 'dart:core' as $core; + +import 'package:grpc/service_api.dart' as $grpc; +import 'package:protobuf/protobuf.dart' as $pb; + +import 'auth.pb.dart' as $0; + +export 'auth.pb.dart'; + +/// 认证服务 +@$pb.GrpcServiceName('auth.AuthService') +class AuthServiceClient extends $grpc.Client { + /// The hostname for this service. + static const $core.String defaultHost = ''; + + /// OAuth scopes needed for the client. + static const $core.List<$core.String> oauthScopes = [ + '', + ]; + + AuthServiceClient(super.channel, {super.options, super.interceptors}); + + /// 获取服务状态(匿名接口) + $grpc.ResponseFuture<$0.StatusResponse> status( + $0.StatusRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$status, request, options: options); + } + + /// 获取当前账号状态(需认证) + $grpc.ResponseFuture<$0.LoginResponse> login( + $0.LoginRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$login, request, options: options); + } + + /// 请求注册(匿名接口) + $grpc.ResponseFuture<$0.PreRegisterResponse> preRegister( + $0.PreRegisterRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$preRegister, request, options: options); + } + + /// 注册账号(匿名接口) + $grpc.ResponseFuture<$0.RegisterResponse> register( + $0.RegisterRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$register, request, options: options); + } + + /// 注销账号(需认证) + $grpc.ResponseFuture<$0.UnregisterResponse> unregister( + $0.UnregisterRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$unregister, request, options: options); + } + + // method descriptors + + static final _$status = + $grpc.ClientMethod<$0.StatusRequest, $0.StatusResponse>( + '/auth.AuthService/Status', + ($0.StatusRequest value) => value.writeToBuffer(), + $0.StatusResponse.fromBuffer); + static final _$login = $grpc.ClientMethod<$0.LoginRequest, $0.LoginResponse>( + '/auth.AuthService/Login', + ($0.LoginRequest value) => value.writeToBuffer(), + $0.LoginResponse.fromBuffer); + static final _$preRegister = + $grpc.ClientMethod<$0.PreRegisterRequest, $0.PreRegisterResponse>( + '/auth.AuthService/PreRegister', + ($0.PreRegisterRequest value) => value.writeToBuffer(), + $0.PreRegisterResponse.fromBuffer); + static final _$register = + $grpc.ClientMethod<$0.RegisterRequest, $0.RegisterResponse>( + '/auth.AuthService/Register', + ($0.RegisterRequest value) => value.writeToBuffer(), + $0.RegisterResponse.fromBuffer); + static final _$unregister = + $grpc.ClientMethod<$0.UnregisterRequest, $0.UnregisterResponse>( + '/auth.AuthService/Unregister', + ($0.UnregisterRequest value) => value.writeToBuffer(), + $0.UnregisterResponse.fromBuffer); +} + +@$pb.GrpcServiceName('auth.AuthService') +abstract class AuthServiceBase extends $grpc.Service { + $core.String get $name => 'auth.AuthService'; + + AuthServiceBase() { + $addMethod($grpc.ServiceMethod<$0.StatusRequest, $0.StatusResponse>( + 'Status', + status_Pre, + false, + false, + ($core.List<$core.int> value) => $0.StatusRequest.fromBuffer(value), + ($0.StatusResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.LoginRequest, $0.LoginResponse>( + 'Login', + login_Pre, + false, + false, + ($core.List<$core.int> value) => $0.LoginRequest.fromBuffer(value), + ($0.LoginResponse value) => value.writeToBuffer())); + $addMethod( + $grpc.ServiceMethod<$0.PreRegisterRequest, $0.PreRegisterResponse>( + 'PreRegister', + preRegister_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.PreRegisterRequest.fromBuffer(value), + ($0.PreRegisterResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.RegisterRequest, $0.RegisterResponse>( + 'Register', + register_Pre, + false, + false, + ($core.List<$core.int> value) => $0.RegisterRequest.fromBuffer(value), + ($0.RegisterResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.UnregisterRequest, $0.UnregisterResponse>( + 'Unregister', + unregister_Pre, + false, + false, + ($core.List<$core.int> value) => $0.UnregisterRequest.fromBuffer(value), + ($0.UnregisterResponse value) => value.writeToBuffer())); + } + + $async.Future<$0.StatusResponse> status_Pre( + $grpc.ServiceCall $call, $async.Future<$0.StatusRequest> $request) async { + return status($call, await $request); + } + + $async.Future<$0.StatusResponse> status( + $grpc.ServiceCall call, $0.StatusRequest request); + + $async.Future<$0.LoginResponse> login_Pre( + $grpc.ServiceCall $call, $async.Future<$0.LoginRequest> $request) async { + return login($call, await $request); + } + + $async.Future<$0.LoginResponse> login( + $grpc.ServiceCall call, $0.LoginRequest request); + + $async.Future<$0.PreRegisterResponse> preRegister_Pre($grpc.ServiceCall $call, + $async.Future<$0.PreRegisterRequest> $request) async { + return preRegister($call, await $request); + } + + $async.Future<$0.PreRegisterResponse> preRegister( + $grpc.ServiceCall call, $0.PreRegisterRequest request); + + $async.Future<$0.RegisterResponse> register_Pre($grpc.ServiceCall $call, + $async.Future<$0.RegisterRequest> $request) async { + return register($call, await $request); + } + + $async.Future<$0.RegisterResponse> register( + $grpc.ServiceCall call, $0.RegisterRequest request); + + $async.Future<$0.UnregisterResponse> unregister_Pre($grpc.ServiceCall $call, + $async.Future<$0.UnregisterRequest> $request) async { + return unregister($call, await $request); + } + + $async.Future<$0.UnregisterResponse> unregister( + $grpc.ServiceCall call, $0.UnregisterRequest request); +} diff --git a/lib/generated/proto/auth/auth.pbjson.dart b/lib/generated/proto/auth/auth.pbjson.dart new file mode 100644 index 0000000..076cbdd --- /dev/null +++ b/lib/generated/proto/auth/auth.pbjson.dart @@ -0,0 +1,188 @@ +// This is a generated file - do not edit. +// +// Generated from proto/auth/auth.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names, unused_import + +import 'dart:convert' as $convert; +import 'dart:core' as $core; +import 'dart:typed_data' as $typed_data; + +@$core.Deprecated('Use statusRequestDescriptor instead') +const StatusRequest$json = { + '1': 'StatusRequest', +}; + +/// Descriptor for `StatusRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List statusRequestDescriptor = + $convert.base64Decode('Cg1TdGF0dXNSZXF1ZXN0'); + +@$core.Deprecated('Use statusResponseDescriptor instead') +const StatusResponse$json = { + '1': 'StatusResponse', + '2': [ + {'1': 'online', '3': 1, '4': 1, '5': 8, '10': 'online'}, + {'1': 'message', '3': 2, '4': 1, '5': 9, '10': 'message'}, + {'1': 'server_time', '3': 3, '4': 1, '5': 3, '10': 'serverTime'}, + ], +}; + +/// Descriptor for `StatusResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List statusResponseDescriptor = $convert.base64Decode( + 'Cg5TdGF0dXNSZXNwb25zZRIWCgZvbmxpbmUYASABKAhSBm9ubGluZRIYCgdtZXNzYWdlGAIgAS' + 'gJUgdtZXNzYWdlEh8KC3NlcnZlcl90aW1lGAMgASgDUgpzZXJ2ZXJUaW1l'); + +@$core.Deprecated('Use loginRequestDescriptor instead') +const LoginRequest$json = { + '1': 'LoginRequest', +}; + +/// Descriptor for `LoginRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List loginRequestDescriptor = + $convert.base64Decode('CgxMb2dpblJlcXVlc3Q='); + +@$core.Deprecated('Use gameUserInfoDescriptor instead') +const GameUserInfo$json = { + '1': 'GameUserInfo', + '2': [ + {'1': 'game_user_id', '3': 1, '4': 1, '5': 9, '10': 'gameUserId'}, + {'1': 'handle_name', '3': 2, '4': 1, '5': 9, '10': 'handleName'}, + {'1': 'avatar_url', '3': 3, '4': 1, '5': 9, '10': 'avatarUrl'}, + {'1': 'citizen_record', '3': 4, '4': 1, '5': 9, '10': 'citizenRecord'}, + {'1': 'enlisted_date', '3': 5, '4': 1, '5': 3, '10': 'enlistedDate'}, + ], +}; + +/// Descriptor for `GameUserInfo`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gameUserInfoDescriptor = $convert.base64Decode( + 'CgxHYW1lVXNlckluZm8SIAoMZ2FtZV91c2VyX2lkGAEgASgJUgpnYW1lVXNlcklkEh8KC2hhbm' + 'RsZV9uYW1lGAIgASgJUgpoYW5kbGVOYW1lEh0KCmF2YXRhcl91cmwYAyABKAlSCWF2YXRhclVy' + 'bBIlCg5jaXRpemVuX3JlY29yZBgEIAEoCVINY2l0aXplblJlY29yZBIjCg1lbmxpc3RlZF9kYX' + 'RlGAUgASgDUgxlbmxpc3RlZERhdGU='); + +@$core.Deprecated('Use loginResponseDescriptor instead') +const LoginResponse$json = { + '1': 'LoginResponse', + '2': [ + {'1': 'uuid', '3': 1, '4': 1, '5': 9, '10': 'uuid'}, + { + '1': 'user_info', + '3': 2, + '4': 1, + '5': 11, + '6': '.auth.GameUserInfo', + '10': 'userInfo' + }, + {'1': 'last_login_time', '3': 3, '4': 1, '5': 3, '10': 'lastLoginTime'}, + ], +}; + +/// Descriptor for `LoginResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List loginResponseDescriptor = $convert.base64Decode( + 'Cg1Mb2dpblJlc3BvbnNlEhIKBHV1aWQYASABKAlSBHV1aWQSLwoJdXNlcl9pbmZvGAIgASgLMh' + 'IuYXV0aC5HYW1lVXNlckluZm9SCHVzZXJJbmZvEiYKD2xhc3RfbG9naW5fdGltZRgDIAEoA1IN' + 'bGFzdExvZ2luVGltZQ=='); + +@$core.Deprecated('Use preRegisterRequestDescriptor instead') +const PreRegisterRequest$json = { + '1': 'PreRegisterRequest', + '2': [ + {'1': 'uuid', '3': 1, '4': 1, '5': 9, '10': 'uuid'}, + {'1': 'game_user_id', '3': 2, '4': 1, '5': 9, '10': 'gameUserId'}, + ], +}; + +/// Descriptor for `PreRegisterRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List preRegisterRequestDescriptor = $convert.base64Decode( + 'ChJQcmVSZWdpc3RlclJlcXVlc3QSEgoEdXVpZBgBIAEoCVIEdXVpZBIgCgxnYW1lX3VzZXJfaW' + 'QYAiABKAlSCmdhbWVVc2VySWQ='); + +@$core.Deprecated('Use preRegisterResponseDescriptor instead') +const PreRegisterResponse$json = { + '1': 'PreRegisterResponse', + '2': [ + { + '1': 'verification_code', + '3': 1, + '4': 1, + '5': 9, + '10': 'verificationCode' + }, + {'1': 'expire_time', '3': 2, '4': 1, '5': 3, '10': 'expireTime'}, + ], +}; + +/// Descriptor for `PreRegisterResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List preRegisterResponseDescriptor = $convert.base64Decode( + 'ChNQcmVSZWdpc3RlclJlc3BvbnNlEisKEXZlcmlmaWNhdGlvbl9jb2RlGAEgASgJUhB2ZXJpZm' + 'ljYXRpb25Db2RlEh8KC2V4cGlyZV90aW1lGAIgASgDUgpleHBpcmVUaW1l'); + +@$core.Deprecated('Use registerRequestDescriptor instead') +const RegisterRequest$json = { + '1': 'RegisterRequest', + '2': [ + {'1': 'uuid', '3': 1, '4': 1, '5': 9, '10': 'uuid'}, + {'1': 'game_user_id', '3': 2, '4': 1, '5': 9, '10': 'gameUserId'}, + ], +}; + +/// Descriptor for `RegisterRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List registerRequestDescriptor = $convert.base64Decode( + 'Cg9SZWdpc3RlclJlcXVlc3QSEgoEdXVpZBgBIAEoCVIEdXVpZBIgCgxnYW1lX3VzZXJfaWQYAi' + 'ABKAlSCmdhbWVVc2VySWQ='); + +@$core.Deprecated('Use registerResponseDescriptor instead') +const RegisterResponse$json = { + '1': 'RegisterResponse', + '2': [ + { + '1': 'party_room_secret_key', + '3': 1, + '4': 1, + '5': 9, + '10': 'partyRoomSecretKey' + }, + { + '1': 'user_info', + '3': 2, + '4': 1, + '5': 11, + '6': '.auth.GameUserInfo', + '10': 'userInfo' + }, + ], +}; + +/// Descriptor for `RegisterResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List registerResponseDescriptor = $convert.base64Decode( + 'ChBSZWdpc3RlclJlc3BvbnNlEjEKFXBhcnR5X3Jvb21fc2VjcmV0X2tleRgBIAEoCVIScGFydH' + 'lSb29tU2VjcmV0S2V5Ei8KCXVzZXJfaW5mbxgCIAEoCzISLmF1dGguR2FtZVVzZXJJbmZvUgh1' + 'c2VySW5mbw=='); + +@$core.Deprecated('Use unregisterRequestDescriptor instead') +const UnregisterRequest$json = { + '1': 'UnregisterRequest', +}; + +/// Descriptor for `UnregisterRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List unregisterRequestDescriptor = + $convert.base64Decode('ChFVbnJlZ2lzdGVyUmVxdWVzdA=='); + +@$core.Deprecated('Use unregisterResponseDescriptor instead') +const UnregisterResponse$json = { + '1': 'UnregisterResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `UnregisterResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List unregisterResponseDescriptor = + $convert.base64Decode( + 'ChJVbnJlZ2lzdGVyUmVzcG9uc2USGAoHc3VjY2VzcxgBIAEoCFIHc3VjY2Vzcw=='); diff --git a/lib/generated/proto/common/common.pb.dart b/lib/generated/proto/common/common.pb.dart new file mode 100644 index 0000000..ac359d1 --- /dev/null +++ b/lib/generated/proto/common/common.pb.dart @@ -0,0 +1,601 @@ +// This is a generated file - do not edit. +// +// Generated from proto/common/common.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions; + +/// 获取服务器时间请求 +class GetServerTimeRequest extends $pb.GeneratedMessage { + factory GetServerTimeRequest() => create(); + + GetServerTimeRequest._(); + + factory GetServerTimeRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetServerTimeRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetServerTimeRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetServerTimeRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetServerTimeRequest copyWith(void Function(GetServerTimeRequest) updates) => + super.copyWith((message) => updates(message as GetServerTimeRequest)) + as GetServerTimeRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetServerTimeRequest create() => GetServerTimeRequest._(); + @$core.override + GetServerTimeRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetServerTimeRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetServerTimeRequest? _defaultInstance; +} + +/// 获取服务器时间响应 +class GetServerTimeResponse extends $pb.GeneratedMessage { + factory GetServerTimeResponse({ + $fixnum.Int64? timestamp, + $core.String? timezone, + }) { + final result = create(); + if (timestamp != null) result.timestamp = timestamp; + if (timezone != null) result.timezone = timezone; + return result; + } + + GetServerTimeResponse._(); + + factory GetServerTimeResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetServerTimeResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetServerTimeResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..aInt64(1, _omitFieldNames ? '' : 'timestamp') + ..aOS(2, _omitFieldNames ? '' : 'timezone') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetServerTimeResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetServerTimeResponse copyWith( + void Function(GetServerTimeResponse) updates) => + super.copyWith((message) => updates(message as GetServerTimeResponse)) + as GetServerTimeResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetServerTimeResponse create() => GetServerTimeResponse._(); + @$core.override + GetServerTimeResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetServerTimeResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetServerTimeResponse? _defaultInstance; + + @$pb.TagNumber(1) + $fixnum.Int64 get timestamp => $_getI64(0); + @$pb.TagNumber(1) + set timestamp($fixnum.Int64 value) => $_setInt64(0, value); + @$pb.TagNumber(1) + $core.bool hasTimestamp() => $_has(0); + @$pb.TagNumber(1) + void clearTimestamp() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get timezone => $_getSZ(1); + @$pb.TagNumber(2) + set timezone($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasTimezone() => $_has(1); + @$pb.TagNumber(2) + void clearTimezone() => $_clearField(2); +} + +/// 获取版本请求 +class GetVersionRequest extends $pb.GeneratedMessage { + factory GetVersionRequest() => create(); + + GetVersionRequest._(); + + factory GetVersionRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetVersionRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetVersionRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetVersionRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetVersionRequest copyWith(void Function(GetVersionRequest) updates) => + super.copyWith((message) => updates(message as GetVersionRequest)) + as GetVersionRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetVersionRequest create() => GetVersionRequest._(); + @$core.override + GetVersionRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetVersionRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetVersionRequest? _defaultInstance; +} + +/// 获取版本响应 +class GetVersionResponse extends $pb.GeneratedMessage { + factory GetVersionResponse({ + $core.int? version, + $core.int? latestVersion, + $core.int? minClientVersion, + }) { + final result = create(); + if (version != null) result.version = version; + if (latestVersion != null) result.latestVersion = latestVersion; + if (minClientVersion != null) result.minClientVersion = minClientVersion; + return result; + } + + GetVersionResponse._(); + + factory GetVersionResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetVersionResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetVersionResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..aI(1, _omitFieldNames ? '' : 'version') + ..aI(2, _omitFieldNames ? '' : 'latestVersion') + ..aI(3, _omitFieldNames ? '' : 'minClientVersion') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetVersionResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetVersionResponse copyWith(void Function(GetVersionResponse) updates) => + super.copyWith((message) => updates(message as GetVersionResponse)) + as GetVersionResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetVersionResponse create() => GetVersionResponse._(); + @$core.override + GetVersionResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetVersionResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetVersionResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.int get version => $_getIZ(0); + @$pb.TagNumber(1) + set version($core.int value) => $_setSignedInt32(0, value); + @$pb.TagNumber(1) + $core.bool hasVersion() => $_has(0); + @$pb.TagNumber(1) + void clearVersion() => $_clearField(1); + + @$pb.TagNumber(2) + $core.int get latestVersion => $_getIZ(1); + @$pb.TagNumber(2) + set latestVersion($core.int value) => $_setSignedInt32(1, value); + @$pb.TagNumber(2) + $core.bool hasLatestVersion() => $_has(1); + @$pb.TagNumber(2) + void clearLatestVersion() => $_clearField(2); + + @$pb.TagNumber(3) + $core.int get minClientVersion => $_getIZ(2); + @$pb.TagNumber(3) + set minClientVersion($core.int value) => $_setSignedInt32(2, value); + @$pb.TagNumber(3) + $core.bool hasMinClientVersion() => $_has(2); + @$pb.TagNumber(3) + void clearMinClientVersion() => $_clearField(3); +} + +/// 信号类型 +class SignalType extends $pb.GeneratedMessage { + factory SignalType({ + $core.String? id, + $core.String? name, + $core.bool? isSpecial, + }) { + final result = create(); + if (id != null) result.id = id; + if (name != null) result.name = name; + if (isSpecial != null) result.isSpecial = isSpecial; + return result; + } + + SignalType._(); + + factory SignalType.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory SignalType.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'SignalType', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'id') + ..aOS(2, _omitFieldNames ? '' : 'name') + ..aOB(3, _omitFieldNames ? '' : 'isSpecial') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SignalType clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SignalType copyWith(void Function(SignalType) updates) => + super.copyWith((message) => updates(message as SignalType)) as SignalType; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static SignalType create() => SignalType._(); + @$core.override + SignalType createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static SignalType getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static SignalType? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get id => $_getSZ(0); + @$pb.TagNumber(1) + set id($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get name => $_getSZ(1); + @$pb.TagNumber(2) + set name($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasName() => $_has(1); + @$pb.TagNumber(2) + void clearName() => $_clearField(2); + + @$pb.TagNumber(3) + $core.bool get isSpecial => $_getBF(2); + @$pb.TagNumber(3) + set isSpecial($core.bool value) => $_setBool(2, value); + @$pb.TagNumber(3) + $core.bool hasIsSpecial() => $_has(2); + @$pb.TagNumber(3) + void clearIsSpecial() => $_clearField(3); +} + +/// 获取信号类型请求 +class GetSignalTypesRequest extends $pb.GeneratedMessage { + factory GetSignalTypesRequest() => create(); + + GetSignalTypesRequest._(); + + factory GetSignalTypesRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetSignalTypesRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetSignalTypesRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetSignalTypesRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetSignalTypesRequest copyWith( + void Function(GetSignalTypesRequest) updates) => + super.copyWith((message) => updates(message as GetSignalTypesRequest)) + as GetSignalTypesRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetSignalTypesRequest create() => GetSignalTypesRequest._(); + @$core.override + GetSignalTypesRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetSignalTypesRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetSignalTypesRequest? _defaultInstance; +} + +/// 获取信号类型响应 +class GetSignalTypesResponse extends $pb.GeneratedMessage { + factory GetSignalTypesResponse({ + $core.Iterable? signals, + }) { + final result = create(); + if (signals != null) result.signals.addAll(signals); + return result; + } + + GetSignalTypesResponse._(); + + factory GetSignalTypesResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetSignalTypesResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetSignalTypesResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..pPM(1, _omitFieldNames ? '' : 'signals', + subBuilder: SignalType.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetSignalTypesResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetSignalTypesResponse copyWith( + void Function(GetSignalTypesResponse) updates) => + super.copyWith((message) => updates(message as GetSignalTypesResponse)) + as GetSignalTypesResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetSignalTypesResponse create() => GetSignalTypesResponse._(); + @$core.override + GetSignalTypesResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetSignalTypesResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetSignalTypesResponse? _defaultInstance; + + @$pb.TagNumber(1) + $pb.PbList get signals => $_getList(0); +} + +/// 标签 +class Tag extends $pb.GeneratedMessage { + factory Tag({ + $core.String? id, + $core.String? name, + $core.String? info, + $core.String? color, + $core.Iterable? subTags, + }) { + final result = create(); + if (id != null) result.id = id; + if (name != null) result.name = name; + if (info != null) result.info = info; + if (color != null) result.color = color; + if (subTags != null) result.subTags.addAll(subTags); + return result; + } + + Tag._(); + + factory Tag.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory Tag.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'Tag', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'id') + ..aOS(2, _omitFieldNames ? '' : 'name') + ..aOS(3, _omitFieldNames ? '' : 'info') + ..aOS(4, _omitFieldNames ? '' : 'color') + ..pPM(5, _omitFieldNames ? '' : 'subTags', subBuilder: Tag.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + Tag clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + Tag copyWith(void Function(Tag) updates) => + super.copyWith((message) => updates(message as Tag)) as Tag; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static Tag create() => Tag._(); + @$core.override + Tag createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static Tag getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static Tag? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get id => $_getSZ(0); + @$pb.TagNumber(1) + set id($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get name => $_getSZ(1); + @$pb.TagNumber(2) + set name($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasName() => $_has(1); + @$pb.TagNumber(2) + void clearName() => $_clearField(2); + + @$pb.TagNumber(3) + $core.String get info => $_getSZ(2); + @$pb.TagNumber(3) + set info($core.String value) => $_setString(2, value); + @$pb.TagNumber(3) + $core.bool hasInfo() => $_has(2); + @$pb.TagNumber(3) + void clearInfo() => $_clearField(3); + + @$pb.TagNumber(4) + $core.String get color => $_getSZ(3); + @$pb.TagNumber(4) + set color($core.String value) => $_setString(3, value); + @$pb.TagNumber(4) + $core.bool hasColor() => $_has(3); + @$pb.TagNumber(4) + void clearColor() => $_clearField(4); + + @$pb.TagNumber(5) + $pb.PbList get subTags => $_getList(4); +} + +/// 获取标签请求 +class GetTagsRequest extends $pb.GeneratedMessage { + factory GetTagsRequest() => create(); + + GetTagsRequest._(); + + factory GetTagsRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetTagsRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetTagsRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetTagsRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetTagsRequest copyWith(void Function(GetTagsRequest) updates) => + super.copyWith((message) => updates(message as GetTagsRequest)) + as GetTagsRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetTagsRequest create() => GetTagsRequest._(); + @$core.override + GetTagsRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetTagsRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetTagsRequest? _defaultInstance; +} + +/// 获取标签响应 +class GetTagsResponse extends $pb.GeneratedMessage { + factory GetTagsResponse({ + $core.Iterable? tags, + }) { + final result = create(); + if (tags != null) result.tags.addAll(tags); + return result; + } + + GetTagsResponse._(); + + factory GetTagsResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetTagsResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetTagsResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'common'), + createEmptyInstance: create) + ..pPM(1, _omitFieldNames ? '' : 'tags', subBuilder: Tag.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetTagsResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetTagsResponse copyWith(void Function(GetTagsResponse) updates) => + super.copyWith((message) => updates(message as GetTagsResponse)) + as GetTagsResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetTagsResponse create() => GetTagsResponse._(); + @$core.override + GetTagsResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetTagsResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetTagsResponse? _defaultInstance; + + @$pb.TagNumber(1) + $pb.PbList get tags => $_getList(0); +} + +const $core.bool _omitFieldNames = + $core.bool.fromEnvironment('protobuf.omit_field_names'); +const $core.bool _omitMessageNames = + $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/lib/generated/proto/common/common.pbenum.dart b/lib/generated/proto/common/common.pbenum.dart new file mode 100644 index 0000000..429a18e --- /dev/null +++ b/lib/generated/proto/common/common.pbenum.dart @@ -0,0 +1,11 @@ +// This is a generated file - do not edit. +// +// Generated from proto/common/common.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names diff --git a/lib/generated/proto/common/common.pbgrpc.dart b/lib/generated/proto/common/common.pbgrpc.dart new file mode 100644 index 0000000..88aba82 --- /dev/null +++ b/lib/generated/proto/common/common.pbgrpc.dart @@ -0,0 +1,164 @@ +// This is a generated file - do not edit. +// +// Generated from proto/common/common.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names + +import 'dart:async' as $async; +import 'dart:core' as $core; + +import 'package:grpc/service_api.dart' as $grpc; +import 'package:protobuf/protobuf.dart' as $pb; + +import 'common.pb.dart' as $0; + +export 'common.pb.dart'; + +/// 通用服务 +@$pb.GrpcServiceName('common.CommonService') +class CommonServiceClient extends $grpc.Client { + /// The hostname for this service. + static const $core.String defaultHost = ''; + + /// OAuth scopes needed for the client. + static const $core.List<$core.String> oauthScopes = [ + '', + ]; + + CommonServiceClient(super.channel, {super.options, super.interceptors}); + + /// 获取服务器时间(匿名接口) + $grpc.ResponseFuture<$0.GetServerTimeResponse> getServerTime( + $0.GetServerTimeRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$getServerTime, request, options: options); + } + + /// 获取版本信息(匿名接口) + $grpc.ResponseFuture<$0.GetVersionResponse> getVersion( + $0.GetVersionRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$getVersion, request, options: options); + } + + /// 获取信号类型列表(匿名接口) + $grpc.ResponseFuture<$0.GetSignalTypesResponse> getSignalTypes( + $0.GetSignalTypesRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$getSignalTypes, request, options: options); + } + + /// 获取房间标签(匿名接口) + $grpc.ResponseFuture<$0.GetTagsResponse> getTags( + $0.GetTagsRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$getTags, request, options: options); + } + + // method descriptors + + static final _$getServerTime = + $grpc.ClientMethod<$0.GetServerTimeRequest, $0.GetServerTimeResponse>( + '/common.CommonService/GetServerTime', + ($0.GetServerTimeRequest value) => value.writeToBuffer(), + $0.GetServerTimeResponse.fromBuffer); + static final _$getVersion = + $grpc.ClientMethod<$0.GetVersionRequest, $0.GetVersionResponse>( + '/common.CommonService/GetVersion', + ($0.GetVersionRequest value) => value.writeToBuffer(), + $0.GetVersionResponse.fromBuffer); + static final _$getSignalTypes = + $grpc.ClientMethod<$0.GetSignalTypesRequest, $0.GetSignalTypesResponse>( + '/common.CommonService/GetSignalTypes', + ($0.GetSignalTypesRequest value) => value.writeToBuffer(), + $0.GetSignalTypesResponse.fromBuffer); + static final _$getTags = + $grpc.ClientMethod<$0.GetTagsRequest, $0.GetTagsResponse>( + '/common.CommonService/GetTags', + ($0.GetTagsRequest value) => value.writeToBuffer(), + $0.GetTagsResponse.fromBuffer); +} + +@$pb.GrpcServiceName('common.CommonService') +abstract class CommonServiceBase extends $grpc.Service { + $core.String get $name => 'common.CommonService'; + + CommonServiceBase() { + $addMethod( + $grpc.ServiceMethod<$0.GetServerTimeRequest, $0.GetServerTimeResponse>( + 'GetServerTime', + getServerTime_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.GetServerTimeRequest.fromBuffer(value), + ($0.GetServerTimeResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.GetVersionRequest, $0.GetVersionResponse>( + 'GetVersion', + getVersion_Pre, + false, + false, + ($core.List<$core.int> value) => $0.GetVersionRequest.fromBuffer(value), + ($0.GetVersionResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.GetSignalTypesRequest, + $0.GetSignalTypesResponse>( + 'GetSignalTypes', + getSignalTypes_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.GetSignalTypesRequest.fromBuffer(value), + ($0.GetSignalTypesResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.GetTagsRequest, $0.GetTagsResponse>( + 'GetTags', + getTags_Pre, + false, + false, + ($core.List<$core.int> value) => $0.GetTagsRequest.fromBuffer(value), + ($0.GetTagsResponse value) => value.writeToBuffer())); + } + + $async.Future<$0.GetServerTimeResponse> getServerTime_Pre( + $grpc.ServiceCall $call, + $async.Future<$0.GetServerTimeRequest> $request) async { + return getServerTime($call, await $request); + } + + $async.Future<$0.GetServerTimeResponse> getServerTime( + $grpc.ServiceCall call, $0.GetServerTimeRequest request); + + $async.Future<$0.GetVersionResponse> getVersion_Pre($grpc.ServiceCall $call, + $async.Future<$0.GetVersionRequest> $request) async { + return getVersion($call, await $request); + } + + $async.Future<$0.GetVersionResponse> getVersion( + $grpc.ServiceCall call, $0.GetVersionRequest request); + + $async.Future<$0.GetSignalTypesResponse> getSignalTypes_Pre( + $grpc.ServiceCall $call, + $async.Future<$0.GetSignalTypesRequest> $request) async { + return getSignalTypes($call, await $request); + } + + $async.Future<$0.GetSignalTypesResponse> getSignalTypes( + $grpc.ServiceCall call, $0.GetSignalTypesRequest request); + + $async.Future<$0.GetTagsResponse> getTags_Pre($grpc.ServiceCall $call, + $async.Future<$0.GetTagsRequest> $request) async { + return getTags($call, await $request); + } + + $async.Future<$0.GetTagsResponse> getTags( + $grpc.ServiceCall call, $0.GetTagsRequest request); +} diff --git a/lib/generated/proto/common/common.pbjson.dart b/lib/generated/proto/common/common.pbjson.dart new file mode 100644 index 0000000..75a7c16 --- /dev/null +++ b/lib/generated/proto/common/common.pbjson.dart @@ -0,0 +1,160 @@ +// This is a generated file - do not edit. +// +// Generated from proto/common/common.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names, unused_import + +import 'dart:convert' as $convert; +import 'dart:core' as $core; +import 'dart:typed_data' as $typed_data; + +@$core.Deprecated('Use getServerTimeRequestDescriptor instead') +const GetServerTimeRequest$json = { + '1': 'GetServerTimeRequest', +}; + +/// Descriptor for `GetServerTimeRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getServerTimeRequestDescriptor = + $convert.base64Decode('ChRHZXRTZXJ2ZXJUaW1lUmVxdWVzdA=='); + +@$core.Deprecated('Use getServerTimeResponseDescriptor instead') +const GetServerTimeResponse$json = { + '1': 'GetServerTimeResponse', + '2': [ + {'1': 'timestamp', '3': 1, '4': 1, '5': 3, '10': 'timestamp'}, + {'1': 'timezone', '3': 2, '4': 1, '5': 9, '10': 'timezone'}, + ], +}; + +/// Descriptor for `GetServerTimeResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getServerTimeResponseDescriptor = $convert.base64Decode( + 'ChVHZXRTZXJ2ZXJUaW1lUmVzcG9uc2USHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASGg' + 'oIdGltZXpvbmUYAiABKAlSCHRpbWV6b25l'); + +@$core.Deprecated('Use getVersionRequestDescriptor instead') +const GetVersionRequest$json = { + '1': 'GetVersionRequest', +}; + +/// Descriptor for `GetVersionRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getVersionRequestDescriptor = + $convert.base64Decode('ChFHZXRWZXJzaW9uUmVxdWVzdA=='); + +@$core.Deprecated('Use getVersionResponseDescriptor instead') +const GetVersionResponse$json = { + '1': 'GetVersionResponse', + '2': [ + {'1': 'version', '3': 1, '4': 1, '5': 5, '10': 'version'}, + {'1': 'latest_version', '3': 2, '4': 1, '5': 5, '10': 'latestVersion'}, + { + '1': 'min_client_version', + '3': 3, + '4': 1, + '5': 5, + '10': 'minClientVersion' + }, + ], +}; + +/// Descriptor for `GetVersionResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getVersionResponseDescriptor = $convert.base64Decode( + 'ChJHZXRWZXJzaW9uUmVzcG9uc2USGAoHdmVyc2lvbhgBIAEoBVIHdmVyc2lvbhIlCg5sYXRlc3' + 'RfdmVyc2lvbhgCIAEoBVINbGF0ZXN0VmVyc2lvbhIsChJtaW5fY2xpZW50X3ZlcnNpb24YAyAB' + 'KAVSEG1pbkNsaWVudFZlcnNpb24='); + +@$core.Deprecated('Use signalTypeDescriptor instead') +const SignalType$json = { + '1': 'SignalType', + '2': [ + {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, + {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'}, + {'1': 'is_special', '3': 3, '4': 1, '5': 8, '10': 'isSpecial'}, + ], +}; + +/// Descriptor for `SignalType`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List signalTypeDescriptor = $convert.base64Decode( + 'CgpTaWduYWxUeXBlEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEh0KCmlzX3' + 'NwZWNpYWwYAyABKAhSCWlzU3BlY2lhbA=='); + +@$core.Deprecated('Use getSignalTypesRequestDescriptor instead') +const GetSignalTypesRequest$json = { + '1': 'GetSignalTypesRequest', +}; + +/// Descriptor for `GetSignalTypesRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getSignalTypesRequestDescriptor = + $convert.base64Decode('ChVHZXRTaWduYWxUeXBlc1JlcXVlc3Q='); + +@$core.Deprecated('Use getSignalTypesResponseDescriptor instead') +const GetSignalTypesResponse$json = { + '1': 'GetSignalTypesResponse', + '2': [ + { + '1': 'signals', + '3': 1, + '4': 3, + '5': 11, + '6': '.common.SignalType', + '10': 'signals' + }, + ], +}; + +/// Descriptor for `GetSignalTypesResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getSignalTypesResponseDescriptor = + $convert.base64Decode( + 'ChZHZXRTaWduYWxUeXBlc1Jlc3BvbnNlEiwKB3NpZ25hbHMYASADKAsyEi5jb21tb24uU2lnbm' + 'FsVHlwZVIHc2lnbmFscw=='); + +@$core.Deprecated('Use tagDescriptor instead') +const Tag$json = { + '1': 'Tag', + '2': [ + {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, + {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'}, + {'1': 'info', '3': 3, '4': 1, '5': 9, '10': 'info'}, + {'1': 'color', '3': 4, '4': 1, '5': 9, '10': 'color'}, + { + '1': 'sub_tags', + '3': 5, + '4': 3, + '5': 11, + '6': '.common.Tag', + '10': 'subTags' + }, + ], +}; + +/// Descriptor for `Tag`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List tagDescriptor = $convert.base64Decode( + 'CgNUYWcSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSEgoEaW5mbxgDIAEoCV' + 'IEaW5mbxIUCgVjb2xvchgEIAEoCVIFY29sb3ISJgoIc3ViX3RhZ3MYBSADKAsyCy5jb21tb24u' + 'VGFnUgdzdWJUYWdz'); + +@$core.Deprecated('Use getTagsRequestDescriptor instead') +const GetTagsRequest$json = { + '1': 'GetTagsRequest', +}; + +/// Descriptor for `GetTagsRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getTagsRequestDescriptor = + $convert.base64Decode('Cg5HZXRUYWdzUmVxdWVzdA=='); + +@$core.Deprecated('Use getTagsResponseDescriptor instead') +const GetTagsResponse$json = { + '1': 'GetTagsResponse', + '2': [ + {'1': 'tags', '3': 1, '4': 3, '5': 11, '6': '.common.Tag', '10': 'tags'}, + ], +}; + +/// Descriptor for `GetTagsResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getTagsResponseDescriptor = $convert.base64Decode( + 'Cg9HZXRUYWdzUmVzcG9uc2USHwoEdGFncxgBIAMoCzILLmNvbW1vbi5UYWdSBHRhZ3M='); diff --git a/lib/generated/proto/partroom/partroom.pb.dart b/lib/generated/proto/partroom/partroom.pb.dart new file mode 100644 index 0000000..aa5820d --- /dev/null +++ b/lib/generated/proto/partroom/partroom.pb.dart @@ -0,0 +1,2980 @@ +// This is a generated file - do not edit. +// +// Generated from proto/partroom/partroom.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +import 'partroom.pbenum.dart'; + +export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions; + +export 'partroom.pbenum.dart'; + +/// 房间信息(列表用) +class RoomListItem extends $pb.GeneratedMessage { + factory RoomListItem({ + $core.String? roomUuid, + $core.String? ownerGameId, + $core.String? ownerHandleName, + $core.String? ownerAvatar, + $core.String? mainTagId, + $core.String? subTagId, + $fixnum.Int64? createdAt, + $fixnum.Int64? ownerLastActive, + $core.int? currentMembers, + $core.int? targetMembers, + $core.bool? hasPassword, + $core.Iterable<$core.String>? socialLinks, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (ownerGameId != null) result.ownerGameId = ownerGameId; + if (ownerHandleName != null) result.ownerHandleName = ownerHandleName; + if (ownerAvatar != null) result.ownerAvatar = ownerAvatar; + if (mainTagId != null) result.mainTagId = mainTagId; + if (subTagId != null) result.subTagId = subTagId; + if (createdAt != null) result.createdAt = createdAt; + if (ownerLastActive != null) result.ownerLastActive = ownerLastActive; + if (currentMembers != null) result.currentMembers = currentMembers; + if (targetMembers != null) result.targetMembers = targetMembers; + if (hasPassword != null) result.hasPassword = hasPassword; + if (socialLinks != null) result.socialLinks.addAll(socialLinks); + return result; + } + + RoomListItem._(); + + factory RoomListItem.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory RoomListItem.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'RoomListItem', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aOS(2, _omitFieldNames ? '' : 'ownerGameId') + ..aOS(3, _omitFieldNames ? '' : 'ownerHandleName') + ..aOS(4, _omitFieldNames ? '' : 'ownerAvatar') + ..aOS(5, _omitFieldNames ? '' : 'mainTagId') + ..aOS(6, _omitFieldNames ? '' : 'subTagId') + ..aInt64(7, _omitFieldNames ? '' : 'createdAt') + ..aInt64(8, _omitFieldNames ? '' : 'ownerLastActive') + ..aI(9, _omitFieldNames ? '' : 'currentMembers') + ..aI(10, _omitFieldNames ? '' : 'targetMembers') + ..aOB(11, _omitFieldNames ? '' : 'hasPassword') + ..pPS(12, _omitFieldNames ? '' : 'socialLinks') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RoomListItem clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RoomListItem copyWith(void Function(RoomListItem) updates) => + super.copyWith((message) => updates(message as RoomListItem)) + as RoomListItem; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static RoomListItem create() => RoomListItem._(); + @$core.override + RoomListItem createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static RoomListItem getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static RoomListItem? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get ownerGameId => $_getSZ(1); + @$pb.TagNumber(2) + set ownerGameId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasOwnerGameId() => $_has(1); + @$pb.TagNumber(2) + void clearOwnerGameId() => $_clearField(2); + + @$pb.TagNumber(3) + $core.String get ownerHandleName => $_getSZ(2); + @$pb.TagNumber(3) + set ownerHandleName($core.String value) => $_setString(2, value); + @$pb.TagNumber(3) + $core.bool hasOwnerHandleName() => $_has(2); + @$pb.TagNumber(3) + void clearOwnerHandleName() => $_clearField(3); + + @$pb.TagNumber(4) + $core.String get ownerAvatar => $_getSZ(3); + @$pb.TagNumber(4) + set ownerAvatar($core.String value) => $_setString(3, value); + @$pb.TagNumber(4) + $core.bool hasOwnerAvatar() => $_has(3); + @$pb.TagNumber(4) + void clearOwnerAvatar() => $_clearField(4); + + @$pb.TagNumber(5) + $core.String get mainTagId => $_getSZ(4); + @$pb.TagNumber(5) + set mainTagId($core.String value) => $_setString(4, value); + @$pb.TagNumber(5) + $core.bool hasMainTagId() => $_has(4); + @$pb.TagNumber(5) + void clearMainTagId() => $_clearField(5); + + @$pb.TagNumber(6) + $core.String get subTagId => $_getSZ(5); + @$pb.TagNumber(6) + set subTagId($core.String value) => $_setString(5, value); + @$pb.TagNumber(6) + $core.bool hasSubTagId() => $_has(5); + @$pb.TagNumber(6) + void clearSubTagId() => $_clearField(6); + + @$pb.TagNumber(7) + $fixnum.Int64 get createdAt => $_getI64(6); + @$pb.TagNumber(7) + set createdAt($fixnum.Int64 value) => $_setInt64(6, value); + @$pb.TagNumber(7) + $core.bool hasCreatedAt() => $_has(6); + @$pb.TagNumber(7) + void clearCreatedAt() => $_clearField(7); + + @$pb.TagNumber(8) + $fixnum.Int64 get ownerLastActive => $_getI64(7); + @$pb.TagNumber(8) + set ownerLastActive($fixnum.Int64 value) => $_setInt64(7, value); + @$pb.TagNumber(8) + $core.bool hasOwnerLastActive() => $_has(7); + @$pb.TagNumber(8) + void clearOwnerLastActive() => $_clearField(8); + + @$pb.TagNumber(9) + $core.int get currentMembers => $_getIZ(8); + @$pb.TagNumber(9) + set currentMembers($core.int value) => $_setSignedInt32(8, value); + @$pb.TagNumber(9) + $core.bool hasCurrentMembers() => $_has(8); + @$pb.TagNumber(9) + void clearCurrentMembers() => $_clearField(9); + + @$pb.TagNumber(10) + $core.int get targetMembers => $_getIZ(9); + @$pb.TagNumber(10) + set targetMembers($core.int value) => $_setSignedInt32(9, value); + @$pb.TagNumber(10) + $core.bool hasTargetMembers() => $_has(9); + @$pb.TagNumber(10) + void clearTargetMembers() => $_clearField(10); + + @$pb.TagNumber(11) + $core.bool get hasPassword => $_getBF(10); + @$pb.TagNumber(11) + set hasPassword($core.bool value) => $_setBool(10, value); + @$pb.TagNumber(11) + $core.bool hasHasPassword() => $_has(10); + @$pb.TagNumber(11) + void clearHasPassword() => $_clearField(11); + + @$pb.TagNumber(12) + $pb.PbList<$core.String> get socialLinks => $_getList(11); +} + +/// 获取房间列表请求 +class GetRoomListRequest extends $pb.GeneratedMessage { + factory GetRoomListRequest({ + $core.String? mainTagId, + $core.String? subTagId, + $core.String? searchOwnerName, + $core.int? page, + $core.int? pageSize, + }) { + final result = create(); + if (mainTagId != null) result.mainTagId = mainTagId; + if (subTagId != null) result.subTagId = subTagId; + if (searchOwnerName != null) result.searchOwnerName = searchOwnerName; + if (page != null) result.page = page; + if (pageSize != null) result.pageSize = pageSize; + return result; + } + + GetRoomListRequest._(); + + factory GetRoomListRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetRoomListRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetRoomListRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'mainTagId') + ..aOS(2, _omitFieldNames ? '' : 'subTagId') + ..aOS(3, _omitFieldNames ? '' : 'searchOwnerName') + ..aI(4, _omitFieldNames ? '' : 'page') + ..aI(5, _omitFieldNames ? '' : 'pageSize') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomListRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomListRequest copyWith(void Function(GetRoomListRequest) updates) => + super.copyWith((message) => updates(message as GetRoomListRequest)) + as GetRoomListRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetRoomListRequest create() => GetRoomListRequest._(); + @$core.override + GetRoomListRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetRoomListRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetRoomListRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get mainTagId => $_getSZ(0); + @$pb.TagNumber(1) + set mainTagId($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasMainTagId() => $_has(0); + @$pb.TagNumber(1) + void clearMainTagId() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get subTagId => $_getSZ(1); + @$pb.TagNumber(2) + set subTagId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasSubTagId() => $_has(1); + @$pb.TagNumber(2) + void clearSubTagId() => $_clearField(2); + + @$pb.TagNumber(3) + $core.String get searchOwnerName => $_getSZ(2); + @$pb.TagNumber(3) + set searchOwnerName($core.String value) => $_setString(2, value); + @$pb.TagNumber(3) + $core.bool hasSearchOwnerName() => $_has(2); + @$pb.TagNumber(3) + void clearSearchOwnerName() => $_clearField(3); + + @$pb.TagNumber(4) + $core.int get page => $_getIZ(3); + @$pb.TagNumber(4) + set page($core.int value) => $_setSignedInt32(3, value); + @$pb.TagNumber(4) + $core.bool hasPage() => $_has(3); + @$pb.TagNumber(4) + void clearPage() => $_clearField(4); + + @$pb.TagNumber(5) + $core.int get pageSize => $_getIZ(4); + @$pb.TagNumber(5) + set pageSize($core.int value) => $_setSignedInt32(4, value); + @$pb.TagNumber(5) + $core.bool hasPageSize() => $_has(4); + @$pb.TagNumber(5) + void clearPageSize() => $_clearField(5); +} + +/// 获取房间列表响应 +class GetRoomListResponse extends $pb.GeneratedMessage { + factory GetRoomListResponse({ + $core.Iterable? rooms, + $core.int? total, + $core.int? page, + $core.int? pageSize, + }) { + final result = create(); + if (rooms != null) result.rooms.addAll(rooms); + if (total != null) result.total = total; + if (page != null) result.page = page; + if (pageSize != null) result.pageSize = pageSize; + return result; + } + + GetRoomListResponse._(); + + factory GetRoomListResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetRoomListResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetRoomListResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..pPM(1, _omitFieldNames ? '' : 'rooms', + subBuilder: RoomListItem.create) + ..aI(2, _omitFieldNames ? '' : 'total') + ..aI(3, _omitFieldNames ? '' : 'page') + ..aI(4, _omitFieldNames ? '' : 'pageSize') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomListResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomListResponse copyWith(void Function(GetRoomListResponse) updates) => + super.copyWith((message) => updates(message as GetRoomListResponse)) + as GetRoomListResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetRoomListResponse create() => GetRoomListResponse._(); + @$core.override + GetRoomListResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetRoomListResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetRoomListResponse? _defaultInstance; + + @$pb.TagNumber(1) + $pb.PbList get rooms => $_getList(0); + + @$pb.TagNumber(2) + $core.int get total => $_getIZ(1); + @$pb.TagNumber(2) + set total($core.int value) => $_setSignedInt32(1, value); + @$pb.TagNumber(2) + $core.bool hasTotal() => $_has(1); + @$pb.TagNumber(2) + void clearTotal() => $_clearField(2); + + @$pb.TagNumber(3) + $core.int get page => $_getIZ(2); + @$pb.TagNumber(3) + set page($core.int value) => $_setSignedInt32(2, value); + @$pb.TagNumber(3) + $core.bool hasPage() => $_has(2); + @$pb.TagNumber(3) + void clearPage() => $_clearField(3); + + @$pb.TagNumber(4) + $core.int get pageSize => $_getIZ(3); + @$pb.TagNumber(4) + set pageSize($core.int value) => $_setSignedInt32(3, value); + @$pb.TagNumber(4) + $core.bool hasPageSize() => $_has(3); + @$pb.TagNumber(4) + void clearPageSize() => $_clearField(4); +} + +/// 创建房间请求 +class CreateRoomRequest extends $pb.GeneratedMessage { + factory CreateRoomRequest({ + $core.String? mainTagId, + $core.String? subTagId, + $core.int? targetMembers, + $core.bool? hasPassword, + $core.String? password_5, + $core.Iterable<$core.String>? socialLinks, + }) { + final result = create(); + if (mainTagId != null) result.mainTagId = mainTagId; + if (subTagId != null) result.subTagId = subTagId; + if (targetMembers != null) result.targetMembers = targetMembers; + if (hasPassword != null) result.hasPassword = hasPassword; + if (password_5 != null) result.password_5 = password_5; + if (socialLinks != null) result.socialLinks.addAll(socialLinks); + return result; + } + + CreateRoomRequest._(); + + factory CreateRoomRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory CreateRoomRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'CreateRoomRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'mainTagId') + ..aOS(2, _omitFieldNames ? '' : 'subTagId') + ..aI(3, _omitFieldNames ? '' : 'targetMembers') + ..aOB(4, _omitFieldNames ? '' : 'hasPassword') + ..aOS(5, _omitFieldNames ? '' : 'password') + ..pPS(6, _omitFieldNames ? '' : 'socialLinks') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + CreateRoomRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + CreateRoomRequest copyWith(void Function(CreateRoomRequest) updates) => + super.copyWith((message) => updates(message as CreateRoomRequest)) + as CreateRoomRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static CreateRoomRequest create() => CreateRoomRequest._(); + @$core.override + CreateRoomRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static CreateRoomRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static CreateRoomRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get mainTagId => $_getSZ(0); + @$pb.TagNumber(1) + set mainTagId($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasMainTagId() => $_has(0); + @$pb.TagNumber(1) + void clearMainTagId() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get subTagId => $_getSZ(1); + @$pb.TagNumber(2) + set subTagId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasSubTagId() => $_has(1); + @$pb.TagNumber(2) + void clearSubTagId() => $_clearField(2); + + @$pb.TagNumber(3) + $core.int get targetMembers => $_getIZ(2); + @$pb.TagNumber(3) + set targetMembers($core.int value) => $_setSignedInt32(2, value); + @$pb.TagNumber(3) + $core.bool hasTargetMembers() => $_has(2); + @$pb.TagNumber(3) + void clearTargetMembers() => $_clearField(3); + + @$pb.TagNumber(4) + $core.bool get hasPassword => $_getBF(3); + @$pb.TagNumber(4) + set hasPassword($core.bool value) => $_setBool(3, value); + @$pb.TagNumber(4) + $core.bool hasHasPassword() => $_has(3); + @$pb.TagNumber(4) + void clearHasPassword() => $_clearField(4); + + @$pb.TagNumber(5) + $core.String get password_5 => $_getSZ(4); + @$pb.TagNumber(5) + set password_5($core.String value) => $_setString(4, value); + @$pb.TagNumber(5) + $core.bool hasPassword_5() => $_has(4); + @$pb.TagNumber(5) + void clearPassword_5() => $_clearField(5); + + @$pb.TagNumber(6) + $pb.PbList<$core.String> get socialLinks => $_getList(5); +} + +/// 创建房间响应 +class CreateRoomResponse extends $pb.GeneratedMessage { + factory CreateRoomResponse({ + $core.String? roomUuid, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + return result; + } + + CreateRoomResponse._(); + + factory CreateRoomResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory CreateRoomResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'CreateRoomResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + CreateRoomResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + CreateRoomResponse copyWith(void Function(CreateRoomResponse) updates) => + super.copyWith((message) => updates(message as CreateRoomResponse)) + as CreateRoomResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static CreateRoomResponse create() => CreateRoomResponse._(); + @$core.override + CreateRoomResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static CreateRoomResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static CreateRoomResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); +} + +/// 加入房间请求 +class JoinRoomRequest extends $pb.GeneratedMessage { + factory JoinRoomRequest({ + $core.String? roomUuid, + $core.String? password, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (password != null) result.password = password; + return result; + } + + JoinRoomRequest._(); + + factory JoinRoomRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory JoinRoomRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'JoinRoomRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aOS(2, _omitFieldNames ? '' : 'password') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + JoinRoomRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + JoinRoomRequest copyWith(void Function(JoinRoomRequest) updates) => + super.copyWith((message) => updates(message as JoinRoomRequest)) + as JoinRoomRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static JoinRoomRequest create() => JoinRoomRequest._(); + @$core.override + JoinRoomRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static JoinRoomRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static JoinRoomRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get password => $_getSZ(1); + @$pb.TagNumber(2) + set password($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasPassword() => $_has(1); + @$pb.TagNumber(2) + void clearPassword() => $_clearField(2); +} + +/// 加入房间响应 +class JoinRoomResponse extends $pb.GeneratedMessage { + factory JoinRoomResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + JoinRoomResponse._(); + + factory JoinRoomResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory JoinRoomResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'JoinRoomResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + JoinRoomResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + JoinRoomResponse copyWith(void Function(JoinRoomResponse) updates) => + super.copyWith((message) => updates(message as JoinRoomResponse)) + as JoinRoomResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static JoinRoomResponse create() => JoinRoomResponse._(); + @$core.override + JoinRoomResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static JoinRoomResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static JoinRoomResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +/// 离开房间请求 +class LeaveRoomRequest extends $pb.GeneratedMessage { + factory LeaveRoomRequest({ + $core.String? roomUuid, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + return result; + } + + LeaveRoomRequest._(); + + factory LeaveRoomRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory LeaveRoomRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'LeaveRoomRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + LeaveRoomRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + LeaveRoomRequest copyWith(void Function(LeaveRoomRequest) updates) => + super.copyWith((message) => updates(message as LeaveRoomRequest)) + as LeaveRoomRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static LeaveRoomRequest create() => LeaveRoomRequest._(); + @$core.override + LeaveRoomRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static LeaveRoomRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static LeaveRoomRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); +} + +/// 离开房间响应 +class LeaveRoomResponse extends $pb.GeneratedMessage { + factory LeaveRoomResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + LeaveRoomResponse._(); + + factory LeaveRoomResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory LeaveRoomResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'LeaveRoomResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + LeaveRoomResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + LeaveRoomResponse copyWith(void Function(LeaveRoomResponse) updates) => + super.copyWith((message) => updates(message as LeaveRoomResponse)) + as LeaveRoomResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static LeaveRoomResponse create() => LeaveRoomResponse._(); + @$core.override + LeaveRoomResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static LeaveRoomResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static LeaveRoomResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +/// 解散房间请求 +class DismissRoomRequest extends $pb.GeneratedMessage { + factory DismissRoomRequest({ + $core.String? roomUuid, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + return result; + } + + DismissRoomRequest._(); + + factory DismissRoomRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory DismissRoomRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'DismissRoomRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + DismissRoomRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + DismissRoomRequest copyWith(void Function(DismissRoomRequest) updates) => + super.copyWith((message) => updates(message as DismissRoomRequest)) + as DismissRoomRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static DismissRoomRequest create() => DismissRoomRequest._(); + @$core.override + DismissRoomRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static DismissRoomRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static DismissRoomRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); +} + +/// 解散房间响应 +class DismissRoomResponse extends $pb.GeneratedMessage { + factory DismissRoomResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + DismissRoomResponse._(); + + factory DismissRoomResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory DismissRoomResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'DismissRoomResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + DismissRoomResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + DismissRoomResponse copyWith(void Function(DismissRoomResponse) updates) => + super.copyWith((message) => updates(message as DismissRoomResponse)) + as DismissRoomResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static DismissRoomResponse create() => DismissRoomResponse._(); + @$core.override + DismissRoomResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static DismissRoomResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static DismissRoomResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +/// 成员状态 +class MemberStatus extends $pb.GeneratedMessage { + factory MemberStatus({ + $core.String? currentLocation, + $core.int? kills, + $core.int? deaths, + $fixnum.Int64? playTime, + }) { + final result = create(); + if (currentLocation != null) result.currentLocation = currentLocation; + if (kills != null) result.kills = kills; + if (deaths != null) result.deaths = deaths; + if (playTime != null) result.playTime = playTime; + return result; + } + + MemberStatus._(); + + factory MemberStatus.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory MemberStatus.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'MemberStatus', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'currentLocation') + ..aI(2, _omitFieldNames ? '' : 'kills') + ..aI(3, _omitFieldNames ? '' : 'deaths') + ..aInt64(4, _omitFieldNames ? '' : 'playTime') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + MemberStatus clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + MemberStatus copyWith(void Function(MemberStatus) updates) => + super.copyWith((message) => updates(message as MemberStatus)) + as MemberStatus; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static MemberStatus create() => MemberStatus._(); + @$core.override + MemberStatus createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static MemberStatus getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static MemberStatus? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get currentLocation => $_getSZ(0); + @$pb.TagNumber(1) + set currentLocation($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasCurrentLocation() => $_has(0); + @$pb.TagNumber(1) + void clearCurrentLocation() => $_clearField(1); + + @$pb.TagNumber(2) + $core.int get kills => $_getIZ(1); + @$pb.TagNumber(2) + set kills($core.int value) => $_setSignedInt32(1, value); + @$pb.TagNumber(2) + $core.bool hasKills() => $_has(1); + @$pb.TagNumber(2) + void clearKills() => $_clearField(2); + + @$pb.TagNumber(3) + $core.int get deaths => $_getIZ(2); + @$pb.TagNumber(3) + set deaths($core.int value) => $_setSignedInt32(2, value); + @$pb.TagNumber(3) + $core.bool hasDeaths() => $_has(2); + @$pb.TagNumber(3) + void clearDeaths() => $_clearField(3); + + @$pb.TagNumber(4) + $fixnum.Int64 get playTime => $_getI64(3); + @$pb.TagNumber(4) + set playTime($fixnum.Int64 value) => $_setInt64(3, value); + @$pb.TagNumber(4) + $core.bool hasPlayTime() => $_has(3); + @$pb.TagNumber(4) + void clearPlayTime() => $_clearField(4); +} + +/// 房间成员 +class RoomMember extends $pb.GeneratedMessage { + factory RoomMember({ + $core.String? gameUserId, + $core.String? handleName, + $core.String? avatarUrl, + $fixnum.Int64? joinedAt, + $fixnum.Int64? lastActive, + $core.bool? isOwner, + MemberStatus? status, + }) { + final result = create(); + if (gameUserId != null) result.gameUserId = gameUserId; + if (handleName != null) result.handleName = handleName; + if (avatarUrl != null) result.avatarUrl = avatarUrl; + if (joinedAt != null) result.joinedAt = joinedAt; + if (lastActive != null) result.lastActive = lastActive; + if (isOwner != null) result.isOwner = isOwner; + if (status != null) result.status = status; + return result; + } + + RoomMember._(); + + factory RoomMember.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory RoomMember.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'RoomMember', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'gameUserId') + ..aOS(2, _omitFieldNames ? '' : 'handleName') + ..aOS(3, _omitFieldNames ? '' : 'avatarUrl') + ..aInt64(4, _omitFieldNames ? '' : 'joinedAt') + ..aInt64(5, _omitFieldNames ? '' : 'lastActive') + ..aOB(6, _omitFieldNames ? '' : 'isOwner') + ..aOM(7, _omitFieldNames ? '' : 'status', + subBuilder: MemberStatus.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RoomMember clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RoomMember copyWith(void Function(RoomMember) updates) => + super.copyWith((message) => updates(message as RoomMember)) as RoomMember; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static RoomMember create() => RoomMember._(); + @$core.override + RoomMember createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static RoomMember getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static RoomMember? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get gameUserId => $_getSZ(0); + @$pb.TagNumber(1) + set gameUserId($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasGameUserId() => $_has(0); + @$pb.TagNumber(1) + void clearGameUserId() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get handleName => $_getSZ(1); + @$pb.TagNumber(2) + set handleName($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasHandleName() => $_has(1); + @$pb.TagNumber(2) + void clearHandleName() => $_clearField(2); + + @$pb.TagNumber(3) + $core.String get avatarUrl => $_getSZ(2); + @$pb.TagNumber(3) + set avatarUrl($core.String value) => $_setString(2, value); + @$pb.TagNumber(3) + $core.bool hasAvatarUrl() => $_has(2); + @$pb.TagNumber(3) + void clearAvatarUrl() => $_clearField(3); + + @$pb.TagNumber(4) + $fixnum.Int64 get joinedAt => $_getI64(3); + @$pb.TagNumber(4) + set joinedAt($fixnum.Int64 value) => $_setInt64(3, value); + @$pb.TagNumber(4) + $core.bool hasJoinedAt() => $_has(3); + @$pb.TagNumber(4) + void clearJoinedAt() => $_clearField(4); + + @$pb.TagNumber(5) + $fixnum.Int64 get lastActive => $_getI64(4); + @$pb.TagNumber(5) + set lastActive($fixnum.Int64 value) => $_setInt64(4, value); + @$pb.TagNumber(5) + $core.bool hasLastActive() => $_has(4); + @$pb.TagNumber(5) + void clearLastActive() => $_clearField(5); + + @$pb.TagNumber(6) + $core.bool get isOwner => $_getBF(5); + @$pb.TagNumber(6) + set isOwner($core.bool value) => $_setBool(5, value); + @$pb.TagNumber(6) + $core.bool hasIsOwner() => $_has(5); + @$pb.TagNumber(6) + void clearIsOwner() => $_clearField(6); + + @$pb.TagNumber(7) + MemberStatus get status => $_getN(6); + @$pb.TagNumber(7) + set status(MemberStatus value) => $_setField(7, value); + @$pb.TagNumber(7) + $core.bool hasStatus() => $_has(6); + @$pb.TagNumber(7) + void clearStatus() => $_clearField(7); + @$pb.TagNumber(7) + MemberStatus ensureStatus() => $_ensure(6); +} + +/// 房间详情 +class RoomInfo extends $pb.GeneratedMessage { + factory RoomInfo({ + $core.String? roomUuid, + $core.String? ownerGameId, + $core.String? mainTagId, + $core.String? subTagId, + $core.int? targetMembers, + $core.bool? hasPassword, + $fixnum.Int64? createdAt, + $core.int? currentMembers, + $core.Iterable<$core.String>? socialLinks, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (ownerGameId != null) result.ownerGameId = ownerGameId; + if (mainTagId != null) result.mainTagId = mainTagId; + if (subTagId != null) result.subTagId = subTagId; + if (targetMembers != null) result.targetMembers = targetMembers; + if (hasPassword != null) result.hasPassword = hasPassword; + if (createdAt != null) result.createdAt = createdAt; + if (currentMembers != null) result.currentMembers = currentMembers; + if (socialLinks != null) result.socialLinks.addAll(socialLinks); + return result; + } + + RoomInfo._(); + + factory RoomInfo.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory RoomInfo.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'RoomInfo', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aOS(2, _omitFieldNames ? '' : 'ownerGameId') + ..aOS(3, _omitFieldNames ? '' : 'mainTagId') + ..aOS(4, _omitFieldNames ? '' : 'subTagId') + ..aI(5, _omitFieldNames ? '' : 'targetMembers') + ..aOB(6, _omitFieldNames ? '' : 'hasPassword') + ..aInt64(7, _omitFieldNames ? '' : 'createdAt') + ..aI(8, _omitFieldNames ? '' : 'currentMembers') + ..pPS(9, _omitFieldNames ? '' : 'socialLinks') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RoomInfo clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RoomInfo copyWith(void Function(RoomInfo) updates) => + super.copyWith((message) => updates(message as RoomInfo)) as RoomInfo; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static RoomInfo create() => RoomInfo._(); + @$core.override + RoomInfo createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static RoomInfo getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static RoomInfo? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get ownerGameId => $_getSZ(1); + @$pb.TagNumber(2) + set ownerGameId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasOwnerGameId() => $_has(1); + @$pb.TagNumber(2) + void clearOwnerGameId() => $_clearField(2); + + @$pb.TagNumber(3) + $core.String get mainTagId => $_getSZ(2); + @$pb.TagNumber(3) + set mainTagId($core.String value) => $_setString(2, value); + @$pb.TagNumber(3) + $core.bool hasMainTagId() => $_has(2); + @$pb.TagNumber(3) + void clearMainTagId() => $_clearField(3); + + @$pb.TagNumber(4) + $core.String get subTagId => $_getSZ(3); + @$pb.TagNumber(4) + set subTagId($core.String value) => $_setString(3, value); + @$pb.TagNumber(4) + $core.bool hasSubTagId() => $_has(3); + @$pb.TagNumber(4) + void clearSubTagId() => $_clearField(4); + + @$pb.TagNumber(5) + $core.int get targetMembers => $_getIZ(4); + @$pb.TagNumber(5) + set targetMembers($core.int value) => $_setSignedInt32(4, value); + @$pb.TagNumber(5) + $core.bool hasTargetMembers() => $_has(4); + @$pb.TagNumber(5) + void clearTargetMembers() => $_clearField(5); + + @$pb.TagNumber(6) + $core.bool get hasPassword => $_getBF(5); + @$pb.TagNumber(6) + set hasPassword($core.bool value) => $_setBool(5, value); + @$pb.TagNumber(6) + $core.bool hasHasPassword() => $_has(5); + @$pb.TagNumber(6) + void clearHasPassword() => $_clearField(6); + + @$pb.TagNumber(7) + $fixnum.Int64 get createdAt => $_getI64(6); + @$pb.TagNumber(7) + set createdAt($fixnum.Int64 value) => $_setInt64(6, value); + @$pb.TagNumber(7) + $core.bool hasCreatedAt() => $_has(6); + @$pb.TagNumber(7) + void clearCreatedAt() => $_clearField(7); + + @$pb.TagNumber(8) + $core.int get currentMembers => $_getIZ(7); + @$pb.TagNumber(8) + set currentMembers($core.int value) => $_setSignedInt32(7, value); + @$pb.TagNumber(8) + $core.bool hasCurrentMembers() => $_has(7); + @$pb.TagNumber(8) + void clearCurrentMembers() => $_clearField(8); + + @$pb.TagNumber(9) + $pb.PbList<$core.String> get socialLinks => $_getList(8); +} + +/// 获取房间详情请求 +class GetRoomInfoRequest extends $pb.GeneratedMessage { + factory GetRoomInfoRequest({ + $core.String? roomUuid, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + return result; + } + + GetRoomInfoRequest._(); + + factory GetRoomInfoRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetRoomInfoRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetRoomInfoRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomInfoRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomInfoRequest copyWith(void Function(GetRoomInfoRequest) updates) => + super.copyWith((message) => updates(message as GetRoomInfoRequest)) + as GetRoomInfoRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetRoomInfoRequest create() => GetRoomInfoRequest._(); + @$core.override + GetRoomInfoRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetRoomInfoRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetRoomInfoRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); +} + +/// 获取房间详情响应 +class GetRoomInfoResponse extends $pb.GeneratedMessage { + factory GetRoomInfoResponse({ + RoomInfo? room, + }) { + final result = create(); + if (room != null) result.room = room; + return result; + } + + GetRoomInfoResponse._(); + + factory GetRoomInfoResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetRoomInfoResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetRoomInfoResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOM(1, _omitFieldNames ? '' : 'room', + subBuilder: RoomInfo.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomInfoResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomInfoResponse copyWith(void Function(GetRoomInfoResponse) updates) => + super.copyWith((message) => updates(message as GetRoomInfoResponse)) + as GetRoomInfoResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetRoomInfoResponse create() => GetRoomInfoResponse._(); + @$core.override + GetRoomInfoResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetRoomInfoResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetRoomInfoResponse? _defaultInstance; + + @$pb.TagNumber(1) + RoomInfo get room => $_getN(0); + @$pb.TagNumber(1) + set room(RoomInfo value) => $_setField(1, value); + @$pb.TagNumber(1) + $core.bool hasRoom() => $_has(0); + @$pb.TagNumber(1) + void clearRoom() => $_clearField(1); + @$pb.TagNumber(1) + RoomInfo ensureRoom() => $_ensure(0); +} + +/// 获取房间成员请求 +class GetRoomMembersRequest extends $pb.GeneratedMessage { + factory GetRoomMembersRequest({ + $core.String? roomUuid, + $core.int? page, + $core.int? pageSize, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (page != null) result.page = page; + if (pageSize != null) result.pageSize = pageSize; + return result; + } + + GetRoomMembersRequest._(); + + factory GetRoomMembersRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetRoomMembersRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetRoomMembersRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aI(2, _omitFieldNames ? '' : 'page') + ..aI(3, _omitFieldNames ? '' : 'pageSize') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomMembersRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomMembersRequest copyWith( + void Function(GetRoomMembersRequest) updates) => + super.copyWith((message) => updates(message as GetRoomMembersRequest)) + as GetRoomMembersRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetRoomMembersRequest create() => GetRoomMembersRequest._(); + @$core.override + GetRoomMembersRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetRoomMembersRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetRoomMembersRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.int get page => $_getIZ(1); + @$pb.TagNumber(2) + set page($core.int value) => $_setSignedInt32(1, value); + @$pb.TagNumber(2) + $core.bool hasPage() => $_has(1); + @$pb.TagNumber(2) + void clearPage() => $_clearField(2); + + @$pb.TagNumber(3) + $core.int get pageSize => $_getIZ(2); + @$pb.TagNumber(3) + set pageSize($core.int value) => $_setSignedInt32(2, value); + @$pb.TagNumber(3) + $core.bool hasPageSize() => $_has(2); + @$pb.TagNumber(3) + void clearPageSize() => $_clearField(3); +} + +/// 获取房间成员响应 +class GetRoomMembersResponse extends $pb.GeneratedMessage { + factory GetRoomMembersResponse({ + $core.Iterable? members, + $core.int? total, + }) { + final result = create(); + if (members != null) result.members.addAll(members); + if (total != null) result.total = total; + return result; + } + + GetRoomMembersResponse._(); + + factory GetRoomMembersResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetRoomMembersResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetRoomMembersResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..pPM(1, _omitFieldNames ? '' : 'members', + subBuilder: RoomMember.create) + ..aI(2, _omitFieldNames ? '' : 'total') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomMembersResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetRoomMembersResponse copyWith( + void Function(GetRoomMembersResponse) updates) => + super.copyWith((message) => updates(message as GetRoomMembersResponse)) + as GetRoomMembersResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetRoomMembersResponse create() => GetRoomMembersResponse._(); + @$core.override + GetRoomMembersResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetRoomMembersResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetRoomMembersResponse? _defaultInstance; + + @$pb.TagNumber(1) + $pb.PbList get members => $_getList(0); + + @$pb.TagNumber(2) + $core.int get total => $_getIZ(1); + @$pb.TagNumber(2) + set total($core.int value) => $_setSignedInt32(1, value); + @$pb.TagNumber(2) + $core.bool hasTotal() => $_has(1); + @$pb.TagNumber(2) + void clearTotal() => $_clearField(2); +} + +/// 心跳请求 +class HeartbeatRequest extends $pb.GeneratedMessage { + factory HeartbeatRequest({ + $core.String? roomUuid, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + return result; + } + + HeartbeatRequest._(); + + factory HeartbeatRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory HeartbeatRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'HeartbeatRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + HeartbeatRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + HeartbeatRequest copyWith(void Function(HeartbeatRequest) updates) => + super.copyWith((message) => updates(message as HeartbeatRequest)) + as HeartbeatRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static HeartbeatRequest create() => HeartbeatRequest._(); + @$core.override + HeartbeatRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static HeartbeatRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static HeartbeatRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); +} + +/// 心跳响应 +class HeartbeatResponse extends $pb.GeneratedMessage { + factory HeartbeatResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + HeartbeatResponse._(); + + factory HeartbeatResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory HeartbeatResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'HeartbeatResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + HeartbeatResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + HeartbeatResponse copyWith(void Function(HeartbeatResponse) updates) => + super.copyWith((message) => updates(message as HeartbeatResponse)) + as HeartbeatResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static HeartbeatResponse create() => HeartbeatResponse._(); + @$core.override + HeartbeatResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static HeartbeatResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static HeartbeatResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +/// 获取我的房间请求 +class GetMyRoomRequest extends $pb.GeneratedMessage { + factory GetMyRoomRequest() => create(); + + GetMyRoomRequest._(); + + factory GetMyRoomRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetMyRoomRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetMyRoomRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetMyRoomRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetMyRoomRequest copyWith(void Function(GetMyRoomRequest) updates) => + super.copyWith((message) => updates(message as GetMyRoomRequest)) + as GetMyRoomRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetMyRoomRequest create() => GetMyRoomRequest._(); + @$core.override + GetMyRoomRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetMyRoomRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetMyRoomRequest? _defaultInstance; +} + +/// 获取我的房间响应 +class GetMyRoomResponse extends $pb.GeneratedMessage { + factory GetMyRoomResponse({ + RoomInfo? room, + $core.bool? hasRoom_2, + }) { + final result = create(); + if (room != null) result.room = room; + if (hasRoom_2 != null) result.hasRoom_2 = hasRoom_2; + return result; + } + + GetMyRoomResponse._(); + + factory GetMyRoomResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetMyRoomResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetMyRoomResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOM(1, _omitFieldNames ? '' : 'room', + subBuilder: RoomInfo.create) + ..aOB(2, _omitFieldNames ? '' : 'hasRoom') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetMyRoomResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetMyRoomResponse copyWith(void Function(GetMyRoomResponse) updates) => + super.copyWith((message) => updates(message as GetMyRoomResponse)) + as GetMyRoomResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetMyRoomResponse create() => GetMyRoomResponse._(); + @$core.override + GetMyRoomResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetMyRoomResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetMyRoomResponse? _defaultInstance; + + @$pb.TagNumber(1) + RoomInfo get room => $_getN(0); + @$pb.TagNumber(1) + set room(RoomInfo value) => $_setField(1, value); + @$pb.TagNumber(1) + $core.bool hasRoom() => $_has(0); + @$pb.TagNumber(1) + void clearRoom() => $_clearField(1); + @$pb.TagNumber(1) + RoomInfo ensureRoom() => $_ensure(0); + + @$pb.TagNumber(2) + $core.bool get hasRoom_2 => $_getBF(1); + @$pb.TagNumber(2) + set hasRoom_2($core.bool value) => $_setBool(1, value); + @$pb.TagNumber(2) + $core.bool hasHasRoom_2() => $_has(1); + @$pb.TagNumber(2) + void clearHasRoom_2() => $_clearField(2); +} + +/// 更新房间请求 +class UpdateRoomRequest extends $pb.GeneratedMessage { + factory UpdateRoomRequest({ + $core.String? roomUuid, + $core.int? targetMembers, + $core.String? password, + $core.String? mainTagId, + $core.String? subTagId, + $core.Iterable<$core.String>? socialLinks, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (targetMembers != null) result.targetMembers = targetMembers; + if (password != null) result.password = password; + if (mainTagId != null) result.mainTagId = mainTagId; + if (subTagId != null) result.subTagId = subTagId; + if (socialLinks != null) result.socialLinks.addAll(socialLinks); + return result; + } + + UpdateRoomRequest._(); + + factory UpdateRoomRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory UpdateRoomRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'UpdateRoomRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aI(2, _omitFieldNames ? '' : 'targetMembers') + ..aOS(3, _omitFieldNames ? '' : 'password') + ..aOS(4, _omitFieldNames ? '' : 'mainTagId') + ..aOS(5, _omitFieldNames ? '' : 'subTagId') + ..pPS(6, _omitFieldNames ? '' : 'socialLinks') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + UpdateRoomRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + UpdateRoomRequest copyWith(void Function(UpdateRoomRequest) updates) => + super.copyWith((message) => updates(message as UpdateRoomRequest)) + as UpdateRoomRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static UpdateRoomRequest create() => UpdateRoomRequest._(); + @$core.override + UpdateRoomRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static UpdateRoomRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static UpdateRoomRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.int get targetMembers => $_getIZ(1); + @$pb.TagNumber(2) + set targetMembers($core.int value) => $_setSignedInt32(1, value); + @$pb.TagNumber(2) + $core.bool hasTargetMembers() => $_has(1); + @$pb.TagNumber(2) + void clearTargetMembers() => $_clearField(2); + + @$pb.TagNumber(3) + $core.String get password => $_getSZ(2); + @$pb.TagNumber(3) + set password($core.String value) => $_setString(2, value); + @$pb.TagNumber(3) + $core.bool hasPassword() => $_has(2); + @$pb.TagNumber(3) + void clearPassword() => $_clearField(3); + + @$pb.TagNumber(4) + $core.String get mainTagId => $_getSZ(3); + @$pb.TagNumber(4) + set mainTagId($core.String value) => $_setString(3, value); + @$pb.TagNumber(4) + $core.bool hasMainTagId() => $_has(3); + @$pb.TagNumber(4) + void clearMainTagId() => $_clearField(4); + + @$pb.TagNumber(5) + $core.String get subTagId => $_getSZ(4); + @$pb.TagNumber(5) + set subTagId($core.String value) => $_setString(4, value); + @$pb.TagNumber(5) + $core.bool hasSubTagId() => $_has(4); + @$pb.TagNumber(5) + void clearSubTagId() => $_clearField(5); + + @$pb.TagNumber(6) + $pb.PbList<$core.String> get socialLinks => $_getList(5); +} + +/// 更新房间响应 +class UpdateRoomResponse extends $pb.GeneratedMessage { + factory UpdateRoomResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + UpdateRoomResponse._(); + + factory UpdateRoomResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory UpdateRoomResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'UpdateRoomResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + UpdateRoomResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + UpdateRoomResponse copyWith(void Function(UpdateRoomResponse) updates) => + super.copyWith((message) => updates(message as UpdateRoomResponse)) + as UpdateRoomResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static UpdateRoomResponse create() => UpdateRoomResponse._(); + @$core.override + UpdateRoomResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static UpdateRoomResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static UpdateRoomResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +/// 踢出成员请求 +class KickMemberRequest extends $pb.GeneratedMessage { + factory KickMemberRequest({ + $core.String? roomUuid, + $core.String? targetGameUserId, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (targetGameUserId != null) result.targetGameUserId = targetGameUserId; + return result; + } + + KickMemberRequest._(); + + factory KickMemberRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory KickMemberRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'KickMemberRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aOS(2, _omitFieldNames ? '' : 'targetGameUserId') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + KickMemberRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + KickMemberRequest copyWith(void Function(KickMemberRequest) updates) => + super.copyWith((message) => updates(message as KickMemberRequest)) + as KickMemberRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static KickMemberRequest create() => KickMemberRequest._(); + @$core.override + KickMemberRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static KickMemberRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static KickMemberRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get targetGameUserId => $_getSZ(1); + @$pb.TagNumber(2) + set targetGameUserId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasTargetGameUserId() => $_has(1); + @$pb.TagNumber(2) + void clearTargetGameUserId() => $_clearField(2); +} + +/// 踢出成员响应 +class KickMemberResponse extends $pb.GeneratedMessage { + factory KickMemberResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + KickMemberResponse._(); + + factory KickMemberResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory KickMemberResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'KickMemberResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + KickMemberResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + KickMemberResponse copyWith(void Function(KickMemberResponse) updates) => + super.copyWith((message) => updates(message as KickMemberResponse)) + as KickMemberResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static KickMemberResponse create() => KickMemberResponse._(); + @$core.override + KickMemberResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static KickMemberResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static KickMemberResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +/// 设置状态请求 +class SetStatusRequest extends $pb.GeneratedMessage { + factory SetStatusRequest({ + $core.String? roomUuid, + MemberStatus? status, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (status != null) result.status = status; + return result; + } + + SetStatusRequest._(); + + factory SetStatusRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory SetStatusRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'SetStatusRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aOM(2, _omitFieldNames ? '' : 'status', + subBuilder: MemberStatus.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SetStatusRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SetStatusRequest copyWith(void Function(SetStatusRequest) updates) => + super.copyWith((message) => updates(message as SetStatusRequest)) + as SetStatusRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static SetStatusRequest create() => SetStatusRequest._(); + @$core.override + SetStatusRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static SetStatusRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static SetStatusRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + MemberStatus get status => $_getN(1); + @$pb.TagNumber(2) + set status(MemberStatus value) => $_setField(2, value); + @$pb.TagNumber(2) + $core.bool hasStatus() => $_has(1); + @$pb.TagNumber(2) + void clearStatus() => $_clearField(2); + @$pb.TagNumber(2) + MemberStatus ensureStatus() => $_ensure(1); +} + +/// 设置状态响应 +class SetStatusResponse extends $pb.GeneratedMessage { + factory SetStatusResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + SetStatusResponse._(); + + factory SetStatusResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory SetStatusResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'SetStatusResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SetStatusResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SetStatusResponse copyWith(void Function(SetStatusResponse) updates) => + super.copyWith((message) => updates(message as SetStatusResponse)) + as SetStatusResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static SetStatusResponse create() => SetStatusResponse._(); + @$core.override + SetStatusResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static SetStatusResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static SetStatusResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +/// 发送信号请求 +class SendSignalRequest extends $pb.GeneratedMessage { + factory SendSignalRequest({ + $core.String? roomUuid, + $core.String? signalId, + $core.Iterable<$core.MapEntry<$core.String, $core.String>>? params, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (signalId != null) result.signalId = signalId; + if (params != null) result.params.addEntries(params); + return result; + } + + SendSignalRequest._(); + + factory SendSignalRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory SendSignalRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'SendSignalRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aOS(2, _omitFieldNames ? '' : 'signalId') + ..m<$core.String, $core.String>(3, _omitFieldNames ? '' : 'params', + entryClassName: 'SendSignalRequest.ParamsEntry', + keyFieldType: $pb.PbFieldType.OS, + valueFieldType: $pb.PbFieldType.OS, + packageName: const $pb.PackageName('partroom')) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SendSignalRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SendSignalRequest copyWith(void Function(SendSignalRequest) updates) => + super.copyWith((message) => updates(message as SendSignalRequest)) + as SendSignalRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static SendSignalRequest create() => SendSignalRequest._(); + @$core.override + SendSignalRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static SendSignalRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static SendSignalRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get signalId => $_getSZ(1); + @$pb.TagNumber(2) + set signalId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasSignalId() => $_has(1); + @$pb.TagNumber(2) + void clearSignalId() => $_clearField(2); + + @$pb.TagNumber(3) + $pb.PbMap<$core.String, $core.String> get params => $_getMap(2); +} + +/// 发送信号响应 +class SendSignalResponse extends $pb.GeneratedMessage { + factory SendSignalResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + SendSignalResponse._(); + + factory SendSignalResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory SendSignalResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'SendSignalResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SendSignalResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + SendSignalResponse copyWith(void Function(SendSignalResponse) updates) => + super.copyWith((message) => updates(message as SendSignalResponse)) + as SendSignalResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static SendSignalResponse create() => SendSignalResponse._(); + @$core.override + SendSignalResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static SendSignalResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static SendSignalResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +/// 房间事件 +class RoomEvent extends $pb.GeneratedMessage { + factory RoomEvent({ + RoomEventType? type, + $core.String? roomUuid, + $fixnum.Int64? timestamp, + RoomMember? member, + $core.String? signalId, + $core.String? signalSender, + $core.Iterable<$core.MapEntry<$core.String, $core.String>>? signalParams, + RoomInfo? roomInfo, + }) { + final result = create(); + if (type != null) result.type = type; + if (roomUuid != null) result.roomUuid = roomUuid; + if (timestamp != null) result.timestamp = timestamp; + if (member != null) result.member = member; + if (signalId != null) result.signalId = signalId; + if (signalSender != null) result.signalSender = signalSender; + if (signalParams != null) result.signalParams.addEntries(signalParams); + if (roomInfo != null) result.roomInfo = roomInfo; + return result; + } + + RoomEvent._(); + + factory RoomEvent.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory RoomEvent.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'RoomEvent', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aE(1, _omitFieldNames ? '' : 'type', + enumValues: RoomEventType.values) + ..aOS(2, _omitFieldNames ? '' : 'roomUuid') + ..aInt64(3, _omitFieldNames ? '' : 'timestamp') + ..aOM(4, _omitFieldNames ? '' : 'member', + subBuilder: RoomMember.create) + ..aOS(5, _omitFieldNames ? '' : 'signalId') + ..aOS(6, _omitFieldNames ? '' : 'signalSender') + ..m<$core.String, $core.String>(7, _omitFieldNames ? '' : 'signalParams', + entryClassName: 'RoomEvent.SignalParamsEntry', + keyFieldType: $pb.PbFieldType.OS, + valueFieldType: $pb.PbFieldType.OS, + packageName: const $pb.PackageName('partroom')) + ..aOM(8, _omitFieldNames ? '' : 'roomInfo', + subBuilder: RoomInfo.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RoomEvent clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RoomEvent copyWith(void Function(RoomEvent) updates) => + super.copyWith((message) => updates(message as RoomEvent)) as RoomEvent; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static RoomEvent create() => RoomEvent._(); + @$core.override + RoomEvent createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static RoomEvent getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static RoomEvent? _defaultInstance; + + @$pb.TagNumber(1) + RoomEventType get type => $_getN(0); + @$pb.TagNumber(1) + set type(RoomEventType value) => $_setField(1, value); + @$pb.TagNumber(1) + $core.bool hasType() => $_has(0); + @$pb.TagNumber(1) + void clearType() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get roomUuid => $_getSZ(1); + @$pb.TagNumber(2) + set roomUuid($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasRoomUuid() => $_has(1); + @$pb.TagNumber(2) + void clearRoomUuid() => $_clearField(2); + + @$pb.TagNumber(3) + $fixnum.Int64 get timestamp => $_getI64(2); + @$pb.TagNumber(3) + set timestamp($fixnum.Int64 value) => $_setInt64(2, value); + @$pb.TagNumber(3) + $core.bool hasTimestamp() => $_has(2); + @$pb.TagNumber(3) + void clearTimestamp() => $_clearField(3); + + /// 根据事件类型使用不同的字段 + @$pb.TagNumber(4) + RoomMember get member => $_getN(3); + @$pb.TagNumber(4) + set member(RoomMember value) => $_setField(4, value); + @$pb.TagNumber(4) + $core.bool hasMember() => $_has(3); + @$pb.TagNumber(4) + void clearMember() => $_clearField(4); + @$pb.TagNumber(4) + RoomMember ensureMember() => $_ensure(3); + + @$pb.TagNumber(5) + $core.String get signalId => $_getSZ(4); + @$pb.TagNumber(5) + set signalId($core.String value) => $_setString(4, value); + @$pb.TagNumber(5) + $core.bool hasSignalId() => $_has(4); + @$pb.TagNumber(5) + void clearSignalId() => $_clearField(5); + + @$pb.TagNumber(6) + $core.String get signalSender => $_getSZ(5); + @$pb.TagNumber(6) + set signalSender($core.String value) => $_setString(5, value); + @$pb.TagNumber(6) + $core.bool hasSignalSender() => $_has(5); + @$pb.TagNumber(6) + void clearSignalSender() => $_clearField(6); + + @$pb.TagNumber(7) + $pb.PbMap<$core.String, $core.String> get signalParams => $_getMap(6); + + @$pb.TagNumber(8) + RoomInfo get roomInfo => $_getN(7); + @$pb.TagNumber(8) + set roomInfo(RoomInfo value) => $_setField(8, value); + @$pb.TagNumber(8) + $core.bool hasRoomInfo() => $_has(7); + @$pb.TagNumber(8) + void clearRoomInfo() => $_clearField(8); + @$pb.TagNumber(8) + RoomInfo ensureRoomInfo() => $_ensure(7); +} + +/// 监听房间事件请求 +class ListenRoomEventsRequest extends $pb.GeneratedMessage { + factory ListenRoomEventsRequest({ + $core.String? roomUuid, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + return result; + } + + ListenRoomEventsRequest._(); + + factory ListenRoomEventsRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory ListenRoomEventsRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'ListenRoomEventsRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + ListenRoomEventsRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + ListenRoomEventsRequest copyWith( + void Function(ListenRoomEventsRequest) updates) => + super.copyWith((message) => updates(message as ListenRoomEventsRequest)) + as ListenRoomEventsRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static ListenRoomEventsRequest create() => ListenRoomEventsRequest._(); + @$core.override + ListenRoomEventsRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static ListenRoomEventsRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static ListenRoomEventsRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); +} + +/// 转移房主请求 +class TransferOwnershipRequest extends $pb.GeneratedMessage { + factory TransferOwnershipRequest({ + $core.String? roomUuid, + $core.String? targetGameUserId, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (targetGameUserId != null) result.targetGameUserId = targetGameUserId; + return result; + } + + TransferOwnershipRequest._(); + + factory TransferOwnershipRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory TransferOwnershipRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'TransferOwnershipRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aOS(2, _omitFieldNames ? '' : 'targetGameUserId') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + TransferOwnershipRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + TransferOwnershipRequest copyWith( + void Function(TransferOwnershipRequest) updates) => + super.copyWith((message) => updates(message as TransferOwnershipRequest)) + as TransferOwnershipRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static TransferOwnershipRequest create() => TransferOwnershipRequest._(); + @$core.override + TransferOwnershipRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static TransferOwnershipRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static TransferOwnershipRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get targetGameUserId => $_getSZ(1); + @$pb.TagNumber(2) + set targetGameUserId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasTargetGameUserId() => $_has(1); + @$pb.TagNumber(2) + void clearTargetGameUserId() => $_clearField(2); +} + +/// 转移房主响应 +class TransferOwnershipResponse extends $pb.GeneratedMessage { + factory TransferOwnershipResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + TransferOwnershipResponse._(); + + factory TransferOwnershipResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory TransferOwnershipResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'TransferOwnershipResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + TransferOwnershipResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + TransferOwnershipResponse copyWith( + void Function(TransferOwnershipResponse) updates) => + super.copyWith((message) => updates(message as TransferOwnershipResponse)) + as TransferOwnershipResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static TransferOwnershipResponse create() => TransferOwnershipResponse._(); + @$core.override + TransferOwnershipResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static TransferOwnershipResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static TransferOwnershipResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +/// 被踢出成员 +class KickedMember extends $pb.GeneratedMessage { + factory KickedMember({ + $core.String? gameUserId, + $core.String? handleName, + $core.String? avatarUrl, + $fixnum.Int64? joinedAt, + $fixnum.Int64? kickedAt, + }) { + final result = create(); + if (gameUserId != null) result.gameUserId = gameUserId; + if (handleName != null) result.handleName = handleName; + if (avatarUrl != null) result.avatarUrl = avatarUrl; + if (joinedAt != null) result.joinedAt = joinedAt; + if (kickedAt != null) result.kickedAt = kickedAt; + return result; + } + + KickedMember._(); + + factory KickedMember.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory KickedMember.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'KickedMember', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'gameUserId') + ..aOS(2, _omitFieldNames ? '' : 'handleName') + ..aOS(3, _omitFieldNames ? '' : 'avatarUrl') + ..aInt64(4, _omitFieldNames ? '' : 'joinedAt') + ..aInt64(5, _omitFieldNames ? '' : 'kickedAt') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + KickedMember clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + KickedMember copyWith(void Function(KickedMember) updates) => + super.copyWith((message) => updates(message as KickedMember)) + as KickedMember; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static KickedMember create() => KickedMember._(); + @$core.override + KickedMember createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static KickedMember getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static KickedMember? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get gameUserId => $_getSZ(0); + @$pb.TagNumber(1) + set gameUserId($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasGameUserId() => $_has(0); + @$pb.TagNumber(1) + void clearGameUserId() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get handleName => $_getSZ(1); + @$pb.TagNumber(2) + set handleName($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasHandleName() => $_has(1); + @$pb.TagNumber(2) + void clearHandleName() => $_clearField(2); + + @$pb.TagNumber(3) + $core.String get avatarUrl => $_getSZ(2); + @$pb.TagNumber(3) + set avatarUrl($core.String value) => $_setString(2, value); + @$pb.TagNumber(3) + $core.bool hasAvatarUrl() => $_has(2); + @$pb.TagNumber(3) + void clearAvatarUrl() => $_clearField(3); + + @$pb.TagNumber(4) + $fixnum.Int64 get joinedAt => $_getI64(3); + @$pb.TagNumber(4) + set joinedAt($fixnum.Int64 value) => $_setInt64(3, value); + @$pb.TagNumber(4) + $core.bool hasJoinedAt() => $_has(3); + @$pb.TagNumber(4) + void clearJoinedAt() => $_clearField(4); + + @$pb.TagNumber(5) + $fixnum.Int64 get kickedAt => $_getI64(4); + @$pb.TagNumber(5) + set kickedAt($fixnum.Int64 value) => $_setInt64(4, value); + @$pb.TagNumber(5) + $core.bool hasKickedAt() => $_has(4); + @$pb.TagNumber(5) + void clearKickedAt() => $_clearField(5); +} + +/// 获取被踢出成员请求 +class GetKickedMembersRequest extends $pb.GeneratedMessage { + factory GetKickedMembersRequest({ + $core.String? roomUuid, + $core.int? page, + $core.int? pageSize, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (page != null) result.page = page; + if (pageSize != null) result.pageSize = pageSize; + return result; + } + + GetKickedMembersRequest._(); + + factory GetKickedMembersRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetKickedMembersRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetKickedMembersRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aI(2, _omitFieldNames ? '' : 'page') + ..aI(3, _omitFieldNames ? '' : 'pageSize') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetKickedMembersRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetKickedMembersRequest copyWith( + void Function(GetKickedMembersRequest) updates) => + super.copyWith((message) => updates(message as GetKickedMembersRequest)) + as GetKickedMembersRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetKickedMembersRequest create() => GetKickedMembersRequest._(); + @$core.override + GetKickedMembersRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetKickedMembersRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetKickedMembersRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.int get page => $_getIZ(1); + @$pb.TagNumber(2) + set page($core.int value) => $_setSignedInt32(1, value); + @$pb.TagNumber(2) + $core.bool hasPage() => $_has(1); + @$pb.TagNumber(2) + void clearPage() => $_clearField(2); + + @$pb.TagNumber(3) + $core.int get pageSize => $_getIZ(2); + @$pb.TagNumber(3) + set pageSize($core.int value) => $_setSignedInt32(2, value); + @$pb.TagNumber(3) + $core.bool hasPageSize() => $_has(2); + @$pb.TagNumber(3) + void clearPageSize() => $_clearField(3); +} + +/// 获取被踢出成员响应 +class GetKickedMembersResponse extends $pb.GeneratedMessage { + factory GetKickedMembersResponse({ + $core.Iterable? members, + $core.int? total, + }) { + final result = create(); + if (members != null) result.members.addAll(members); + if (total != null) result.total = total; + return result; + } + + GetKickedMembersResponse._(); + + factory GetKickedMembersResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory GetKickedMembersResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'GetKickedMembersResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..pPM(1, _omitFieldNames ? '' : 'members', + subBuilder: KickedMember.create) + ..aI(2, _omitFieldNames ? '' : 'total') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetKickedMembersResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + GetKickedMembersResponse copyWith( + void Function(GetKickedMembersResponse) updates) => + super.copyWith((message) => updates(message as GetKickedMembersResponse)) + as GetKickedMembersResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static GetKickedMembersResponse create() => GetKickedMembersResponse._(); + @$core.override + GetKickedMembersResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static GetKickedMembersResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static GetKickedMembersResponse? _defaultInstance; + + @$pb.TagNumber(1) + $pb.PbList get members => $_getList(0); + + @$pb.TagNumber(2) + $core.int get total => $_getIZ(1); + @$pb.TagNumber(2) + set total($core.int value) => $_setSignedInt32(1, value); + @$pb.TagNumber(2) + $core.bool hasTotal() => $_has(1); + @$pb.TagNumber(2) + void clearTotal() => $_clearField(2); +} + +/// 移除被踢出成员请求 +class RemoveKickedMemberRequest extends $pb.GeneratedMessage { + factory RemoveKickedMemberRequest({ + $core.String? roomUuid, + $core.String? gameUserId, + }) { + final result = create(); + if (roomUuid != null) result.roomUuid = roomUuid; + if (gameUserId != null) result.gameUserId = gameUserId; + return result; + } + + RemoveKickedMemberRequest._(); + + factory RemoveKickedMemberRequest.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory RemoveKickedMemberRequest.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'RemoveKickedMemberRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'roomUuid') + ..aOS(2, _omitFieldNames ? '' : 'gameUserId') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RemoveKickedMemberRequest clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RemoveKickedMemberRequest copyWith( + void Function(RemoveKickedMemberRequest) updates) => + super.copyWith((message) => updates(message as RemoveKickedMemberRequest)) + as RemoveKickedMemberRequest; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static RemoveKickedMemberRequest create() => RemoveKickedMemberRequest._(); + @$core.override + RemoveKickedMemberRequest createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static RemoveKickedMemberRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static RemoveKickedMemberRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get roomUuid => $_getSZ(0); + @$pb.TagNumber(1) + set roomUuid($core.String value) => $_setString(0, value); + @$pb.TagNumber(1) + $core.bool hasRoomUuid() => $_has(0); + @$pb.TagNumber(1) + void clearRoomUuid() => $_clearField(1); + + @$pb.TagNumber(2) + $core.String get gameUserId => $_getSZ(1); + @$pb.TagNumber(2) + set gameUserId($core.String value) => $_setString(1, value); + @$pb.TagNumber(2) + $core.bool hasGameUserId() => $_has(1); + @$pb.TagNumber(2) + void clearGameUserId() => $_clearField(2); +} + +/// 移除被踢出成员响应 +class RemoveKickedMemberResponse extends $pb.GeneratedMessage { + factory RemoveKickedMemberResponse({ + $core.bool? success, + }) { + final result = create(); + if (success != null) result.success = success; + return result; + } + + RemoveKickedMemberResponse._(); + + factory RemoveKickedMemberResponse.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory RemoveKickedMemberResponse.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'RemoveKickedMemberResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'partroom'), + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'success') + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RemoveKickedMemberResponse clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + RemoveKickedMemberResponse copyWith( + void Function(RemoveKickedMemberResponse) updates) => + super.copyWith( + (message) => updates(message as RemoveKickedMemberResponse)) + as RemoveKickedMemberResponse; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static RemoveKickedMemberResponse create() => RemoveKickedMemberResponse._(); + @$core.override + RemoveKickedMemberResponse createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static RemoveKickedMemberResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static RemoveKickedMemberResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get success => $_getBF(0); + @$pb.TagNumber(1) + set success($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => $_clearField(1); +} + +const $core.bool _omitFieldNames = + $core.bool.fromEnvironment('protobuf.omit_field_names'); +const $core.bool _omitMessageNames = + $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/lib/generated/proto/partroom/partroom.pbenum.dart b/lib/generated/proto/partroom/partroom.pbenum.dart new file mode 100644 index 0000000..f919bb5 --- /dev/null +++ b/lib/generated/proto/partroom/partroom.pbenum.dart @@ -0,0 +1,56 @@ +// This is a generated file - do not edit. +// +// Generated from proto/partroom/partroom.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names + +import 'dart:core' as $core; + +import 'package:protobuf/protobuf.dart' as $pb; + +/// 房间事件类型 +class RoomEventType extends $pb.ProtobufEnum { + static const RoomEventType MEMBER_JOINED = + RoomEventType._(0, _omitEnumNames ? '' : 'MEMBER_JOINED'); + static const RoomEventType MEMBER_LEFT = + RoomEventType._(1, _omitEnumNames ? '' : 'MEMBER_LEFT'); + static const RoomEventType OWNER_CHANGED = + RoomEventType._(2, _omitEnumNames ? '' : 'OWNER_CHANGED'); + static const RoomEventType ROOM_UPDATED = + RoomEventType._(3, _omitEnumNames ? '' : 'ROOM_UPDATED'); + static const RoomEventType MEMBER_STATUS_UPDATED = + RoomEventType._(4, _omitEnumNames ? '' : 'MEMBER_STATUS_UPDATED'); + static const RoomEventType SIGNAL_BROADCAST = + RoomEventType._(5, _omitEnumNames ? '' : 'SIGNAL_BROADCAST'); + static const RoomEventType ROOM_DISMISSED = + RoomEventType._(6, _omitEnumNames ? '' : 'ROOM_DISMISSED'); + static const RoomEventType MEMBER_KICKED = + RoomEventType._(7, _omitEnumNames ? '' : 'MEMBER_KICKED'); + + static const $core.List values = [ + MEMBER_JOINED, + MEMBER_LEFT, + OWNER_CHANGED, + ROOM_UPDATED, + MEMBER_STATUS_UPDATED, + SIGNAL_BROADCAST, + ROOM_DISMISSED, + MEMBER_KICKED, + ]; + + static final $core.List _byValue = + $pb.ProtobufEnum.$_initByValueList(values, 7); + static RoomEventType? valueOf($core.int value) => + value < 0 || value >= _byValue.length ? null : _byValue[value]; + + const RoomEventType._(super.value, super.name); +} + +const $core.bool _omitEnumNames = + $core.bool.fromEnvironment('protobuf.omit_enum_names'); diff --git a/lib/generated/proto/partroom/partroom.pbgrpc.dart b/lib/generated/proto/partroom/partroom.pbgrpc.dart new file mode 100644 index 0000000..a00f136 --- /dev/null +++ b/lib/generated/proto/partroom/partroom.pbgrpc.dart @@ -0,0 +1,543 @@ +// This is a generated file - do not edit. +// +// Generated from proto/partroom/partroom.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names + +import 'dart:async' as $async; +import 'dart:core' as $core; + +import 'package:grpc/service_api.dart' as $grpc; +import 'package:protobuf/protobuf.dart' as $pb; + +import 'partroom.pb.dart' as $0; + +export 'partroom.pb.dart'; + +/// 房间服务 +@$pb.GrpcServiceName('partroom.PartRoomService') +class PartRoomServiceClient extends $grpc.Client { + /// The hostname for this service. + static const $core.String defaultHost = ''; + + /// OAuth scopes needed for the client. + static const $core.List<$core.String> oauthScopes = [ + '', + ]; + + PartRoomServiceClient(super.channel, {super.options, super.interceptors}); + + /// 获取房间列表(匿名接口) + $grpc.ResponseFuture<$0.GetRoomListResponse> getRoomList( + $0.GetRoomListRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$getRoomList, request, options: options); + } + + /// 创建房间(需认证) + $grpc.ResponseFuture<$0.CreateRoomResponse> createRoom( + $0.CreateRoomRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$createRoom, request, options: options); + } + + /// 加入房间(需认证) + $grpc.ResponseFuture<$0.JoinRoomResponse> joinRoom( + $0.JoinRoomRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$joinRoom, request, options: options); + } + + /// 离开房间(需认证) + $grpc.ResponseFuture<$0.LeaveRoomResponse> leaveRoom( + $0.LeaveRoomRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$leaveRoom, request, options: options); + } + + /// 解散房间(需认证,仅房主) + $grpc.ResponseFuture<$0.DismissRoomResponse> dismissRoom( + $0.DismissRoomRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$dismissRoom, request, options: options); + } + + /// 获取房间详情(需认证) + $grpc.ResponseFuture<$0.GetRoomInfoResponse> getRoomInfo( + $0.GetRoomInfoRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$getRoomInfo, request, options: options); + } + + /// 获取房间成员列表(需认证) + $grpc.ResponseFuture<$0.GetRoomMembersResponse> getRoomMembers( + $0.GetRoomMembersRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$getRoomMembers, request, options: options); + } + + /// 心跳(需认证) + $grpc.ResponseFuture<$0.HeartbeatResponse> heartbeat( + $0.HeartbeatRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$heartbeat, request, options: options); + } + + /// 获取当前用户所在房间(需认证) + $grpc.ResponseFuture<$0.GetMyRoomResponse> getMyRoom( + $0.GetMyRoomRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$getMyRoom, request, options: options); + } + + /// 更新房间信息(需认证,仅房主) + $grpc.ResponseFuture<$0.UpdateRoomResponse> updateRoom( + $0.UpdateRoomRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$updateRoom, request, options: options); + } + + /// 踢出成员(需认证,仅房主) + $grpc.ResponseFuture<$0.KickMemberResponse> kickMember( + $0.KickMemberRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$kickMember, request, options: options); + } + + /// 设置状态(需认证) + $grpc.ResponseFuture<$0.SetStatusResponse> setStatus( + $0.SetStatusRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$setStatus, request, options: options); + } + + /// 发送信号(需认证) + $grpc.ResponseFuture<$0.SendSignalResponse> sendSignal( + $0.SendSignalRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$sendSignal, request, options: options); + } + + /// 监听房间事件流(需认证) + $grpc.ResponseStream<$0.RoomEvent> listenRoomEvents( + $0.ListenRoomEventsRequest request, { + $grpc.CallOptions? options, + }) { + return $createStreamingCall( + _$listenRoomEvents, $async.Stream.fromIterable([request]), + options: options); + } + + /// 转移房主(需认证,仅房主) + $grpc.ResponseFuture<$0.TransferOwnershipResponse> transferOwnership( + $0.TransferOwnershipRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$transferOwnership, request, options: options); + } + + /// 获取被踢出成员列表(需认证,仅房主) + $grpc.ResponseFuture<$0.GetKickedMembersResponse> getKickedMembers( + $0.GetKickedMembersRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$getKickedMembers, request, options: options); + } + + /// 移除被踢出成员(需认证,仅房主) + $grpc.ResponseFuture<$0.RemoveKickedMemberResponse> removeKickedMember( + $0.RemoveKickedMemberRequest request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$removeKickedMember, request, options: options); + } + + // method descriptors + + static final _$getRoomList = + $grpc.ClientMethod<$0.GetRoomListRequest, $0.GetRoomListResponse>( + '/partroom.PartRoomService/GetRoomList', + ($0.GetRoomListRequest value) => value.writeToBuffer(), + $0.GetRoomListResponse.fromBuffer); + static final _$createRoom = + $grpc.ClientMethod<$0.CreateRoomRequest, $0.CreateRoomResponse>( + '/partroom.PartRoomService/CreateRoom', + ($0.CreateRoomRequest value) => value.writeToBuffer(), + $0.CreateRoomResponse.fromBuffer); + static final _$joinRoom = + $grpc.ClientMethod<$0.JoinRoomRequest, $0.JoinRoomResponse>( + '/partroom.PartRoomService/JoinRoom', + ($0.JoinRoomRequest value) => value.writeToBuffer(), + $0.JoinRoomResponse.fromBuffer); + static final _$leaveRoom = + $grpc.ClientMethod<$0.LeaveRoomRequest, $0.LeaveRoomResponse>( + '/partroom.PartRoomService/LeaveRoom', + ($0.LeaveRoomRequest value) => value.writeToBuffer(), + $0.LeaveRoomResponse.fromBuffer); + static final _$dismissRoom = + $grpc.ClientMethod<$0.DismissRoomRequest, $0.DismissRoomResponse>( + '/partroom.PartRoomService/DismissRoom', + ($0.DismissRoomRequest value) => value.writeToBuffer(), + $0.DismissRoomResponse.fromBuffer); + static final _$getRoomInfo = + $grpc.ClientMethod<$0.GetRoomInfoRequest, $0.GetRoomInfoResponse>( + '/partroom.PartRoomService/GetRoomInfo', + ($0.GetRoomInfoRequest value) => value.writeToBuffer(), + $0.GetRoomInfoResponse.fromBuffer); + static final _$getRoomMembers = + $grpc.ClientMethod<$0.GetRoomMembersRequest, $0.GetRoomMembersResponse>( + '/partroom.PartRoomService/GetRoomMembers', + ($0.GetRoomMembersRequest value) => value.writeToBuffer(), + $0.GetRoomMembersResponse.fromBuffer); + static final _$heartbeat = + $grpc.ClientMethod<$0.HeartbeatRequest, $0.HeartbeatResponse>( + '/partroom.PartRoomService/Heartbeat', + ($0.HeartbeatRequest value) => value.writeToBuffer(), + $0.HeartbeatResponse.fromBuffer); + static final _$getMyRoom = + $grpc.ClientMethod<$0.GetMyRoomRequest, $0.GetMyRoomResponse>( + '/partroom.PartRoomService/GetMyRoom', + ($0.GetMyRoomRequest value) => value.writeToBuffer(), + $0.GetMyRoomResponse.fromBuffer); + static final _$updateRoom = + $grpc.ClientMethod<$0.UpdateRoomRequest, $0.UpdateRoomResponse>( + '/partroom.PartRoomService/UpdateRoom', + ($0.UpdateRoomRequest value) => value.writeToBuffer(), + $0.UpdateRoomResponse.fromBuffer); + static final _$kickMember = + $grpc.ClientMethod<$0.KickMemberRequest, $0.KickMemberResponse>( + '/partroom.PartRoomService/KickMember', + ($0.KickMemberRequest value) => value.writeToBuffer(), + $0.KickMemberResponse.fromBuffer); + static final _$setStatus = + $grpc.ClientMethod<$0.SetStatusRequest, $0.SetStatusResponse>( + '/partroom.PartRoomService/SetStatus', + ($0.SetStatusRequest value) => value.writeToBuffer(), + $0.SetStatusResponse.fromBuffer); + static final _$sendSignal = + $grpc.ClientMethod<$0.SendSignalRequest, $0.SendSignalResponse>( + '/partroom.PartRoomService/SendSignal', + ($0.SendSignalRequest value) => value.writeToBuffer(), + $0.SendSignalResponse.fromBuffer); + static final _$listenRoomEvents = + $grpc.ClientMethod<$0.ListenRoomEventsRequest, $0.RoomEvent>( + '/partroom.PartRoomService/ListenRoomEvents', + ($0.ListenRoomEventsRequest value) => value.writeToBuffer(), + $0.RoomEvent.fromBuffer); + static final _$transferOwnership = $grpc.ClientMethod< + $0.TransferOwnershipRequest, $0.TransferOwnershipResponse>( + '/partroom.PartRoomService/TransferOwnership', + ($0.TransferOwnershipRequest value) => value.writeToBuffer(), + $0.TransferOwnershipResponse.fromBuffer); + static final _$getKickedMembers = $grpc.ClientMethod< + $0.GetKickedMembersRequest, $0.GetKickedMembersResponse>( + '/partroom.PartRoomService/GetKickedMembers', + ($0.GetKickedMembersRequest value) => value.writeToBuffer(), + $0.GetKickedMembersResponse.fromBuffer); + static final _$removeKickedMember = $grpc.ClientMethod< + $0.RemoveKickedMemberRequest, $0.RemoveKickedMemberResponse>( + '/partroom.PartRoomService/RemoveKickedMember', + ($0.RemoveKickedMemberRequest value) => value.writeToBuffer(), + $0.RemoveKickedMemberResponse.fromBuffer); +} + +@$pb.GrpcServiceName('partroom.PartRoomService') +abstract class PartRoomServiceBase extends $grpc.Service { + $core.String get $name => 'partroom.PartRoomService'; + + PartRoomServiceBase() { + $addMethod( + $grpc.ServiceMethod<$0.GetRoomListRequest, $0.GetRoomListResponse>( + 'GetRoomList', + getRoomList_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.GetRoomListRequest.fromBuffer(value), + ($0.GetRoomListResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.CreateRoomRequest, $0.CreateRoomResponse>( + 'CreateRoom', + createRoom_Pre, + false, + false, + ($core.List<$core.int> value) => $0.CreateRoomRequest.fromBuffer(value), + ($0.CreateRoomResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.JoinRoomRequest, $0.JoinRoomResponse>( + 'JoinRoom', + joinRoom_Pre, + false, + false, + ($core.List<$core.int> value) => $0.JoinRoomRequest.fromBuffer(value), + ($0.JoinRoomResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.LeaveRoomRequest, $0.LeaveRoomResponse>( + 'LeaveRoom', + leaveRoom_Pre, + false, + false, + ($core.List<$core.int> value) => $0.LeaveRoomRequest.fromBuffer(value), + ($0.LeaveRoomResponse value) => value.writeToBuffer())); + $addMethod( + $grpc.ServiceMethod<$0.DismissRoomRequest, $0.DismissRoomResponse>( + 'DismissRoom', + dismissRoom_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.DismissRoomRequest.fromBuffer(value), + ($0.DismissRoomResponse value) => value.writeToBuffer())); + $addMethod( + $grpc.ServiceMethod<$0.GetRoomInfoRequest, $0.GetRoomInfoResponse>( + 'GetRoomInfo', + getRoomInfo_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.GetRoomInfoRequest.fromBuffer(value), + ($0.GetRoomInfoResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.GetRoomMembersRequest, + $0.GetRoomMembersResponse>( + 'GetRoomMembers', + getRoomMembers_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.GetRoomMembersRequest.fromBuffer(value), + ($0.GetRoomMembersResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.HeartbeatRequest, $0.HeartbeatResponse>( + 'Heartbeat', + heartbeat_Pre, + false, + false, + ($core.List<$core.int> value) => $0.HeartbeatRequest.fromBuffer(value), + ($0.HeartbeatResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.GetMyRoomRequest, $0.GetMyRoomResponse>( + 'GetMyRoom', + getMyRoom_Pre, + false, + false, + ($core.List<$core.int> value) => $0.GetMyRoomRequest.fromBuffer(value), + ($0.GetMyRoomResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.UpdateRoomRequest, $0.UpdateRoomResponse>( + 'UpdateRoom', + updateRoom_Pre, + false, + false, + ($core.List<$core.int> value) => $0.UpdateRoomRequest.fromBuffer(value), + ($0.UpdateRoomResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.KickMemberRequest, $0.KickMemberResponse>( + 'KickMember', + kickMember_Pre, + false, + false, + ($core.List<$core.int> value) => $0.KickMemberRequest.fromBuffer(value), + ($0.KickMemberResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.SetStatusRequest, $0.SetStatusResponse>( + 'SetStatus', + setStatus_Pre, + false, + false, + ($core.List<$core.int> value) => $0.SetStatusRequest.fromBuffer(value), + ($0.SetStatusResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.SendSignalRequest, $0.SendSignalResponse>( + 'SendSignal', + sendSignal_Pre, + false, + false, + ($core.List<$core.int> value) => $0.SendSignalRequest.fromBuffer(value), + ($0.SendSignalResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.ListenRoomEventsRequest, $0.RoomEvent>( + 'ListenRoomEvents', + listenRoomEvents_Pre, + false, + true, + ($core.List<$core.int> value) => + $0.ListenRoomEventsRequest.fromBuffer(value), + ($0.RoomEvent value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.TransferOwnershipRequest, + $0.TransferOwnershipResponse>( + 'TransferOwnership', + transferOwnership_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.TransferOwnershipRequest.fromBuffer(value), + ($0.TransferOwnershipResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.GetKickedMembersRequest, + $0.GetKickedMembersResponse>( + 'GetKickedMembers', + getKickedMembers_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.GetKickedMembersRequest.fromBuffer(value), + ($0.GetKickedMembersResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.RemoveKickedMemberRequest, + $0.RemoveKickedMemberResponse>( + 'RemoveKickedMember', + removeKickedMember_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.RemoveKickedMemberRequest.fromBuffer(value), + ($0.RemoveKickedMemberResponse value) => value.writeToBuffer())); + } + + $async.Future<$0.GetRoomListResponse> getRoomList_Pre($grpc.ServiceCall $call, + $async.Future<$0.GetRoomListRequest> $request) async { + return getRoomList($call, await $request); + } + + $async.Future<$0.GetRoomListResponse> getRoomList( + $grpc.ServiceCall call, $0.GetRoomListRequest request); + + $async.Future<$0.CreateRoomResponse> createRoom_Pre($grpc.ServiceCall $call, + $async.Future<$0.CreateRoomRequest> $request) async { + return createRoom($call, await $request); + } + + $async.Future<$0.CreateRoomResponse> createRoom( + $grpc.ServiceCall call, $0.CreateRoomRequest request); + + $async.Future<$0.JoinRoomResponse> joinRoom_Pre($grpc.ServiceCall $call, + $async.Future<$0.JoinRoomRequest> $request) async { + return joinRoom($call, await $request); + } + + $async.Future<$0.JoinRoomResponse> joinRoom( + $grpc.ServiceCall call, $0.JoinRoomRequest request); + + $async.Future<$0.LeaveRoomResponse> leaveRoom_Pre($grpc.ServiceCall $call, + $async.Future<$0.LeaveRoomRequest> $request) async { + return leaveRoom($call, await $request); + } + + $async.Future<$0.LeaveRoomResponse> leaveRoom( + $grpc.ServiceCall call, $0.LeaveRoomRequest request); + + $async.Future<$0.DismissRoomResponse> dismissRoom_Pre($grpc.ServiceCall $call, + $async.Future<$0.DismissRoomRequest> $request) async { + return dismissRoom($call, await $request); + } + + $async.Future<$0.DismissRoomResponse> dismissRoom( + $grpc.ServiceCall call, $0.DismissRoomRequest request); + + $async.Future<$0.GetRoomInfoResponse> getRoomInfo_Pre($grpc.ServiceCall $call, + $async.Future<$0.GetRoomInfoRequest> $request) async { + return getRoomInfo($call, await $request); + } + + $async.Future<$0.GetRoomInfoResponse> getRoomInfo( + $grpc.ServiceCall call, $0.GetRoomInfoRequest request); + + $async.Future<$0.GetRoomMembersResponse> getRoomMembers_Pre( + $grpc.ServiceCall $call, + $async.Future<$0.GetRoomMembersRequest> $request) async { + return getRoomMembers($call, await $request); + } + + $async.Future<$0.GetRoomMembersResponse> getRoomMembers( + $grpc.ServiceCall call, $0.GetRoomMembersRequest request); + + $async.Future<$0.HeartbeatResponse> heartbeat_Pre($grpc.ServiceCall $call, + $async.Future<$0.HeartbeatRequest> $request) async { + return heartbeat($call, await $request); + } + + $async.Future<$0.HeartbeatResponse> heartbeat( + $grpc.ServiceCall call, $0.HeartbeatRequest request); + + $async.Future<$0.GetMyRoomResponse> getMyRoom_Pre($grpc.ServiceCall $call, + $async.Future<$0.GetMyRoomRequest> $request) async { + return getMyRoom($call, await $request); + } + + $async.Future<$0.GetMyRoomResponse> getMyRoom( + $grpc.ServiceCall call, $0.GetMyRoomRequest request); + + $async.Future<$0.UpdateRoomResponse> updateRoom_Pre($grpc.ServiceCall $call, + $async.Future<$0.UpdateRoomRequest> $request) async { + return updateRoom($call, await $request); + } + + $async.Future<$0.UpdateRoomResponse> updateRoom( + $grpc.ServiceCall call, $0.UpdateRoomRequest request); + + $async.Future<$0.KickMemberResponse> kickMember_Pre($grpc.ServiceCall $call, + $async.Future<$0.KickMemberRequest> $request) async { + return kickMember($call, await $request); + } + + $async.Future<$0.KickMemberResponse> kickMember( + $grpc.ServiceCall call, $0.KickMemberRequest request); + + $async.Future<$0.SetStatusResponse> setStatus_Pre($grpc.ServiceCall $call, + $async.Future<$0.SetStatusRequest> $request) async { + return setStatus($call, await $request); + } + + $async.Future<$0.SetStatusResponse> setStatus( + $grpc.ServiceCall call, $0.SetStatusRequest request); + + $async.Future<$0.SendSignalResponse> sendSignal_Pre($grpc.ServiceCall $call, + $async.Future<$0.SendSignalRequest> $request) async { + return sendSignal($call, await $request); + } + + $async.Future<$0.SendSignalResponse> sendSignal( + $grpc.ServiceCall call, $0.SendSignalRequest request); + + $async.Stream<$0.RoomEvent> listenRoomEvents_Pre($grpc.ServiceCall $call, + $async.Future<$0.ListenRoomEventsRequest> $request) async* { + yield* listenRoomEvents($call, await $request); + } + + $async.Stream<$0.RoomEvent> listenRoomEvents( + $grpc.ServiceCall call, $0.ListenRoomEventsRequest request); + + $async.Future<$0.TransferOwnershipResponse> transferOwnership_Pre( + $grpc.ServiceCall $call, + $async.Future<$0.TransferOwnershipRequest> $request) async { + return transferOwnership($call, await $request); + } + + $async.Future<$0.TransferOwnershipResponse> transferOwnership( + $grpc.ServiceCall call, $0.TransferOwnershipRequest request); + + $async.Future<$0.GetKickedMembersResponse> getKickedMembers_Pre( + $grpc.ServiceCall $call, + $async.Future<$0.GetKickedMembersRequest> $request) async { + return getKickedMembers($call, await $request); + } + + $async.Future<$0.GetKickedMembersResponse> getKickedMembers( + $grpc.ServiceCall call, $0.GetKickedMembersRequest request); + + $async.Future<$0.RemoveKickedMemberResponse> removeKickedMember_Pre( + $grpc.ServiceCall $call, + $async.Future<$0.RemoveKickedMemberRequest> $request) async { + return removeKickedMember($call, await $request); + } + + $async.Future<$0.RemoveKickedMemberResponse> removeKickedMember( + $grpc.ServiceCall call, $0.RemoveKickedMemberRequest request); +} diff --git a/lib/generated/proto/partroom/partroom.pbjson.dart b/lib/generated/proto/partroom/partroom.pbjson.dart new file mode 100644 index 0000000..acf8c45 --- /dev/null +++ b/lib/generated/proto/partroom/partroom.pbjson.dart @@ -0,0 +1,759 @@ +// This is a generated file - do not edit. +// +// Generated from proto/partroom/partroom.proto. + +// @dart = 3.3 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: curly_braces_in_flow_control_structures +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names, unused_import + +import 'dart:convert' as $convert; +import 'dart:core' as $core; +import 'dart:typed_data' as $typed_data; + +@$core.Deprecated('Use roomEventTypeDescriptor instead') +const RoomEventType$json = { + '1': 'RoomEventType', + '2': [ + {'1': 'MEMBER_JOINED', '2': 0}, + {'1': 'MEMBER_LEFT', '2': 1}, + {'1': 'OWNER_CHANGED', '2': 2}, + {'1': 'ROOM_UPDATED', '2': 3}, + {'1': 'MEMBER_STATUS_UPDATED', '2': 4}, + {'1': 'SIGNAL_BROADCAST', '2': 5}, + {'1': 'ROOM_DISMISSED', '2': 6}, + {'1': 'MEMBER_KICKED', '2': 7}, + ], +}; + +/// Descriptor for `RoomEventType`. Decode as a `google.protobuf.EnumDescriptorProto`. +final $typed_data.Uint8List roomEventTypeDescriptor = $convert.base64Decode( + 'Cg1Sb29tRXZlbnRUeXBlEhEKDU1FTUJFUl9KT0lORUQQABIPCgtNRU1CRVJfTEVGVBABEhEKDU' + '9XTkVSX0NIQU5HRUQQAhIQCgxST09NX1VQREFURUQQAxIZChVNRU1CRVJfU1RBVFVTX1VQREFU' + 'RUQQBBIUChBTSUdOQUxfQlJPQURDQVNUEAUSEgoOUk9PTV9ESVNNSVNTRUQQBhIRCg1NRU1CRV' + 'JfS0lDS0VEEAc='); + +@$core.Deprecated('Use roomListItemDescriptor instead') +const RoomListItem$json = { + '1': 'RoomListItem', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + {'1': 'owner_game_id', '3': 2, '4': 1, '5': 9, '10': 'ownerGameId'}, + {'1': 'owner_handle_name', '3': 3, '4': 1, '5': 9, '10': 'ownerHandleName'}, + {'1': 'owner_avatar', '3': 4, '4': 1, '5': 9, '10': 'ownerAvatar'}, + {'1': 'main_tag_id', '3': 5, '4': 1, '5': 9, '10': 'mainTagId'}, + {'1': 'sub_tag_id', '3': 6, '4': 1, '5': 9, '10': 'subTagId'}, + {'1': 'created_at', '3': 7, '4': 1, '5': 3, '10': 'createdAt'}, + {'1': 'owner_last_active', '3': 8, '4': 1, '5': 3, '10': 'ownerLastActive'}, + {'1': 'current_members', '3': 9, '4': 1, '5': 5, '10': 'currentMembers'}, + {'1': 'target_members', '3': 10, '4': 1, '5': 5, '10': 'targetMembers'}, + {'1': 'has_password', '3': 11, '4': 1, '5': 8, '10': 'hasPassword'}, + {'1': 'social_links', '3': 12, '4': 3, '5': 9, '10': 'socialLinks'}, + ], +}; + +/// Descriptor for `RoomListItem`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List roomListItemDescriptor = $convert.base64Decode( + 'CgxSb29tTGlzdEl0ZW0SGwoJcm9vbV91dWlkGAEgASgJUghyb29tVXVpZBIiCg1vd25lcl9nYW' + '1lX2lkGAIgASgJUgtvd25lckdhbWVJZBIqChFvd25lcl9oYW5kbGVfbmFtZRgDIAEoCVIPb3du' + 'ZXJIYW5kbGVOYW1lEiEKDG93bmVyX2F2YXRhchgEIAEoCVILb3duZXJBdmF0YXISHgoLbWFpbl' + '90YWdfaWQYBSABKAlSCW1haW5UYWdJZBIcCgpzdWJfdGFnX2lkGAYgASgJUghzdWJUYWdJZBId' + 'CgpjcmVhdGVkX2F0GAcgASgDUgljcmVhdGVkQXQSKgoRb3duZXJfbGFzdF9hY3RpdmUYCCABKA' + 'NSD293bmVyTGFzdEFjdGl2ZRInCg9jdXJyZW50X21lbWJlcnMYCSABKAVSDmN1cnJlbnRNZW1i' + 'ZXJzEiUKDnRhcmdldF9tZW1iZXJzGAogASgFUg10YXJnZXRNZW1iZXJzEiEKDGhhc19wYXNzd2' + '9yZBgLIAEoCFILaGFzUGFzc3dvcmQSIQoMc29jaWFsX2xpbmtzGAwgAygJUgtzb2NpYWxMaW5r' + 'cw=='); + +@$core.Deprecated('Use getRoomListRequestDescriptor instead') +const GetRoomListRequest$json = { + '1': 'GetRoomListRequest', + '2': [ + {'1': 'main_tag_id', '3': 1, '4': 1, '5': 9, '10': 'mainTagId'}, + {'1': 'sub_tag_id', '3': 2, '4': 1, '5': 9, '10': 'subTagId'}, + {'1': 'search_owner_name', '3': 3, '4': 1, '5': 9, '10': 'searchOwnerName'}, + {'1': 'page', '3': 4, '4': 1, '5': 5, '10': 'page'}, + {'1': 'page_size', '3': 5, '4': 1, '5': 5, '10': 'pageSize'}, + ], +}; + +/// Descriptor for `GetRoomListRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getRoomListRequestDescriptor = $convert.base64Decode( + 'ChJHZXRSb29tTGlzdFJlcXVlc3QSHgoLbWFpbl90YWdfaWQYASABKAlSCW1haW5UYWdJZBIcCg' + 'pzdWJfdGFnX2lkGAIgASgJUghzdWJUYWdJZBIqChFzZWFyY2hfb3duZXJfbmFtZRgDIAEoCVIP' + 'c2VhcmNoT3duZXJOYW1lEhIKBHBhZ2UYBCABKAVSBHBhZ2USGwoJcGFnZV9zaXplGAUgASgFUg' + 'hwYWdlU2l6ZQ=='); + +@$core.Deprecated('Use getRoomListResponseDescriptor instead') +const GetRoomListResponse$json = { + '1': 'GetRoomListResponse', + '2': [ + { + '1': 'rooms', + '3': 1, + '4': 3, + '5': 11, + '6': '.partroom.RoomListItem', + '10': 'rooms' + }, + {'1': 'total', '3': 2, '4': 1, '5': 5, '10': 'total'}, + {'1': 'page', '3': 3, '4': 1, '5': 5, '10': 'page'}, + {'1': 'page_size', '3': 4, '4': 1, '5': 5, '10': 'pageSize'}, + ], +}; + +/// Descriptor for `GetRoomListResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getRoomListResponseDescriptor = $convert.base64Decode( + 'ChNHZXRSb29tTGlzdFJlc3BvbnNlEiwKBXJvb21zGAEgAygLMhYucGFydHJvb20uUm9vbUxpc3' + 'RJdGVtUgVyb29tcxIUCgV0b3RhbBgCIAEoBVIFdG90YWwSEgoEcGFnZRgDIAEoBVIEcGFnZRIb' + 'CglwYWdlX3NpemUYBCABKAVSCHBhZ2VTaXpl'); + +@$core.Deprecated('Use createRoomRequestDescriptor instead') +const CreateRoomRequest$json = { + '1': 'CreateRoomRequest', + '2': [ + {'1': 'main_tag_id', '3': 1, '4': 1, '5': 9, '10': 'mainTagId'}, + {'1': 'sub_tag_id', '3': 2, '4': 1, '5': 9, '10': 'subTagId'}, + {'1': 'target_members', '3': 3, '4': 1, '5': 5, '10': 'targetMembers'}, + {'1': 'has_password', '3': 4, '4': 1, '5': 8, '10': 'hasPassword'}, + {'1': 'password', '3': 5, '4': 1, '5': 9, '10': 'password'}, + {'1': 'social_links', '3': 6, '4': 3, '5': 9, '10': 'socialLinks'}, + ], +}; + +/// Descriptor for `CreateRoomRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List createRoomRequestDescriptor = $convert.base64Decode( + 'ChFDcmVhdGVSb29tUmVxdWVzdBIeCgttYWluX3RhZ19pZBgBIAEoCVIJbWFpblRhZ0lkEhwKCn' + 'N1Yl90YWdfaWQYAiABKAlSCHN1YlRhZ0lkEiUKDnRhcmdldF9tZW1iZXJzGAMgASgFUg10YXJn' + 'ZXRNZW1iZXJzEiEKDGhhc19wYXNzd29yZBgEIAEoCFILaGFzUGFzc3dvcmQSGgoIcGFzc3dvcm' + 'QYBSABKAlSCHBhc3N3b3JkEiEKDHNvY2lhbF9saW5rcxgGIAMoCVILc29jaWFsTGlua3M='); + +@$core.Deprecated('Use createRoomResponseDescriptor instead') +const CreateRoomResponse$json = { + '1': 'CreateRoomResponse', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + ], +}; + +/// Descriptor for `CreateRoomResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List createRoomResponseDescriptor = + $convert.base64Decode( + 'ChJDcmVhdGVSb29tUmVzcG9uc2USGwoJcm9vbV91dWlkGAEgASgJUghyb29tVXVpZA=='); + +@$core.Deprecated('Use joinRoomRequestDescriptor instead') +const JoinRoomRequest$json = { + '1': 'JoinRoomRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + {'1': 'password', '3': 2, '4': 1, '5': 9, '10': 'password'}, + ], +}; + +/// Descriptor for `JoinRoomRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List joinRoomRequestDescriptor = $convert.base64Decode( + 'Cg9Kb2luUm9vbVJlcXVlc3QSGwoJcm9vbV91dWlkGAEgASgJUghyb29tVXVpZBIaCghwYXNzd2' + '9yZBgCIAEoCVIIcGFzc3dvcmQ='); + +@$core.Deprecated('Use joinRoomResponseDescriptor instead') +const JoinRoomResponse$json = { + '1': 'JoinRoomResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `JoinRoomResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List joinRoomResponseDescriptor = $convert.base64Decode( + 'ChBKb2luUm9vbVJlc3BvbnNlEhgKB3N1Y2Nlc3MYASABKAhSB3N1Y2Nlc3M='); + +@$core.Deprecated('Use leaveRoomRequestDescriptor instead') +const LeaveRoomRequest$json = { + '1': 'LeaveRoomRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + ], +}; + +/// Descriptor for `LeaveRoomRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List leaveRoomRequestDescriptor = $convert.base64Decode( + 'ChBMZWF2ZVJvb21SZXF1ZXN0EhsKCXJvb21fdXVpZBgBIAEoCVIIcm9vbVV1aWQ='); + +@$core.Deprecated('Use leaveRoomResponseDescriptor instead') +const LeaveRoomResponse$json = { + '1': 'LeaveRoomResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `LeaveRoomResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List leaveRoomResponseDescriptor = $convert.base64Decode( + 'ChFMZWF2ZVJvb21SZXNwb25zZRIYCgdzdWNjZXNzGAEgASgIUgdzdWNjZXNz'); + +@$core.Deprecated('Use dismissRoomRequestDescriptor instead') +const DismissRoomRequest$json = { + '1': 'DismissRoomRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + ], +}; + +/// Descriptor for `DismissRoomRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List dismissRoomRequestDescriptor = + $convert.base64Decode( + 'ChJEaXNtaXNzUm9vbVJlcXVlc3QSGwoJcm9vbV91dWlkGAEgASgJUghyb29tVXVpZA=='); + +@$core.Deprecated('Use dismissRoomResponseDescriptor instead') +const DismissRoomResponse$json = { + '1': 'DismissRoomResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `DismissRoomResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List dismissRoomResponseDescriptor = + $convert.base64Decode( + 'ChNEaXNtaXNzUm9vbVJlc3BvbnNlEhgKB3N1Y2Nlc3MYASABKAhSB3N1Y2Nlc3M='); + +@$core.Deprecated('Use memberStatusDescriptor instead') +const MemberStatus$json = { + '1': 'MemberStatus', + '2': [ + {'1': 'current_location', '3': 1, '4': 1, '5': 9, '10': 'currentLocation'}, + {'1': 'kills', '3': 2, '4': 1, '5': 5, '10': 'kills'}, + {'1': 'deaths', '3': 3, '4': 1, '5': 5, '10': 'deaths'}, + {'1': 'play_time', '3': 4, '4': 1, '5': 3, '10': 'playTime'}, + ], +}; + +/// Descriptor for `MemberStatus`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List memberStatusDescriptor = $convert.base64Decode( + 'CgxNZW1iZXJTdGF0dXMSKQoQY3VycmVudF9sb2NhdGlvbhgBIAEoCVIPY3VycmVudExvY2F0aW' + '9uEhQKBWtpbGxzGAIgASgFUgVraWxscxIWCgZkZWF0aHMYAyABKAVSBmRlYXRocxIbCglwbGF5' + 'X3RpbWUYBCABKANSCHBsYXlUaW1l'); + +@$core.Deprecated('Use roomMemberDescriptor instead') +const RoomMember$json = { + '1': 'RoomMember', + '2': [ + {'1': 'game_user_id', '3': 1, '4': 1, '5': 9, '10': 'gameUserId'}, + {'1': 'handle_name', '3': 2, '4': 1, '5': 9, '10': 'handleName'}, + {'1': 'avatar_url', '3': 3, '4': 1, '5': 9, '10': 'avatarUrl'}, + {'1': 'joined_at', '3': 4, '4': 1, '5': 3, '10': 'joinedAt'}, + {'1': 'last_active', '3': 5, '4': 1, '5': 3, '10': 'lastActive'}, + {'1': 'is_owner', '3': 6, '4': 1, '5': 8, '10': 'isOwner'}, + { + '1': 'status', + '3': 7, + '4': 1, + '5': 11, + '6': '.partroom.MemberStatus', + '10': 'status' + }, + ], +}; + +/// Descriptor for `RoomMember`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List roomMemberDescriptor = $convert.base64Decode( + 'CgpSb29tTWVtYmVyEiAKDGdhbWVfdXNlcl9pZBgBIAEoCVIKZ2FtZVVzZXJJZBIfCgtoYW5kbG' + 'VfbmFtZRgCIAEoCVIKaGFuZGxlTmFtZRIdCgphdmF0YXJfdXJsGAMgASgJUglhdmF0YXJVcmwS' + 'GwoJam9pbmVkX2F0GAQgASgDUghqb2luZWRBdBIfCgtsYXN0X2FjdGl2ZRgFIAEoA1IKbGFzdE' + 'FjdGl2ZRIZCghpc19vd25lchgGIAEoCFIHaXNPd25lchIuCgZzdGF0dXMYByABKAsyFi5wYXJ0' + 'cm9vbS5NZW1iZXJTdGF0dXNSBnN0YXR1cw=='); + +@$core.Deprecated('Use roomInfoDescriptor instead') +const RoomInfo$json = { + '1': 'RoomInfo', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + {'1': 'owner_game_id', '3': 2, '4': 1, '5': 9, '10': 'ownerGameId'}, + {'1': 'main_tag_id', '3': 3, '4': 1, '5': 9, '10': 'mainTagId'}, + {'1': 'sub_tag_id', '3': 4, '4': 1, '5': 9, '10': 'subTagId'}, + {'1': 'target_members', '3': 5, '4': 1, '5': 5, '10': 'targetMembers'}, + {'1': 'has_password', '3': 6, '4': 1, '5': 8, '10': 'hasPassword'}, + {'1': 'created_at', '3': 7, '4': 1, '5': 3, '10': 'createdAt'}, + {'1': 'current_members', '3': 8, '4': 1, '5': 5, '10': 'currentMembers'}, + {'1': 'social_links', '3': 9, '4': 3, '5': 9, '10': 'socialLinks'}, + ], +}; + +/// Descriptor for `RoomInfo`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List roomInfoDescriptor = $convert.base64Decode( + 'CghSb29tSW5mbxIbCglyb29tX3V1aWQYASABKAlSCHJvb21VdWlkEiIKDW93bmVyX2dhbWVfaW' + 'QYAiABKAlSC293bmVyR2FtZUlkEh4KC21haW5fdGFnX2lkGAMgASgJUgltYWluVGFnSWQSHAoK' + 'c3ViX3RhZ19pZBgEIAEoCVIIc3ViVGFnSWQSJQoOdGFyZ2V0X21lbWJlcnMYBSABKAVSDXRhcm' + 'dldE1lbWJlcnMSIQoMaGFzX3Bhc3N3b3JkGAYgASgIUgtoYXNQYXNzd29yZBIdCgpjcmVhdGVk' + 'X2F0GAcgASgDUgljcmVhdGVkQXQSJwoPY3VycmVudF9tZW1iZXJzGAggASgFUg5jdXJyZW50TW' + 'VtYmVycxIhCgxzb2NpYWxfbGlua3MYCSADKAlSC3NvY2lhbExpbmtz'); + +@$core.Deprecated('Use getRoomInfoRequestDescriptor instead') +const GetRoomInfoRequest$json = { + '1': 'GetRoomInfoRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + ], +}; + +/// Descriptor for `GetRoomInfoRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getRoomInfoRequestDescriptor = + $convert.base64Decode( + 'ChJHZXRSb29tSW5mb1JlcXVlc3QSGwoJcm9vbV91dWlkGAEgASgJUghyb29tVXVpZA=='); + +@$core.Deprecated('Use getRoomInfoResponseDescriptor instead') +const GetRoomInfoResponse$json = { + '1': 'GetRoomInfoResponse', + '2': [ + { + '1': 'room', + '3': 1, + '4': 1, + '5': 11, + '6': '.partroom.RoomInfo', + '10': 'room' + }, + ], +}; + +/// Descriptor for `GetRoomInfoResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getRoomInfoResponseDescriptor = $convert.base64Decode( + 'ChNHZXRSb29tSW5mb1Jlc3BvbnNlEiYKBHJvb20YASABKAsyEi5wYXJ0cm9vbS5Sb29tSW5mb1' + 'IEcm9vbQ=='); + +@$core.Deprecated('Use getRoomMembersRequestDescriptor instead') +const GetRoomMembersRequest$json = { + '1': 'GetRoomMembersRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + {'1': 'page', '3': 2, '4': 1, '5': 5, '10': 'page'}, + {'1': 'page_size', '3': 3, '4': 1, '5': 5, '10': 'pageSize'}, + ], +}; + +/// Descriptor for `GetRoomMembersRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getRoomMembersRequestDescriptor = $convert.base64Decode( + 'ChVHZXRSb29tTWVtYmVyc1JlcXVlc3QSGwoJcm9vbV91dWlkGAEgASgJUghyb29tVXVpZBISCg' + 'RwYWdlGAIgASgFUgRwYWdlEhsKCXBhZ2Vfc2l6ZRgDIAEoBVIIcGFnZVNpemU='); + +@$core.Deprecated('Use getRoomMembersResponseDescriptor instead') +const GetRoomMembersResponse$json = { + '1': 'GetRoomMembersResponse', + '2': [ + { + '1': 'members', + '3': 1, + '4': 3, + '5': 11, + '6': '.partroom.RoomMember', + '10': 'members' + }, + {'1': 'total', '3': 2, '4': 1, '5': 5, '10': 'total'}, + ], +}; + +/// Descriptor for `GetRoomMembersResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getRoomMembersResponseDescriptor = + $convert.base64Decode( + 'ChZHZXRSb29tTWVtYmVyc1Jlc3BvbnNlEi4KB21lbWJlcnMYASADKAsyFC5wYXJ0cm9vbS5Sb2' + '9tTWVtYmVyUgdtZW1iZXJzEhQKBXRvdGFsGAIgASgFUgV0b3RhbA=='); + +@$core.Deprecated('Use heartbeatRequestDescriptor instead') +const HeartbeatRequest$json = { + '1': 'HeartbeatRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + ], +}; + +/// Descriptor for `HeartbeatRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List heartbeatRequestDescriptor = $convert.base64Decode( + 'ChBIZWFydGJlYXRSZXF1ZXN0EhsKCXJvb21fdXVpZBgBIAEoCVIIcm9vbVV1aWQ='); + +@$core.Deprecated('Use heartbeatResponseDescriptor instead') +const HeartbeatResponse$json = { + '1': 'HeartbeatResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `HeartbeatResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List heartbeatResponseDescriptor = $convert.base64Decode( + 'ChFIZWFydGJlYXRSZXNwb25zZRIYCgdzdWNjZXNzGAEgASgIUgdzdWNjZXNz'); + +@$core.Deprecated('Use getMyRoomRequestDescriptor instead') +const GetMyRoomRequest$json = { + '1': 'GetMyRoomRequest', +}; + +/// Descriptor for `GetMyRoomRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getMyRoomRequestDescriptor = + $convert.base64Decode('ChBHZXRNeVJvb21SZXF1ZXN0'); + +@$core.Deprecated('Use getMyRoomResponseDescriptor instead') +const GetMyRoomResponse$json = { + '1': 'GetMyRoomResponse', + '2': [ + { + '1': 'room', + '3': 1, + '4': 1, + '5': 11, + '6': '.partroom.RoomInfo', + '10': 'room' + }, + {'1': 'has_room', '3': 2, '4': 1, '5': 8, '10': 'hasRoom'}, + ], +}; + +/// Descriptor for `GetMyRoomResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getMyRoomResponseDescriptor = $convert.base64Decode( + 'ChFHZXRNeVJvb21SZXNwb25zZRImCgRyb29tGAEgASgLMhIucGFydHJvb20uUm9vbUluZm9SBH' + 'Jvb20SGQoIaGFzX3Jvb20YAiABKAhSB2hhc1Jvb20='); + +@$core.Deprecated('Use updateRoomRequestDescriptor instead') +const UpdateRoomRequest$json = { + '1': 'UpdateRoomRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + {'1': 'target_members', '3': 2, '4': 1, '5': 5, '10': 'targetMembers'}, + {'1': 'password', '3': 3, '4': 1, '5': 9, '10': 'password'}, + {'1': 'main_tag_id', '3': 4, '4': 1, '5': 9, '10': 'mainTagId'}, + {'1': 'sub_tag_id', '3': 5, '4': 1, '5': 9, '10': 'subTagId'}, + {'1': 'social_links', '3': 6, '4': 3, '5': 9, '10': 'socialLinks'}, + ], +}; + +/// Descriptor for `UpdateRoomRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List updateRoomRequestDescriptor = $convert.base64Decode( + 'ChFVcGRhdGVSb29tUmVxdWVzdBIbCglyb29tX3V1aWQYASABKAlSCHJvb21VdWlkEiUKDnRhcm' + 'dldF9tZW1iZXJzGAIgASgFUg10YXJnZXRNZW1iZXJzEhoKCHBhc3N3b3JkGAMgASgJUghwYXNz' + 'd29yZBIeCgttYWluX3RhZ19pZBgEIAEoCVIJbWFpblRhZ0lkEhwKCnN1Yl90YWdfaWQYBSABKA' + 'lSCHN1YlRhZ0lkEiEKDHNvY2lhbF9saW5rcxgGIAMoCVILc29jaWFsTGlua3M='); + +@$core.Deprecated('Use updateRoomResponseDescriptor instead') +const UpdateRoomResponse$json = { + '1': 'UpdateRoomResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `UpdateRoomResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List updateRoomResponseDescriptor = + $convert.base64Decode( + 'ChJVcGRhdGVSb29tUmVzcG9uc2USGAoHc3VjY2VzcxgBIAEoCFIHc3VjY2Vzcw=='); + +@$core.Deprecated('Use kickMemberRequestDescriptor instead') +const KickMemberRequest$json = { + '1': 'KickMemberRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + { + '1': 'target_game_user_id', + '3': 2, + '4': 1, + '5': 9, + '10': 'targetGameUserId' + }, + ], +}; + +/// Descriptor for `KickMemberRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List kickMemberRequestDescriptor = $convert.base64Decode( + 'ChFLaWNrTWVtYmVyUmVxdWVzdBIbCglyb29tX3V1aWQYASABKAlSCHJvb21VdWlkEi0KE3Rhcm' + 'dldF9nYW1lX3VzZXJfaWQYAiABKAlSEHRhcmdldEdhbWVVc2VySWQ='); + +@$core.Deprecated('Use kickMemberResponseDescriptor instead') +const KickMemberResponse$json = { + '1': 'KickMemberResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `KickMemberResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List kickMemberResponseDescriptor = + $convert.base64Decode( + 'ChJLaWNrTWVtYmVyUmVzcG9uc2USGAoHc3VjY2VzcxgBIAEoCFIHc3VjY2Vzcw=='); + +@$core.Deprecated('Use setStatusRequestDescriptor instead') +const SetStatusRequest$json = { + '1': 'SetStatusRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + { + '1': 'status', + '3': 2, + '4': 1, + '5': 11, + '6': '.partroom.MemberStatus', + '10': 'status' + }, + ], +}; + +/// Descriptor for `SetStatusRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List setStatusRequestDescriptor = $convert.base64Decode( + 'ChBTZXRTdGF0dXNSZXF1ZXN0EhsKCXJvb21fdXVpZBgBIAEoCVIIcm9vbVV1aWQSLgoGc3RhdH' + 'VzGAIgASgLMhYucGFydHJvb20uTWVtYmVyU3RhdHVzUgZzdGF0dXM='); + +@$core.Deprecated('Use setStatusResponseDescriptor instead') +const SetStatusResponse$json = { + '1': 'SetStatusResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `SetStatusResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List setStatusResponseDescriptor = $convert.base64Decode( + 'ChFTZXRTdGF0dXNSZXNwb25zZRIYCgdzdWNjZXNzGAEgASgIUgdzdWNjZXNz'); + +@$core.Deprecated('Use sendSignalRequestDescriptor instead') +const SendSignalRequest$json = { + '1': 'SendSignalRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + {'1': 'signal_id', '3': 2, '4': 1, '5': 9, '10': 'signalId'}, + { + '1': 'params', + '3': 3, + '4': 3, + '5': 11, + '6': '.partroom.SendSignalRequest.ParamsEntry', + '10': 'params' + }, + ], + '3': [SendSignalRequest_ParamsEntry$json], +}; + +@$core.Deprecated('Use sendSignalRequestDescriptor instead') +const SendSignalRequest_ParamsEntry$json = { + '1': 'ParamsEntry', + '2': [ + {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'}, + {'1': 'value', '3': 2, '4': 1, '5': 9, '10': 'value'}, + ], + '7': {'7': true}, +}; + +/// Descriptor for `SendSignalRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List sendSignalRequestDescriptor = $convert.base64Decode( + 'ChFTZW5kU2lnbmFsUmVxdWVzdBIbCglyb29tX3V1aWQYASABKAlSCHJvb21VdWlkEhsKCXNpZ2' + '5hbF9pZBgCIAEoCVIIc2lnbmFsSWQSPwoGcGFyYW1zGAMgAygLMicucGFydHJvb20uU2VuZFNp' + 'Z25hbFJlcXVlc3QuUGFyYW1zRW50cnlSBnBhcmFtcxo5CgtQYXJhbXNFbnRyeRIQCgNrZXkYAS' + 'ABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgB'); + +@$core.Deprecated('Use sendSignalResponseDescriptor instead') +const SendSignalResponse$json = { + '1': 'SendSignalResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `SendSignalResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List sendSignalResponseDescriptor = + $convert.base64Decode( + 'ChJTZW5kU2lnbmFsUmVzcG9uc2USGAoHc3VjY2VzcxgBIAEoCFIHc3VjY2Vzcw=='); + +@$core.Deprecated('Use roomEventDescriptor instead') +const RoomEvent$json = { + '1': 'RoomEvent', + '2': [ + { + '1': 'type', + '3': 1, + '4': 1, + '5': 14, + '6': '.partroom.RoomEventType', + '10': 'type' + }, + {'1': 'room_uuid', '3': 2, '4': 1, '5': 9, '10': 'roomUuid'}, + {'1': 'timestamp', '3': 3, '4': 1, '5': 3, '10': 'timestamp'}, + { + '1': 'member', + '3': 4, + '4': 1, + '5': 11, + '6': '.partroom.RoomMember', + '10': 'member' + }, + {'1': 'signal_id', '3': 5, '4': 1, '5': 9, '10': 'signalId'}, + {'1': 'signal_sender', '3': 6, '4': 1, '5': 9, '10': 'signalSender'}, + { + '1': 'signal_params', + '3': 7, + '4': 3, + '5': 11, + '6': '.partroom.RoomEvent.SignalParamsEntry', + '10': 'signalParams' + }, + { + '1': 'room_info', + '3': 8, + '4': 1, + '5': 11, + '6': '.partroom.RoomInfo', + '10': 'roomInfo' + }, + ], + '3': [RoomEvent_SignalParamsEntry$json], +}; + +@$core.Deprecated('Use roomEventDescriptor instead') +const RoomEvent_SignalParamsEntry$json = { + '1': 'SignalParamsEntry', + '2': [ + {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'}, + {'1': 'value', '3': 2, '4': 1, '5': 9, '10': 'value'}, + ], + '7': {'7': true}, +}; + +/// Descriptor for `RoomEvent`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List roomEventDescriptor = $convert.base64Decode( + 'CglSb29tRXZlbnQSKwoEdHlwZRgBIAEoDjIXLnBhcnRyb29tLlJvb21FdmVudFR5cGVSBHR5cG' + 'USGwoJcm9vbV91dWlkGAIgASgJUghyb29tVXVpZBIcCgl0aW1lc3RhbXAYAyABKANSCXRpbWVz' + 'dGFtcBIsCgZtZW1iZXIYBCABKAsyFC5wYXJ0cm9vbS5Sb29tTWVtYmVyUgZtZW1iZXISGwoJc2' + 'lnbmFsX2lkGAUgASgJUghzaWduYWxJZBIjCg1zaWduYWxfc2VuZGVyGAYgASgJUgxzaWduYWxT' + 'ZW5kZXISSgoNc2lnbmFsX3BhcmFtcxgHIAMoCzIlLnBhcnRyb29tLlJvb21FdmVudC5TaWduYW' + 'xQYXJhbXNFbnRyeVIMc2lnbmFsUGFyYW1zEi8KCXJvb21faW5mbxgIIAEoCzISLnBhcnRyb29t' + 'LlJvb21JbmZvUghyb29tSW5mbxo/ChFTaWduYWxQYXJhbXNFbnRyeRIQCgNrZXkYASABKAlSA2' + 'tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgB'); + +@$core.Deprecated('Use listenRoomEventsRequestDescriptor instead') +const ListenRoomEventsRequest$json = { + '1': 'ListenRoomEventsRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + ], +}; + +/// Descriptor for `ListenRoomEventsRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List listenRoomEventsRequestDescriptor = + $convert.base64Decode( + 'ChdMaXN0ZW5Sb29tRXZlbnRzUmVxdWVzdBIbCglyb29tX3V1aWQYASABKAlSCHJvb21VdWlk'); + +@$core.Deprecated('Use transferOwnershipRequestDescriptor instead') +const TransferOwnershipRequest$json = { + '1': 'TransferOwnershipRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + { + '1': 'target_game_user_id', + '3': 2, + '4': 1, + '5': 9, + '10': 'targetGameUserId' + }, + ], +}; + +/// Descriptor for `TransferOwnershipRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List transferOwnershipRequestDescriptor = + $convert.base64Decode( + 'ChhUcmFuc2Zlck93bmVyc2hpcFJlcXVlc3QSGwoJcm9vbV91dWlkGAEgASgJUghyb29tVXVpZB' + 'ItChN0YXJnZXRfZ2FtZV91c2VyX2lkGAIgASgJUhB0YXJnZXRHYW1lVXNlcklk'); + +@$core.Deprecated('Use transferOwnershipResponseDescriptor instead') +const TransferOwnershipResponse$json = { + '1': 'TransferOwnershipResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `TransferOwnershipResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List transferOwnershipResponseDescriptor = + $convert.base64Decode( + 'ChlUcmFuc2Zlck93bmVyc2hpcFJlc3BvbnNlEhgKB3N1Y2Nlc3MYASABKAhSB3N1Y2Nlc3M='); + +@$core.Deprecated('Use kickedMemberDescriptor instead') +const KickedMember$json = { + '1': 'KickedMember', + '2': [ + {'1': 'game_user_id', '3': 1, '4': 1, '5': 9, '10': 'gameUserId'}, + {'1': 'handle_name', '3': 2, '4': 1, '5': 9, '10': 'handleName'}, + {'1': 'avatar_url', '3': 3, '4': 1, '5': 9, '10': 'avatarUrl'}, + {'1': 'joined_at', '3': 4, '4': 1, '5': 3, '10': 'joinedAt'}, + {'1': 'kicked_at', '3': 5, '4': 1, '5': 3, '10': 'kickedAt'}, + ], +}; + +/// Descriptor for `KickedMember`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List kickedMemberDescriptor = $convert.base64Decode( + 'CgxLaWNrZWRNZW1iZXISIAoMZ2FtZV91c2VyX2lkGAEgASgJUgpnYW1lVXNlcklkEh8KC2hhbm' + 'RsZV9uYW1lGAIgASgJUgpoYW5kbGVOYW1lEh0KCmF2YXRhcl91cmwYAyABKAlSCWF2YXRhclVy' + 'bBIbCglqb2luZWRfYXQYBCABKANSCGpvaW5lZEF0EhsKCWtpY2tlZF9hdBgFIAEoA1IIa2lja2' + 'VkQXQ='); + +@$core.Deprecated('Use getKickedMembersRequestDescriptor instead') +const GetKickedMembersRequest$json = { + '1': 'GetKickedMembersRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + {'1': 'page', '3': 2, '4': 1, '5': 5, '10': 'page'}, + {'1': 'page_size', '3': 3, '4': 1, '5': 5, '10': 'pageSize'}, + ], +}; + +/// Descriptor for `GetKickedMembersRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getKickedMembersRequestDescriptor = + $convert.base64Decode( + 'ChdHZXRLaWNrZWRNZW1iZXJzUmVxdWVzdBIbCglyb29tX3V1aWQYASABKAlSCHJvb21VdWlkEh' + 'IKBHBhZ2UYAiABKAVSBHBhZ2USGwoJcGFnZV9zaXplGAMgASgFUghwYWdlU2l6ZQ=='); + +@$core.Deprecated('Use getKickedMembersResponseDescriptor instead') +const GetKickedMembersResponse$json = { + '1': 'GetKickedMembersResponse', + '2': [ + { + '1': 'members', + '3': 1, + '4': 3, + '5': 11, + '6': '.partroom.KickedMember', + '10': 'members' + }, + {'1': 'total', '3': 2, '4': 1, '5': 5, '10': 'total'}, + ], +}; + +/// Descriptor for `GetKickedMembersResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getKickedMembersResponseDescriptor = + $convert.base64Decode( + 'ChhHZXRLaWNrZWRNZW1iZXJzUmVzcG9uc2USMAoHbWVtYmVycxgBIAMoCzIWLnBhcnRyb29tLk' + 'tpY2tlZE1lbWJlclIHbWVtYmVycxIUCgV0b3RhbBgCIAEoBVIFdG90YWw='); + +@$core.Deprecated('Use removeKickedMemberRequestDescriptor instead') +const RemoveKickedMemberRequest$json = { + '1': 'RemoveKickedMemberRequest', + '2': [ + {'1': 'room_uuid', '3': 1, '4': 1, '5': 9, '10': 'roomUuid'}, + {'1': 'game_user_id', '3': 2, '4': 1, '5': 9, '10': 'gameUserId'}, + ], +}; + +/// Descriptor for `RemoveKickedMemberRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List removeKickedMemberRequestDescriptor = + $convert.base64Decode( + 'ChlSZW1vdmVLaWNrZWRNZW1iZXJSZXF1ZXN0EhsKCXJvb21fdXVpZBgBIAEoCVIIcm9vbVV1aW' + 'QSIAoMZ2FtZV91c2VyX2lkGAIgASgJUgpnYW1lVXNlcklk'); + +@$core.Deprecated('Use removeKickedMemberResponseDescriptor instead') +const RemoveKickedMemberResponse$json = { + '1': 'RemoveKickedMemberResponse', + '2': [ + {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + ], +}; + +/// Descriptor for `RemoveKickedMemberResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List removeKickedMemberResponseDescriptor = + $convert.base64Decode( + 'ChpSZW1vdmVLaWNrZWRNZW1iZXJSZXNwb25zZRIYCgdzdWNjZXNzGAEgASgIUgdzdWNjZXNz'); diff --git a/lib/provider/party_room.dart b/lib/provider/party_room.dart new file mode 100644 index 0000000..f58c277 --- /dev/null +++ b/lib/provider/party_room.dart @@ -0,0 +1,889 @@ +import 'dart:async'; +import 'package:fixnum/fixnum.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:grpc/grpc.dart'; +import 'package:hive_ce/hive.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:starcitizen_doctor/common/conf/url_conf.dart'; +import 'package:starcitizen_doctor/common/utils/provider.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; +import 'package:starcitizen_doctor/generated/proto/auth/auth.pbgrpc.dart' as auth; +import 'package:starcitizen_doctor/generated/proto/partroom/partroom.pbgrpc.dart' as partroom; +import 'package:starcitizen_doctor/generated/proto/common/common.pbgrpc.dart' as common; + +part 'party_room.freezed.dart'; + +part 'party_room.g.dart'; + +/// PartyRoom 认证状态 +@freezed +sealed class PartyRoomAuthState with _$PartyRoomAuthState { + const factory PartyRoomAuthState({ + @Default('') String uuid, + @Default('') String secretKey, + @Default(false) bool isLoggedIn, + auth.GameUserInfo? userInfo, + DateTime? lastLoginTime, + }) = _PartyRoomAuthState; +} + +/// PartyRoom 房间状态 +@freezed +sealed class PartyRoomState with _$PartyRoomState { + const factory PartyRoomState({ + partroom.RoomInfo? currentRoom, + @Default([]) List members, + @Default([]) List tags, + @Default([]) List signalTypes, + @Default(false) bool isInRoom, + @Default(false) bool isOwner, + String? roomUuid, + @Default([]) List recentEvents, + }) = _PartyRoomState; +} + +/// PartyRoom gRPC 客户端状态 +@freezed +sealed class PartyRoomClientState with _$PartyRoomClientState { + const factory PartyRoomClientState({ + ClientChannel? channel, + auth.AuthServiceClient? authClient, + partroom.PartRoomServiceClient? roomClient, + common.CommonServiceClient? commonClient, + @Default(false) bool isConnected, + @Default('') String serverAddress, + @Default(0) int serverPort, + }) = _PartyRoomClientState; +} + +/// PartyRoom 完整状态 +@freezed +sealed class PartyRoomFullState with _$PartyRoomFullState { + const factory PartyRoomFullState({ + required PartyRoomAuthState auth, + required PartyRoomState room, + required PartyRoomClientState client, + }) = _PartyRoomFullState; +} + +/// PartyRoom Provider +@riverpod +class PartyRoom extends _$PartyRoom { + static const String _boxName = 'party_room_conf'; + static const String _secretKeyKey = 'party_room_secret_key'; + + Box? _confBox; + StreamSubscription? _eventStreamSubscription; + Timer? _heartbeatTimer; + bool _disposed = false; + + @override + PartyRoomFullState build() { + ref.onDispose(() { + _disposed = true; + _cleanup(); + }); + + state = const PartyRoomFullState( + auth: PartyRoomAuthState(), + room: PartyRoomState(), + client: PartyRoomClientState(), + ); + + // 初始化 + _initialize(); + + ref.keepAlive(); + return state; + } + + /// 初始化 + Future _initialize() async { + try { + _confBox = await Hive.openBox(_boxName); + + // 加载保存的认证信息 + final uuid = appGlobalState.deviceUUID; + if (uuid?.isEmpty ?? true) { + throw Exception('Device UUID is not available'); + } + final secretKey = _confBox?.get(_secretKeyKey, defaultValue: ''); + state = state.copyWith( + auth: state.auth.copyWith(uuid: uuid!, secretKey: secretKey), + ); + + dPrint('[PartyRoom] Initialized with UUID: ${state.auth.uuid}'); + } catch (e) { + dPrint('[PartyRoom] Initialize error: $e'); + } + } + + /// 连接到服务器 + Future connect() async { + try { + // 关闭现有连接 + await disconnect(); + + final serverAddress = URLConf.partyRoomServerAddress; + final serverPort = URLConf.partyRoomServerPort; + + final channel = ClientChannel( + serverAddress, + port: serverPort, + options: const ChannelOptions(credentials: ChannelCredentials.insecure()), + ); + + final authClient = auth.AuthServiceClient(channel); + final roomClient = partroom.PartRoomServiceClient(channel); + final commonClient = common.CommonServiceClient(channel); + + // 测试连接 + await authClient.status(auth.StatusRequest()); + + state = state.copyWith( + client: state.client.copyWith( + channel: channel, + authClient: authClient, + roomClient: roomClient, + commonClient: commonClient, + isConnected: true, + serverAddress: serverAddress, + serverPort: serverPort, + ), + ); + + dPrint('[PartyRoom] Connected to $serverAddress:$serverPort'); + } catch (e) { + dPrint('[PartyRoom] Connect error: $e'); + rethrow; + } + } + + /// 断开连接 + Future disconnect() async { + await _stopHeartbeat(); + await _stopEventStream(); + + await state.client.channel?.shutdown(); + + state = state.copyWith(client: const PartyRoomClientState()); + + dPrint('[PartyRoom] Disconnected'); + } + + /// 获取认证 CallOptions + CallOptions _getAuthCallOptions() { + return CallOptions(metadata: {'uuid': state.auth.uuid, 'secret-key': state.auth.secretKey}); + } + + // ========== 认证相关方法 ========== + + /// 登录 + Future login() async { + try { + final client = state.client.authClient; + if (client == null) throw Exception('Not connected to server'); + + final response = await client.login(auth.LoginRequest(), options: _getAuthCallOptions()); + + state = state.copyWith( + auth: state.auth.copyWith( + isLoggedIn: true, + userInfo: response.userInfo, + lastLoginTime: DateTime.fromMillisecondsSinceEpoch(response.lastLoginTime.toInt()), + ), + ); + + dPrint('[PartyRoom] Logged in as ${response.userInfo.gameUserId}'); + + // 登录后检查是否有房间 + await _checkMyRoom(); + } catch (e) { + dPrint('[PartyRoom] Login error: $e'); + rethrow; + } + } + + /// 预注册 + Future preRegister(String gameUserId) async { + try { + final client = state.client.authClient; + if (client == null) throw Exception('Not connected to server'); + + final response = await client.preRegister(auth.PreRegisterRequest(uuid: state.auth.uuid, gameUserId: gameUserId)); + + dPrint('[PartyRoom] PreRegister verification code: ${response.verificationCode}'); + return response; + } catch (e) { + dPrint('[PartyRoom] PreRegister error: $e'); + rethrow; + } + } + + /// 注册 + Future register(String gameUserId) async { + try { + final client = state.client.authClient; + if (client == null) throw Exception('Not connected to server'); + + final response = await client.register(auth.RegisterRequest(uuid: state.auth.uuid, gameUserId: gameUserId)); + + // 保存 secretKey + await _confBox?.put(_secretKeyKey, response.partyRoomSecretKey); + + state = state.copyWith( + auth: state.auth.copyWith(secretKey: response.partyRoomSecretKey, userInfo: response.userInfo), + ); + + dPrint('[PartyRoom] Registered successfully'); + } catch (e) { + dPrint('[PartyRoom] Register error: $e'); + rethrow; + } + } + + /// 注销 + Future unregister() async { + try { + final client = state.client.authClient; + if (client == null) throw Exception('Not connected to server'); + + await client.unregister(auth.UnregisterRequest(), options: _getAuthCallOptions()); + + // 清除本地认证信息 + await _confBox?.delete(_secretKeyKey); + + state = state.copyWith( + auth: state.auth.copyWith(secretKey: '', isLoggedIn: false, userInfo: null), + room: const PartyRoomState(), + ); + + dPrint('[PartyRoom] Unregistered successfully'); + } catch (e) { + dPrint('[PartyRoom] Unregister error: $e'); + rethrow; + } + } + + // ========== 房间相关方法 ========== + + /// 加载标签和信号类型 + Future loadTags() async { + try { + final roomClient = state.client.roomClient; + final commonClient = state.client.commonClient; + if (roomClient == null || commonClient == null) throw Exception('Not connected to server'); + + final response = await commonClient.getTags(common.GetTagsRequest()); + final signalTypesResponse = await commonClient.getSignalTypes(common.GetSignalTypesRequest()); + + state = state.copyWith( + room: state.room.copyWith(tags: response.tags, signalTypes: signalTypesResponse.signals), + ); + + dPrint( + '[PartyRoom] Tags and SignalTypes loaded: ${response.tags.length} tags, ${signalTypesResponse.signals.length} signal types', + ); + } catch (e) { + dPrint('[PartyRoom] LoadTags error: $e'); + rethrow; + } + } + + /// 获取房间列表 + Future getRoomList({ + String? mainTagId, + String? subTagId, + String? searchOwnerName, + int page = 1, + int pageSize = 20, + }) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final response = await client.getRoomList( + partroom.GetRoomListRequest( + mainTagId: mainTagId ?? '', + subTagId: subTagId ?? '', + searchOwnerName: searchOwnerName ?? '', + page: page, + pageSize: pageSize, + ), + ); + + return response; + } catch (e) { + dPrint('[PartyRoom] GetRoomList error: $e'); + rethrow; + } + } + + /// 创建房间 + Future createRoom({ + required String mainTagId, + String? subTagId, + required int targetMembers, + bool hasPassword = false, + String? password, + List? socialLinks, + }) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final response = await client.createRoom( + partroom.CreateRoomRequest( + mainTagId: mainTagId, + subTagId: subTagId ?? '', + targetMembers: targetMembers, + hasPassword: hasPassword, + password_5: password ?? '', + socialLinks: socialLinks ?? [], + ), + options: _getAuthCallOptions(), + ); + + state = state.copyWith(room: state.room.copyWith(roomUuid: response.roomUuid, isInRoom: true, isOwner: true)); + + dPrint('[PartyRoom] Room created: ${response.roomUuid}'); + + // 获取房间详情 + await getRoomInfo(response.roomUuid); + + // 启动心跳和事件监听 + await _startHeartbeat(response.roomUuid); + await _startEventStream(response.roomUuid); + } catch (e) { + dPrint('[PartyRoom] CreateRoom error: $e'); + rethrow; + } + } + + /// 加入房间 + Future joinRoom(String roomUuid, {String? password}) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + await client.joinRoom( + partroom.JoinRoomRequest(roomUuid: roomUuid, password: password ?? ''), + options: _getAuthCallOptions(), + ); + + state = state.copyWith(room: state.room.copyWith(roomUuid: roomUuid, isInRoom: true, isOwner: false)); + + dPrint('[PartyRoom] Joined room: $roomUuid'); + + // 获取房间详情 + await getRoomInfo(roomUuid); + + // 启动心跳和事件监听 + await _startHeartbeat(roomUuid); + await _startEventStream(roomUuid); + } catch (e) { + dPrint('[PartyRoom] JoinRoom error: $e'); + rethrow; + } + } + + /// 离开房间 + Future leaveRoom() async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final roomUuid = state.room.roomUuid; + if (roomUuid == null) return; + + await client.leaveRoom(partroom.LeaveRoomRequest(roomUuid: roomUuid), options: _getAuthCallOptions()); + + await _stopHeartbeat(); + await _stopEventStream(); + + state = state.copyWith(room: const PartyRoomState()); + + dPrint('[PartyRoom] Left room: $roomUuid'); + } catch (e) { + dPrint('[PartyRoom] LeaveRoom error: $e'); + rethrow; + } + } + + /// 解散房间 + Future dismissRoom() async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final roomUuid = state.room.roomUuid; + if (roomUuid == null) return; + + await client.dismissRoom(partroom.DismissRoomRequest(roomUuid: roomUuid), options: _getAuthCallOptions()); + + await _stopHeartbeat(); + await _stopEventStream(); + + state = state.copyWith(room: const PartyRoomState()); + + dPrint('[PartyRoom] Dismissed room: $roomUuid'); + } catch (e) { + dPrint('[PartyRoom] DismissRoom error: $e'); + rethrow; + } + } + + /// 获取房间详情 + Future getRoomInfo(String roomUuid) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final response = await client.getRoomInfo( + partroom.GetRoomInfoRequest(roomUuid: roomUuid), + options: _getAuthCallOptions(), + ); + + // 检查是否为房主 + final isOwner = response.room.ownerGameId == state.auth.userInfo?.gameUserId; + + state = state.copyWith( + room: state.room.copyWith(currentRoom: response.room, isOwner: isOwner), + ); + + // 同时获取成员列表 + await getRoomMembers(roomUuid); + + dPrint('[PartyRoom] Room info loaded'); + } catch (e) { + dPrint('[PartyRoom] GetRoomInfo error: $e'); + rethrow; + } + } + + /// 获取房间成员 + Future getRoomMembers(String roomUuid, {int page = 1, int pageSize = 100}) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final response = await client.getRoomMembers( + partroom.GetRoomMembersRequest(roomUuid: roomUuid, page: page, pageSize: pageSize), + options: _getAuthCallOptions(), + ); + + state = state.copyWith(room: state.room.copyWith(members: response.members)); + + dPrint('[PartyRoom] Loaded ${response.members.length} members'); + } catch (e) { + dPrint('[PartyRoom] GetRoomMembers error: $e'); + rethrow; + } + } + + /// 检查当前用户所在房间 + Future _checkMyRoom() async { + try { + final client = state.client.roomClient; + if (client == null) return; + + final response = await client.getMyRoom(partroom.GetMyRoomRequest(), options: _getAuthCallOptions()); + + if (response.hasRoom() && response.room.roomUuid.isNotEmpty) { + final isOwner = response.room.ownerGameId == state.auth.userInfo?.gameUserId; + + state = state.copyWith( + room: state.room.copyWith( + currentRoom: response.room, + roomUuid: response.room.roomUuid, + isInRoom: true, + isOwner: isOwner, + ), + ); + + dPrint('[PartyRoom] Rejoined room: ${response.room.roomUuid}'); + + // 重新启动心跳和事件监听 + await _startHeartbeat(response.room.roomUuid); + await _startEventStream(response.room.roomUuid); + await getRoomMembers(response.room.roomUuid); + } + } catch (e) { + dPrint('[PartyRoom] CheckMyRoom error: $e'); + } + } + + /// 更新房间信息 + Future updateRoom({ + int? targetMembers, + String? password, + String? mainTagId, + String? subTagId, + List? socialLinks, + }) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final roomUuid = state.room.roomUuid; + if (roomUuid == null) return; + + final request = partroom.UpdateRoomRequest( + roomUuid: roomUuid, + targetMembers: targetMembers ?? state.room.currentRoom?.targetMembers ?? 0, + mainTagId: mainTagId ?? state.room.currentRoom?.mainTagId ?? '', + subTagId: subTagId ?? state.room.currentRoom?.subTagId ?? '', + ); + + if (password != null) { + request.password = password; + } + + if (socialLinks != null) { + request.socialLinks.addAll(socialLinks); + } else if (state.room.currentRoom?.socialLinks != null) { + request.socialLinks.addAll(state.room.currentRoom!.socialLinks); + } + + await client.updateRoom(request, options: _getAuthCallOptions()); + + // 刷新房间信息 + await getRoomInfo(roomUuid); + + dPrint('[PartyRoom] Room updated'); + } catch (e) { + dPrint('[PartyRoom] UpdateRoom error: $e'); + rethrow; + } + } + + /// 踢出成员 + Future kickMember(String targetGameUserId) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final roomUuid = state.room.roomUuid; + if (roomUuid == null) return; + + await client.kickMember( + partroom.KickMemberRequest(roomUuid: roomUuid, targetGameUserId: targetGameUserId), + options: _getAuthCallOptions(), + ); + + dPrint('[PartyRoom] Member kicked: $targetGameUserId'); + + // 刷新成员列表 + await getRoomMembers(roomUuid); + } catch (e) { + dPrint('[PartyRoom] KickMember error: $e'); + rethrow; + } + } + + /// 设置状态 + Future setStatus({String? currentLocation, int? kills, int? deaths, int? playTime}) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final roomUuid = state.room.roomUuid; + if (roomUuid == null) return; + + await client.setStatus( + partroom.SetStatusRequest( + roomUuid: roomUuid, + status: partroom.MemberStatus( + currentLocation: currentLocation ?? '', + kills: kills ?? 0, + deaths: deaths ?? 0, + playTime: Int64(playTime ?? 0), + ), + ), + options: _getAuthCallOptions(), + ); + + dPrint('[PartyRoom] Status updated'); + } catch (e) { + dPrint('[PartyRoom] SetStatus error: $e'); + rethrow; + } + } + + /// 发送信号 + Future sendSignal(String signalId, {Map? params}) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final roomUuid = state.room.roomUuid; + if (roomUuid == null) return; + + // 验证信号类型是否有效 + final validSignalIds = state.room.signalTypes.map((s) => s.id).toList(); + if (validSignalIds.isNotEmpty && !validSignalIds.contains(signalId)) { + throw Exception('Invalid signal ID: $signalId. Valid IDs: ${validSignalIds.join(", ")}'); + } + + final request = partroom.SendSignalRequest(roomUuid: roomUuid, signalId: signalId); + + if (params != null) { + request.params.addAll(params); + } + + await client.sendSignal(request, options: _getAuthCallOptions()); + + dPrint('[PartyRoom] Signal sent: $signalId'); + } catch (e) { + dPrint('[PartyRoom] SendSignal error: $e'); + rethrow; + } + } + + /// 转移房主 + Future transferOwnership(String targetGameUserId) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final roomUuid = state.room.roomUuid; + if (roomUuid == null) return; + + await client.transferOwnership( + partroom.TransferOwnershipRequest(roomUuid: roomUuid, targetGameUserId: targetGameUserId), + options: _getAuthCallOptions(), + ); + + // 更新房主状态 + state = state.copyWith(room: state.room.copyWith(isOwner: false)); + + dPrint('[PartyRoom] Ownership transferred to: $targetGameUserId'); + + // 刷新房间信息 + await getRoomInfo(roomUuid); + } catch (e) { + dPrint('[PartyRoom] TransferOwnership error: $e'); + rethrow; + } + } + + /// 获取被踢出成员列表 + Future getKickedMembers({int page = 1, int pageSize = 20}) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final roomUuid = state.room.roomUuid; + if (roomUuid == null) throw Exception('Not in a room'); + + final response = await client.getKickedMembers( + partroom.GetKickedMembersRequest(roomUuid: roomUuid, page: page, pageSize: pageSize), + options: _getAuthCallOptions(), + ); + + return response; + } catch (e) { + dPrint('[PartyRoom] GetKickedMembers error: $e'); + rethrow; + } + } + + /// 移除被踢出成员(解除黑名单) + Future removeKickedMember(String gameUserId) async { + try { + final client = state.client.roomClient; + if (client == null) throw Exception('Not connected to server'); + + final roomUuid = state.room.roomUuid; + if (roomUuid == null) return; + + await client.removeKickedMember( + partroom.RemoveKickedMemberRequest(roomUuid: roomUuid, gameUserId: gameUserId), + options: _getAuthCallOptions(), + ); + + dPrint('[PartyRoom] Kicked member removed: $gameUserId'); + } catch (e) { + dPrint('[PartyRoom] RemoveKickedMember error: $e'); + rethrow; + } + } + + // ========== 心跳和事件流 ========== + + /// 启动心跳 + Future _startHeartbeat(String roomUuid) async { + await _stopHeartbeat(); + + _heartbeatTimer = Timer.periodic(const Duration(seconds: 30), (timer) async { + if (_disposed || state.room.roomUuid == null) { + timer.cancel(); + return; + } + + try { + final client = state.client.roomClient; + if (client == null) return; + + await client.heartbeat(partroom.HeartbeatRequest(roomUuid: roomUuid), options: _getAuthCallOptions()); + + dPrint('[PartyRoom] Heartbeat sent'); + } catch (e) { + dPrint('[PartyRoom] Heartbeat error: $e'); + } + }); + + dPrint('[PartyRoom] Heartbeat started'); + } + + /// 停止心跳 + Future _stopHeartbeat() async { + _heartbeatTimer?.cancel(); + _heartbeatTimer = null; + dPrint('[PartyRoom] Heartbeat stopped'); + } + + /// 启动事件流监听 + Future _startEventStream(String roomUuid) async { + await _stopEventStream(); + + try { + final client = state.client.roomClient; + if (client == null) return; + + final stream = client.listenRoomEvents( + partroom.ListenRoomEventsRequest(roomUuid: roomUuid), + options: _getAuthCallOptions(), + ); + + _eventStreamSubscription = stream.listen( + (event) { + _handleRoomEvent(event); + }, + onError: (error) { + dPrint('[PartyRoom] Event stream error: $error'); + }, + onDone: () { + dPrint('[PartyRoom] Event stream closed'); + }, + ); + + dPrint('[PartyRoom] Event stream started'); + } catch (e) { + dPrint('[PartyRoom] StartEventStream error: $e'); + } + } + + /// 停止事件流监听 + Future _stopEventStream() async { + await _eventStreamSubscription?.cancel(); + _eventStreamSubscription = null; + dPrint('[PartyRoom] Event stream stopped'); + } + + /// 处理房间事件 + void _handleRoomEvent(partroom.RoomEvent event) { + dPrint('[PartyRoom] Event received: ${event.type}'); + + // 添加到最近事件列表(保留最近 50 条) + final recentEvents = [...state.room.recentEvents, event]; + if (recentEvents.length > 50) { + recentEvents.removeAt(0); + } + + state = state.copyWith(room: state.room.copyWith(recentEvents: recentEvents)); + + // 根据事件类型处理 + switch (event.type) { + case partroom.RoomEventType.MEMBER_JOINED: + case partroom.RoomEventType.MEMBER_LEFT: + case partroom.RoomEventType.MEMBER_KICKED: + case partroom.RoomEventType.MEMBER_STATUS_UPDATED: + // 刷新成员列表 + if (state.room.roomUuid != null) { + getRoomMembers(state.room.roomUuid!); + } + break; + + case partroom.RoomEventType.OWNER_CHANGED: + // 检查是否自己成为房主 + final isOwner = event.member.gameUserId == state.auth.userInfo?.gameUserId; + state = state.copyWith(room: state.room.copyWith(isOwner: isOwner)); + // 刷新房间信息 + if (state.room.roomUuid != null) { + getRoomInfo(state.room.roomUuid!); + } + break; + + case partroom.RoomEventType.ROOM_UPDATED: + // 刷新房间信息 + if (state.room.roomUuid != null) { + getRoomInfo(state.room.roomUuid!); + } + break; + + case partroom.RoomEventType.ROOM_DISMISSED: + // 房间被解散 + _stopHeartbeat(); + _stopEventStream(); + state = state.copyWith(room: const PartyRoomState()); + break; + + case partroom.RoomEventType.SIGNAL_BROADCAST: + // 信号广播,UI 层可以监听 state.room.recentEvents 来处理 + break; + + default: + break; + } + } + + // ========== 通用服务方法 ========== + + /// 获取服务器时间 + Future getServerTime() async { + try { + final client = state.client.commonClient; + if (client == null) throw Exception('Not connected to server'); + + return await client.getServerTime(common.GetServerTimeRequest()); + } catch (e) { + dPrint('[PartyRoom] GetServerTime error: $e'); + rethrow; + } + } + + /// 获取版本信息 + Future getVersion() async { + try { + final client = state.client.commonClient; + if (client == null) throw Exception('Not connected to server'); + + return await client.getVersion(common.GetVersionRequest()); + } catch (e) { + dPrint('[PartyRoom] GetVersion error: $e'); + rethrow; + } + } + + /// 获取信号类型列表 + Future getSignalTypes() async { + try { + final client = state.client.commonClient; + if (client == null) throw Exception('Not connected to server'); + + return await client.getSignalTypes(common.GetSignalTypesRequest()); + } catch (e) { + dPrint('[PartyRoom] GetSignalTypes error: $e'); + rethrow; + } + } + + // ========== 清理 ========== + + void _cleanup() { + _stopHeartbeat(); + _stopEventStream(); + _confBox?.close(); + } +} diff --git a/lib/provider/party_room.freezed.dart b/lib/provider/party_room.freezed.dart new file mode 100644 index 0000000..2cf8331 --- /dev/null +++ b/lib/provider/party_room.freezed.dart @@ -0,0 +1,1153 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'party_room.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; +/// @nodoc +mixin _$PartyRoomAuthState { + + String get uuid; String get secretKey; bool get isLoggedIn; auth.GameUserInfo? get userInfo; DateTime? get lastLoginTime; +/// Create a copy of PartyRoomAuthState +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$PartyRoomAuthStateCopyWith get copyWith => _$PartyRoomAuthStateCopyWithImpl(this as PartyRoomAuthState, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is PartyRoomAuthState&&(identical(other.uuid, uuid) || other.uuid == uuid)&&(identical(other.secretKey, secretKey) || other.secretKey == secretKey)&&(identical(other.isLoggedIn, isLoggedIn) || other.isLoggedIn == isLoggedIn)&&(identical(other.userInfo, userInfo) || other.userInfo == userInfo)&&(identical(other.lastLoginTime, lastLoginTime) || other.lastLoginTime == lastLoginTime)); +} + + +@override +int get hashCode => Object.hash(runtimeType,uuid,secretKey,isLoggedIn,userInfo,lastLoginTime); + +@override +String toString() { + return 'PartyRoomAuthState(uuid: $uuid, secretKey: $secretKey, isLoggedIn: $isLoggedIn, userInfo: $userInfo, lastLoginTime: $lastLoginTime)'; +} + + +} + +/// @nodoc +abstract mixin class $PartyRoomAuthStateCopyWith<$Res> { + factory $PartyRoomAuthStateCopyWith(PartyRoomAuthState value, $Res Function(PartyRoomAuthState) _then) = _$PartyRoomAuthStateCopyWithImpl; +@useResult +$Res call({ + String uuid, String secretKey, bool isLoggedIn, auth.GameUserInfo? userInfo, DateTime? lastLoginTime +}); + + + + +} +/// @nodoc +class _$PartyRoomAuthStateCopyWithImpl<$Res> + implements $PartyRoomAuthStateCopyWith<$Res> { + _$PartyRoomAuthStateCopyWithImpl(this._self, this._then); + + final PartyRoomAuthState _self; + final $Res Function(PartyRoomAuthState) _then; + +/// Create a copy of PartyRoomAuthState +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? uuid = null,Object? secretKey = null,Object? isLoggedIn = null,Object? userInfo = freezed,Object? lastLoginTime = freezed,}) { + return _then(_self.copyWith( +uuid: null == uuid ? _self.uuid : uuid // ignore: cast_nullable_to_non_nullable +as String,secretKey: null == secretKey ? _self.secretKey : secretKey // ignore: cast_nullable_to_non_nullable +as String,isLoggedIn: null == isLoggedIn ? _self.isLoggedIn : isLoggedIn // ignore: cast_nullable_to_non_nullable +as bool,userInfo: freezed == userInfo ? _self.userInfo : userInfo // ignore: cast_nullable_to_non_nullable +as auth.GameUserInfo?,lastLoginTime: freezed == lastLoginTime ? _self.lastLoginTime : lastLoginTime // ignore: cast_nullable_to_non_nullable +as DateTime?, + )); +} + +} + + +/// Adds pattern-matching-related methods to [PartyRoomAuthState]. +extension PartyRoomAuthStatePatterns on PartyRoomAuthState { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _PartyRoomAuthState value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _PartyRoomAuthState() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _PartyRoomAuthState value) $default,){ +final _that = this; +switch (_that) { +case _PartyRoomAuthState(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _PartyRoomAuthState value)? $default,){ +final _that = this; +switch (_that) { +case _PartyRoomAuthState() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String uuid, String secretKey, bool isLoggedIn, auth.GameUserInfo? userInfo, DateTime? lastLoginTime)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _PartyRoomAuthState() when $default != null: +return $default(_that.uuid,_that.secretKey,_that.isLoggedIn,_that.userInfo,_that.lastLoginTime);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String uuid, String secretKey, bool isLoggedIn, auth.GameUserInfo? userInfo, DateTime? lastLoginTime) $default,) {final _that = this; +switch (_that) { +case _PartyRoomAuthState(): +return $default(_that.uuid,_that.secretKey,_that.isLoggedIn,_that.userInfo,_that.lastLoginTime);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String uuid, String secretKey, bool isLoggedIn, auth.GameUserInfo? userInfo, DateTime? lastLoginTime)? $default,) {final _that = this; +switch (_that) { +case _PartyRoomAuthState() when $default != null: +return $default(_that.uuid,_that.secretKey,_that.isLoggedIn,_that.userInfo,_that.lastLoginTime);case _: + return null; + +} +} + +} + +/// @nodoc + + +class _PartyRoomAuthState implements PartyRoomAuthState { + const _PartyRoomAuthState({this.uuid = '', this.secretKey = '', this.isLoggedIn = false, this.userInfo, this.lastLoginTime}); + + +@override@JsonKey() final String uuid; +@override@JsonKey() final String secretKey; +@override@JsonKey() final bool isLoggedIn; +@override final auth.GameUserInfo? userInfo; +@override final DateTime? lastLoginTime; + +/// Create a copy of PartyRoomAuthState +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$PartyRoomAuthStateCopyWith<_PartyRoomAuthState> get copyWith => __$PartyRoomAuthStateCopyWithImpl<_PartyRoomAuthState>(this, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _PartyRoomAuthState&&(identical(other.uuid, uuid) || other.uuid == uuid)&&(identical(other.secretKey, secretKey) || other.secretKey == secretKey)&&(identical(other.isLoggedIn, isLoggedIn) || other.isLoggedIn == isLoggedIn)&&(identical(other.userInfo, userInfo) || other.userInfo == userInfo)&&(identical(other.lastLoginTime, lastLoginTime) || other.lastLoginTime == lastLoginTime)); +} + + +@override +int get hashCode => Object.hash(runtimeType,uuid,secretKey,isLoggedIn,userInfo,lastLoginTime); + +@override +String toString() { + return 'PartyRoomAuthState(uuid: $uuid, secretKey: $secretKey, isLoggedIn: $isLoggedIn, userInfo: $userInfo, lastLoginTime: $lastLoginTime)'; +} + + +} + +/// @nodoc +abstract mixin class _$PartyRoomAuthStateCopyWith<$Res> implements $PartyRoomAuthStateCopyWith<$Res> { + factory _$PartyRoomAuthStateCopyWith(_PartyRoomAuthState value, $Res Function(_PartyRoomAuthState) _then) = __$PartyRoomAuthStateCopyWithImpl; +@override @useResult +$Res call({ + String uuid, String secretKey, bool isLoggedIn, auth.GameUserInfo? userInfo, DateTime? lastLoginTime +}); + + + + +} +/// @nodoc +class __$PartyRoomAuthStateCopyWithImpl<$Res> + implements _$PartyRoomAuthStateCopyWith<$Res> { + __$PartyRoomAuthStateCopyWithImpl(this._self, this._then); + + final _PartyRoomAuthState _self; + final $Res Function(_PartyRoomAuthState) _then; + +/// Create a copy of PartyRoomAuthState +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? uuid = null,Object? secretKey = null,Object? isLoggedIn = null,Object? userInfo = freezed,Object? lastLoginTime = freezed,}) { + return _then(_PartyRoomAuthState( +uuid: null == uuid ? _self.uuid : uuid // ignore: cast_nullable_to_non_nullable +as String,secretKey: null == secretKey ? _self.secretKey : secretKey // ignore: cast_nullable_to_non_nullable +as String,isLoggedIn: null == isLoggedIn ? _self.isLoggedIn : isLoggedIn // ignore: cast_nullable_to_non_nullable +as bool,userInfo: freezed == userInfo ? _self.userInfo : userInfo // ignore: cast_nullable_to_non_nullable +as auth.GameUserInfo?,lastLoginTime: freezed == lastLoginTime ? _self.lastLoginTime : lastLoginTime // ignore: cast_nullable_to_non_nullable +as DateTime?, + )); +} + + +} + +/// @nodoc +mixin _$PartyRoomState { + + partroom.RoomInfo? get currentRoom; List get members; List get tags; List get signalTypes; bool get isInRoom; bool get isOwner; String? get roomUuid; List get recentEvents; +/// Create a copy of PartyRoomState +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$PartyRoomStateCopyWith get copyWith => _$PartyRoomStateCopyWithImpl(this as PartyRoomState, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is PartyRoomState&&(identical(other.currentRoom, currentRoom) || other.currentRoom == currentRoom)&&const DeepCollectionEquality().equals(other.members, members)&&const DeepCollectionEquality().equals(other.tags, tags)&&const DeepCollectionEquality().equals(other.signalTypes, signalTypes)&&(identical(other.isInRoom, isInRoom) || other.isInRoom == isInRoom)&&(identical(other.isOwner, isOwner) || other.isOwner == isOwner)&&(identical(other.roomUuid, roomUuid) || other.roomUuid == roomUuid)&&const DeepCollectionEquality().equals(other.recentEvents, recentEvents)); +} + + +@override +int get hashCode => Object.hash(runtimeType,currentRoom,const DeepCollectionEquality().hash(members),const DeepCollectionEquality().hash(tags),const DeepCollectionEquality().hash(signalTypes),isInRoom,isOwner,roomUuid,const DeepCollectionEquality().hash(recentEvents)); + +@override +String toString() { + return 'PartyRoomState(currentRoom: $currentRoom, members: $members, tags: $tags, signalTypes: $signalTypes, isInRoom: $isInRoom, isOwner: $isOwner, roomUuid: $roomUuid, recentEvents: $recentEvents)'; +} + + +} + +/// @nodoc +abstract mixin class $PartyRoomStateCopyWith<$Res> { + factory $PartyRoomStateCopyWith(PartyRoomState value, $Res Function(PartyRoomState) _then) = _$PartyRoomStateCopyWithImpl; +@useResult +$Res call({ + partroom.RoomInfo? currentRoom, List members, List tags, List signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List recentEvents +}); + + + + +} +/// @nodoc +class _$PartyRoomStateCopyWithImpl<$Res> + implements $PartyRoomStateCopyWith<$Res> { + _$PartyRoomStateCopyWithImpl(this._self, this._then); + + final PartyRoomState _self; + final $Res Function(PartyRoomState) _then; + +/// Create a copy of PartyRoomState +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? currentRoom = freezed,Object? members = null,Object? tags = null,Object? signalTypes = null,Object? isInRoom = null,Object? isOwner = null,Object? roomUuid = freezed,Object? recentEvents = null,}) { + return _then(_self.copyWith( +currentRoom: freezed == currentRoom ? _self.currentRoom : currentRoom // ignore: cast_nullable_to_non_nullable +as partroom.RoomInfo?,members: null == members ? _self.members : members // ignore: cast_nullable_to_non_nullable +as List,tags: null == tags ? _self.tags : tags // ignore: cast_nullable_to_non_nullable +as List,signalTypes: null == signalTypes ? _self.signalTypes : signalTypes // ignore: cast_nullable_to_non_nullable +as List,isInRoom: null == isInRoom ? _self.isInRoom : isInRoom // ignore: cast_nullable_to_non_nullable +as bool,isOwner: null == isOwner ? _self.isOwner : isOwner // ignore: cast_nullable_to_non_nullable +as bool,roomUuid: freezed == roomUuid ? _self.roomUuid : roomUuid // ignore: cast_nullable_to_non_nullable +as String?,recentEvents: null == recentEvents ? _self.recentEvents : recentEvents // ignore: cast_nullable_to_non_nullable +as List, + )); +} + +} + + +/// Adds pattern-matching-related methods to [PartyRoomState]. +extension PartyRoomStatePatterns on PartyRoomState { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _PartyRoomState value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _PartyRoomState() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _PartyRoomState value) $default,){ +final _that = this; +switch (_that) { +case _PartyRoomState(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _PartyRoomState value)? $default,){ +final _that = this; +switch (_that) { +case _PartyRoomState() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( partroom.RoomInfo? currentRoom, List members, List tags, List signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List recentEvents)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _PartyRoomState() when $default != null: +return $default(_that.currentRoom,_that.members,_that.tags,_that.signalTypes,_that.isInRoom,_that.isOwner,_that.roomUuid,_that.recentEvents);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( partroom.RoomInfo? currentRoom, List members, List tags, List signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List recentEvents) $default,) {final _that = this; +switch (_that) { +case _PartyRoomState(): +return $default(_that.currentRoom,_that.members,_that.tags,_that.signalTypes,_that.isInRoom,_that.isOwner,_that.roomUuid,_that.recentEvents);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( partroom.RoomInfo? currentRoom, List members, List tags, List signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List recentEvents)? $default,) {final _that = this; +switch (_that) { +case _PartyRoomState() when $default != null: +return $default(_that.currentRoom,_that.members,_that.tags,_that.signalTypes,_that.isInRoom,_that.isOwner,_that.roomUuid,_that.recentEvents);case _: + return null; + +} +} + +} + +/// @nodoc + + +class _PartyRoomState implements PartyRoomState { + const _PartyRoomState({this.currentRoom, final List members = const [], final List tags = const [], final List signalTypes = const [], this.isInRoom = false, this.isOwner = false, this.roomUuid, final List recentEvents = const []}): _members = members,_tags = tags,_signalTypes = signalTypes,_recentEvents = recentEvents; + + +@override final partroom.RoomInfo? currentRoom; + final List _members; +@override@JsonKey() List get members { + if (_members is EqualUnmodifiableListView) return _members; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_members); +} + + final List _tags; +@override@JsonKey() List get tags { + if (_tags is EqualUnmodifiableListView) return _tags; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_tags); +} + + final List _signalTypes; +@override@JsonKey() List get signalTypes { + if (_signalTypes is EqualUnmodifiableListView) return _signalTypes; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_signalTypes); +} + +@override@JsonKey() final bool isInRoom; +@override@JsonKey() final bool isOwner; +@override final String? roomUuid; + final List _recentEvents; +@override@JsonKey() List get recentEvents { + if (_recentEvents is EqualUnmodifiableListView) return _recentEvents; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_recentEvents); +} + + +/// Create a copy of PartyRoomState +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$PartyRoomStateCopyWith<_PartyRoomState> get copyWith => __$PartyRoomStateCopyWithImpl<_PartyRoomState>(this, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _PartyRoomState&&(identical(other.currentRoom, currentRoom) || other.currentRoom == currentRoom)&&const DeepCollectionEquality().equals(other._members, _members)&&const DeepCollectionEquality().equals(other._tags, _tags)&&const DeepCollectionEquality().equals(other._signalTypes, _signalTypes)&&(identical(other.isInRoom, isInRoom) || other.isInRoom == isInRoom)&&(identical(other.isOwner, isOwner) || other.isOwner == isOwner)&&(identical(other.roomUuid, roomUuid) || other.roomUuid == roomUuid)&&const DeepCollectionEquality().equals(other._recentEvents, _recentEvents)); +} + + +@override +int get hashCode => Object.hash(runtimeType,currentRoom,const DeepCollectionEquality().hash(_members),const DeepCollectionEquality().hash(_tags),const DeepCollectionEquality().hash(_signalTypes),isInRoom,isOwner,roomUuid,const DeepCollectionEquality().hash(_recentEvents)); + +@override +String toString() { + return 'PartyRoomState(currentRoom: $currentRoom, members: $members, tags: $tags, signalTypes: $signalTypes, isInRoom: $isInRoom, isOwner: $isOwner, roomUuid: $roomUuid, recentEvents: $recentEvents)'; +} + + +} + +/// @nodoc +abstract mixin class _$PartyRoomStateCopyWith<$Res> implements $PartyRoomStateCopyWith<$Res> { + factory _$PartyRoomStateCopyWith(_PartyRoomState value, $Res Function(_PartyRoomState) _then) = __$PartyRoomStateCopyWithImpl; +@override @useResult +$Res call({ + partroom.RoomInfo? currentRoom, List members, List tags, List signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List recentEvents +}); + + + + +} +/// @nodoc +class __$PartyRoomStateCopyWithImpl<$Res> + implements _$PartyRoomStateCopyWith<$Res> { + __$PartyRoomStateCopyWithImpl(this._self, this._then); + + final _PartyRoomState _self; + final $Res Function(_PartyRoomState) _then; + +/// Create a copy of PartyRoomState +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? currentRoom = freezed,Object? members = null,Object? tags = null,Object? signalTypes = null,Object? isInRoom = null,Object? isOwner = null,Object? roomUuid = freezed,Object? recentEvents = null,}) { + return _then(_PartyRoomState( +currentRoom: freezed == currentRoom ? _self.currentRoom : currentRoom // ignore: cast_nullable_to_non_nullable +as partroom.RoomInfo?,members: null == members ? _self._members : members // ignore: cast_nullable_to_non_nullable +as List,tags: null == tags ? _self._tags : tags // ignore: cast_nullable_to_non_nullable +as List,signalTypes: null == signalTypes ? _self._signalTypes : signalTypes // ignore: cast_nullable_to_non_nullable +as List,isInRoom: null == isInRoom ? _self.isInRoom : isInRoom // ignore: cast_nullable_to_non_nullable +as bool,isOwner: null == isOwner ? _self.isOwner : isOwner // ignore: cast_nullable_to_non_nullable +as bool,roomUuid: freezed == roomUuid ? _self.roomUuid : roomUuid // ignore: cast_nullable_to_non_nullable +as String?,recentEvents: null == recentEvents ? _self._recentEvents : recentEvents // ignore: cast_nullable_to_non_nullable +as List, + )); +} + + +} + +/// @nodoc +mixin _$PartyRoomClientState { + + ClientChannel? get channel; auth.AuthServiceClient? get authClient; partroom.PartRoomServiceClient? get roomClient; common.CommonServiceClient? get commonClient; bool get isConnected; String get serverAddress; int get serverPort; +/// Create a copy of PartyRoomClientState +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$PartyRoomClientStateCopyWith get copyWith => _$PartyRoomClientStateCopyWithImpl(this as PartyRoomClientState, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is PartyRoomClientState&&(identical(other.channel, channel) || other.channel == channel)&&(identical(other.authClient, authClient) || other.authClient == authClient)&&(identical(other.roomClient, roomClient) || other.roomClient == roomClient)&&(identical(other.commonClient, commonClient) || other.commonClient == commonClient)&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.serverAddress, serverAddress) || other.serverAddress == serverAddress)&&(identical(other.serverPort, serverPort) || other.serverPort == serverPort)); +} + + +@override +int get hashCode => Object.hash(runtimeType,channel,authClient,roomClient,commonClient,isConnected,serverAddress,serverPort); + +@override +String toString() { + return 'PartyRoomClientState(channel: $channel, authClient: $authClient, roomClient: $roomClient, commonClient: $commonClient, isConnected: $isConnected, serverAddress: $serverAddress, serverPort: $serverPort)'; +} + + +} + +/// @nodoc +abstract mixin class $PartyRoomClientStateCopyWith<$Res> { + factory $PartyRoomClientStateCopyWith(PartyRoomClientState value, $Res Function(PartyRoomClientState) _then) = _$PartyRoomClientStateCopyWithImpl; +@useResult +$Res call({ + ClientChannel? channel, auth.AuthServiceClient? authClient, partroom.PartRoomServiceClient? roomClient, common.CommonServiceClient? commonClient, bool isConnected, String serverAddress, int serverPort +}); + + + + +} +/// @nodoc +class _$PartyRoomClientStateCopyWithImpl<$Res> + implements $PartyRoomClientStateCopyWith<$Res> { + _$PartyRoomClientStateCopyWithImpl(this._self, this._then); + + final PartyRoomClientState _self; + final $Res Function(PartyRoomClientState) _then; + +/// Create a copy of PartyRoomClientState +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? channel = freezed,Object? authClient = freezed,Object? roomClient = freezed,Object? commonClient = freezed,Object? isConnected = null,Object? serverAddress = null,Object? serverPort = null,}) { + return _then(_self.copyWith( +channel: freezed == channel ? _self.channel : channel // ignore: cast_nullable_to_non_nullable +as ClientChannel?,authClient: freezed == authClient ? _self.authClient : authClient // ignore: cast_nullable_to_non_nullable +as auth.AuthServiceClient?,roomClient: freezed == roomClient ? _self.roomClient : roomClient // ignore: cast_nullable_to_non_nullable +as partroom.PartRoomServiceClient?,commonClient: freezed == commonClient ? _self.commonClient : commonClient // ignore: cast_nullable_to_non_nullable +as common.CommonServiceClient?,isConnected: null == isConnected ? _self.isConnected : isConnected // ignore: cast_nullable_to_non_nullable +as bool,serverAddress: null == serverAddress ? _self.serverAddress : serverAddress // ignore: cast_nullable_to_non_nullable +as String,serverPort: null == serverPort ? _self.serverPort : serverPort // ignore: cast_nullable_to_non_nullable +as int, + )); +} + +} + + +/// Adds pattern-matching-related methods to [PartyRoomClientState]. +extension PartyRoomClientStatePatterns on PartyRoomClientState { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _PartyRoomClientState value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _PartyRoomClientState() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _PartyRoomClientState value) $default,){ +final _that = this; +switch (_that) { +case _PartyRoomClientState(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _PartyRoomClientState value)? $default,){ +final _that = this; +switch (_that) { +case _PartyRoomClientState() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( ClientChannel? channel, auth.AuthServiceClient? authClient, partroom.PartRoomServiceClient? roomClient, common.CommonServiceClient? commonClient, bool isConnected, String serverAddress, int serverPort)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _PartyRoomClientState() when $default != null: +return $default(_that.channel,_that.authClient,_that.roomClient,_that.commonClient,_that.isConnected,_that.serverAddress,_that.serverPort);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( ClientChannel? channel, auth.AuthServiceClient? authClient, partroom.PartRoomServiceClient? roomClient, common.CommonServiceClient? commonClient, bool isConnected, String serverAddress, int serverPort) $default,) {final _that = this; +switch (_that) { +case _PartyRoomClientState(): +return $default(_that.channel,_that.authClient,_that.roomClient,_that.commonClient,_that.isConnected,_that.serverAddress,_that.serverPort);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( ClientChannel? channel, auth.AuthServiceClient? authClient, partroom.PartRoomServiceClient? roomClient, common.CommonServiceClient? commonClient, bool isConnected, String serverAddress, int serverPort)? $default,) {final _that = this; +switch (_that) { +case _PartyRoomClientState() when $default != null: +return $default(_that.channel,_that.authClient,_that.roomClient,_that.commonClient,_that.isConnected,_that.serverAddress,_that.serverPort);case _: + return null; + +} +} + +} + +/// @nodoc + + +class _PartyRoomClientState implements PartyRoomClientState { + const _PartyRoomClientState({this.channel, this.authClient, this.roomClient, this.commonClient, this.isConnected = false, this.serverAddress = '', this.serverPort = 0}); + + +@override final ClientChannel? channel; +@override final auth.AuthServiceClient? authClient; +@override final partroom.PartRoomServiceClient? roomClient; +@override final common.CommonServiceClient? commonClient; +@override@JsonKey() final bool isConnected; +@override@JsonKey() final String serverAddress; +@override@JsonKey() final int serverPort; + +/// Create a copy of PartyRoomClientState +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$PartyRoomClientStateCopyWith<_PartyRoomClientState> get copyWith => __$PartyRoomClientStateCopyWithImpl<_PartyRoomClientState>(this, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _PartyRoomClientState&&(identical(other.channel, channel) || other.channel == channel)&&(identical(other.authClient, authClient) || other.authClient == authClient)&&(identical(other.roomClient, roomClient) || other.roomClient == roomClient)&&(identical(other.commonClient, commonClient) || other.commonClient == commonClient)&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.serverAddress, serverAddress) || other.serverAddress == serverAddress)&&(identical(other.serverPort, serverPort) || other.serverPort == serverPort)); +} + + +@override +int get hashCode => Object.hash(runtimeType,channel,authClient,roomClient,commonClient,isConnected,serverAddress,serverPort); + +@override +String toString() { + return 'PartyRoomClientState(channel: $channel, authClient: $authClient, roomClient: $roomClient, commonClient: $commonClient, isConnected: $isConnected, serverAddress: $serverAddress, serverPort: $serverPort)'; +} + + +} + +/// @nodoc +abstract mixin class _$PartyRoomClientStateCopyWith<$Res> implements $PartyRoomClientStateCopyWith<$Res> { + factory _$PartyRoomClientStateCopyWith(_PartyRoomClientState value, $Res Function(_PartyRoomClientState) _then) = __$PartyRoomClientStateCopyWithImpl; +@override @useResult +$Res call({ + ClientChannel? channel, auth.AuthServiceClient? authClient, partroom.PartRoomServiceClient? roomClient, common.CommonServiceClient? commonClient, bool isConnected, String serverAddress, int serverPort +}); + + + + +} +/// @nodoc +class __$PartyRoomClientStateCopyWithImpl<$Res> + implements _$PartyRoomClientStateCopyWith<$Res> { + __$PartyRoomClientStateCopyWithImpl(this._self, this._then); + + final _PartyRoomClientState _self; + final $Res Function(_PartyRoomClientState) _then; + +/// Create a copy of PartyRoomClientState +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? channel = freezed,Object? authClient = freezed,Object? roomClient = freezed,Object? commonClient = freezed,Object? isConnected = null,Object? serverAddress = null,Object? serverPort = null,}) { + return _then(_PartyRoomClientState( +channel: freezed == channel ? _self.channel : channel // ignore: cast_nullable_to_non_nullable +as ClientChannel?,authClient: freezed == authClient ? _self.authClient : authClient // ignore: cast_nullable_to_non_nullable +as auth.AuthServiceClient?,roomClient: freezed == roomClient ? _self.roomClient : roomClient // ignore: cast_nullable_to_non_nullable +as partroom.PartRoomServiceClient?,commonClient: freezed == commonClient ? _self.commonClient : commonClient // ignore: cast_nullable_to_non_nullable +as common.CommonServiceClient?,isConnected: null == isConnected ? _self.isConnected : isConnected // ignore: cast_nullable_to_non_nullable +as bool,serverAddress: null == serverAddress ? _self.serverAddress : serverAddress // ignore: cast_nullable_to_non_nullable +as String,serverPort: null == serverPort ? _self.serverPort : serverPort // ignore: cast_nullable_to_non_nullable +as int, + )); +} + + +} + +/// @nodoc +mixin _$PartyRoomFullState { + + PartyRoomAuthState get auth; PartyRoomState get room; PartyRoomClientState get client; +/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$PartyRoomFullStateCopyWith get copyWith => _$PartyRoomFullStateCopyWithImpl(this as PartyRoomFullState, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is PartyRoomFullState&&(identical(other.auth, auth) || other.auth == auth)&&(identical(other.room, room) || other.room == room)&&(identical(other.client, client) || other.client == client)); +} + + +@override +int get hashCode => Object.hash(runtimeType,auth,room,client); + +@override +String toString() { + return 'PartyRoomFullState(auth: $auth, room: $room, client: $client)'; +} + + +} + +/// @nodoc +abstract mixin class $PartyRoomFullStateCopyWith<$Res> { + factory $PartyRoomFullStateCopyWith(PartyRoomFullState value, $Res Function(PartyRoomFullState) _then) = _$PartyRoomFullStateCopyWithImpl; +@useResult +$Res call({ + PartyRoomAuthState auth, PartyRoomState room, PartyRoomClientState client +}); + + +$PartyRoomAuthStateCopyWith<$Res> get auth;$PartyRoomStateCopyWith<$Res> get room;$PartyRoomClientStateCopyWith<$Res> get client; + +} +/// @nodoc +class _$PartyRoomFullStateCopyWithImpl<$Res> + implements $PartyRoomFullStateCopyWith<$Res> { + _$PartyRoomFullStateCopyWithImpl(this._self, this._then); + + final PartyRoomFullState _self; + final $Res Function(PartyRoomFullState) _then; + +/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? auth = null,Object? room = null,Object? client = null,}) { + return _then(_self.copyWith( +auth: null == auth ? _self.auth : auth // ignore: cast_nullable_to_non_nullable +as PartyRoomAuthState,room: null == room ? _self.room : room // ignore: cast_nullable_to_non_nullable +as PartyRoomState,client: null == client ? _self.client : client // ignore: cast_nullable_to_non_nullable +as PartyRoomClientState, + )); +} +/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@override +@pragma('vm:prefer-inline') +$PartyRoomAuthStateCopyWith<$Res> get auth { + + return $PartyRoomAuthStateCopyWith<$Res>(_self.auth, (value) { + return _then(_self.copyWith(auth: value)); + }); +}/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@override +@pragma('vm:prefer-inline') +$PartyRoomStateCopyWith<$Res> get room { + + return $PartyRoomStateCopyWith<$Res>(_self.room, (value) { + return _then(_self.copyWith(room: value)); + }); +}/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@override +@pragma('vm:prefer-inline') +$PartyRoomClientStateCopyWith<$Res> get client { + + return $PartyRoomClientStateCopyWith<$Res>(_self.client, (value) { + return _then(_self.copyWith(client: value)); + }); +} +} + + +/// Adds pattern-matching-related methods to [PartyRoomFullState]. +extension PartyRoomFullStatePatterns on PartyRoomFullState { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _PartyRoomFullState value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _PartyRoomFullState() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _PartyRoomFullState value) $default,){ +final _that = this; +switch (_that) { +case _PartyRoomFullState(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _PartyRoomFullState value)? $default,){ +final _that = this; +switch (_that) { +case _PartyRoomFullState() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( PartyRoomAuthState auth, PartyRoomState room, PartyRoomClientState client)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _PartyRoomFullState() when $default != null: +return $default(_that.auth,_that.room,_that.client);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( PartyRoomAuthState auth, PartyRoomState room, PartyRoomClientState client) $default,) {final _that = this; +switch (_that) { +case _PartyRoomFullState(): +return $default(_that.auth,_that.room,_that.client);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( PartyRoomAuthState auth, PartyRoomState room, PartyRoomClientState client)? $default,) {final _that = this; +switch (_that) { +case _PartyRoomFullState() when $default != null: +return $default(_that.auth,_that.room,_that.client);case _: + return null; + +} +} + +} + +/// @nodoc + + +class _PartyRoomFullState implements PartyRoomFullState { + const _PartyRoomFullState({required this.auth, required this.room, required this.client}); + + +@override final PartyRoomAuthState auth; +@override final PartyRoomState room; +@override final PartyRoomClientState client; + +/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$PartyRoomFullStateCopyWith<_PartyRoomFullState> get copyWith => __$PartyRoomFullStateCopyWithImpl<_PartyRoomFullState>(this, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _PartyRoomFullState&&(identical(other.auth, auth) || other.auth == auth)&&(identical(other.room, room) || other.room == room)&&(identical(other.client, client) || other.client == client)); +} + + +@override +int get hashCode => Object.hash(runtimeType,auth,room,client); + +@override +String toString() { + return 'PartyRoomFullState(auth: $auth, room: $room, client: $client)'; +} + + +} + +/// @nodoc +abstract mixin class _$PartyRoomFullStateCopyWith<$Res> implements $PartyRoomFullStateCopyWith<$Res> { + factory _$PartyRoomFullStateCopyWith(_PartyRoomFullState value, $Res Function(_PartyRoomFullState) _then) = __$PartyRoomFullStateCopyWithImpl; +@override @useResult +$Res call({ + PartyRoomAuthState auth, PartyRoomState room, PartyRoomClientState client +}); + + +@override $PartyRoomAuthStateCopyWith<$Res> get auth;@override $PartyRoomStateCopyWith<$Res> get room;@override $PartyRoomClientStateCopyWith<$Res> get client; + +} +/// @nodoc +class __$PartyRoomFullStateCopyWithImpl<$Res> + implements _$PartyRoomFullStateCopyWith<$Res> { + __$PartyRoomFullStateCopyWithImpl(this._self, this._then); + + final _PartyRoomFullState _self; + final $Res Function(_PartyRoomFullState) _then; + +/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? auth = null,Object? room = null,Object? client = null,}) { + return _then(_PartyRoomFullState( +auth: null == auth ? _self.auth : auth // ignore: cast_nullable_to_non_nullable +as PartyRoomAuthState,room: null == room ? _self.room : room // ignore: cast_nullable_to_non_nullable +as PartyRoomState,client: null == client ? _self.client : client // ignore: cast_nullable_to_non_nullable +as PartyRoomClientState, + )); +} + +/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@override +@pragma('vm:prefer-inline') +$PartyRoomAuthStateCopyWith<$Res> get auth { + + return $PartyRoomAuthStateCopyWith<$Res>(_self.auth, (value) { + return _then(_self.copyWith(auth: value)); + }); +}/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@override +@pragma('vm:prefer-inline') +$PartyRoomStateCopyWith<$Res> get room { + + return $PartyRoomStateCopyWith<$Res>(_self.room, (value) { + return _then(_self.copyWith(room: value)); + }); +}/// Create a copy of PartyRoomFullState +/// with the given fields replaced by the non-null parameter values. +@override +@pragma('vm:prefer-inline') +$PartyRoomClientStateCopyWith<$Res> get client { + + return $PartyRoomClientStateCopyWith<$Res>(_self.client, (value) { + return _then(_self.copyWith(client: value)); + }); +} +} + +// dart format on diff --git a/lib/provider/party_room.g.dart b/lib/provider/party_room.g.dart new file mode 100644 index 0000000..70dc68c --- /dev/null +++ b/lib/provider/party_room.g.dart @@ -0,0 +1,68 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'party_room.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning +/// PartyRoom Provider + +@ProviderFor(PartyRoom) +const partyRoomProvider = PartyRoomProvider._(); + +/// PartyRoom Provider +final class PartyRoomProvider + extends $NotifierProvider { + /// PartyRoom Provider + const PartyRoomProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'partyRoomProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$partyRoomHash(); + + @$internal + @override + PartyRoom create() => PartyRoom(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(PartyRoomFullState value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$partyRoomHash() => r'2c521709721292458d5459359cac376f123ec226'; + +/// PartyRoom Provider + +abstract class _$PartyRoom extends $Notifier { + PartyRoomFullState build(); + @$mustCallSuper + @override + void runBuild() { + final created = build(); + final ref = this.ref as $Ref; + final element = + ref.element + as $ClassProviderElement< + AnyNotifier, + PartyRoomFullState, + Object?, + Object? + >; + element.handleValue(ref, created); + } +} diff --git a/lib/ui/home/input_method/input_method_dialog_ui_model.g.dart b/lib/ui/home/input_method/input_method_dialog_ui_model.g.dart index 6270440..9ef43ba 100644 --- a/lib/ui/home/input_method/input_method_dialog_ui_model.g.dart +++ b/lib/ui/home/input_method/input_method_dialog_ui_model.g.dart @@ -43,7 +43,7 @@ final class InputMethodDialogUIModelProvider } String _$inputMethodDialogUIModelHash() => - r'f216c1a5b6d68b3924af7b351314c618dcac80b5'; + r'51f1708f22a90f7c2f879ad3d2a87a8e2f81b9e9'; abstract class _$InputMethodDialogUIModel extends $Notifier { diff --git a/lib/ui/home/localization/localization_ui_model.dart b/lib/ui/home/localization/localization_ui_model.dart index 2954421..40a029b 100644 --- a/lib/ui/home/localization/localization_ui_model.dart +++ b/lib/ui/home/localization/localization_ui_model.dart @@ -63,10 +63,13 @@ class LocalizationUIModel extends _$LocalizationUIModel { String get _scInstallPath => ref.read(homeUIModelProvider).scInstalledPath!; + bool _isDisposed = false; + @override LocalizationUIState build() { state = LocalizationUIState(selectedLanguage: languageSupport.keys.first); ref.onDispose(() { + _isDisposed = true; _customizeDirListenSub?.cancel(); _customizeDirListenSub = null; }); @@ -83,6 +86,7 @@ class LocalizationUIModel extends _$LocalizationUIModel { state = state.copyWith(selectedLanguage: lang); // fix for ui performance await Future.delayed(Duration(milliseconds: 250)); + if (_isDisposed) return; await _loadData(); } @@ -113,6 +117,7 @@ class LocalizationUIModel extends _$LocalizationUIModel { for (var lang in languageSupport.keys) { final l = await Api.getScLocalizationData(lang).unwrap(); if (l != null) { + if (_isDisposed) return; if (lang == state.selectedLanguage) { final apiLocalizationData = {}; for (var element in l) { @@ -123,6 +128,7 @@ class LocalizationUIModel extends _$LocalizationUIModel { apiLocalizationData[element.versionName ?? ""] = element; } } + if (_isDisposed) return; state = state.copyWith(apiLocalizationData: apiLocalizationData); } final map = {}; @@ -464,7 +470,7 @@ class LocalizationUIModel extends _$LocalizationUIModel { dPrint( "_updateStatus updateStatus: $patchStatus , isInstalledAdvanced: $isInstalledAdvanced ,installedCommunityInputMethodSupportVersion: $installedCommunityInputMethodSupportVersion"); - + if (_isDisposed) return; state = state.copyWith( patchStatus: patchStatus, isInstalledAdvanced: isInstalledAdvanced, diff --git a/lib/ui/home/localization/localization_ui_model.g.dart b/lib/ui/home/localization/localization_ui_model.g.dart index eee7afd..ad9ffca 100644 --- a/lib/ui/home/localization/localization_ui_model.g.dart +++ b/lib/ui/home/localization/localization_ui_model.g.dart @@ -42,7 +42,7 @@ final class LocalizationUIModelProvider } String _$localizationUIModelHash() => - r'3d3f0ed7fa3631eca4e10d456c437f6fca8eedff'; + r'122f9f85da6e112165f4ff88667b45cf3cf3f43e'; abstract class _$LocalizationUIModel extends $Notifier { LocalizationUIState build(); diff --git a/lib/ui/index_ui.dart b/lib/ui/index_ui.dart index 98fe9bb..203c3ce 100644 --- a/lib/ui/index_ui.dart +++ b/lib/ui/index_ui.dart @@ -6,6 +6,7 @@ import 'package:starcitizen_doctor/app.dart'; import 'package:starcitizen_doctor/common/conf/conf.dart'; import 'package:starcitizen_doctor/provider/aria2c.dart'; import 'package:starcitizen_doctor/ui/home/home_ui_model.dart'; +import 'package:starcitizen_doctor/ui/party_room/party_room_ui.dart'; import 'package:starcitizen_doctor/ui/settings/settings_ui_model.dart'; import 'package:starcitizen_doctor/widgets/widgets.dart'; import 'package:window_manager/window_manager.dart'; @@ -13,6 +14,7 @@ import 'package:window_manager/window_manager.dart'; import 'about/about_ui.dart'; import 'home/home_ui.dart'; import 'nav/nav_ui.dart'; +import 'party_room/party_room_ui_model.dart'; import 'settings/settings_ui.dart'; import 'tools/tools_ui.dart'; @@ -21,58 +23,52 @@ class IndexUI extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { + ref.watch(appGlobalModelProvider); // pre init child + ref.watch(homeUIModelProvider.select((value) => null)); ref.watch(settingsUIModelProvider.select((value) => null)); - ref.watch(appGlobalModelProvider); + ref.watch(partyRoomUIModelProvider.select((value) => null)); final curIndex = useState(0); return NavigationView( appBar: NavigationAppBar( - automaticallyImplyLeading: false, - title: () { - return DragToMoveArea( - child: Align( - alignment: AlignmentDirectional.centerStart, - child: Row( - children: [ - Image.asset( - "assets/app_logo_mini.png", - width: 20, - height: 20, - fit: BoxFit.cover, - ), - const SizedBox(width: 12), - Text(S.current.app_index_version_info(ConstConf.appVersion, ConstConf.isMSE ? "" : " Dev")), - ], - ), + automaticallyImplyLeading: false, + title: () { + return DragToMoveArea( + child: Align( + alignment: AlignmentDirectional.centerStart, + child: Row( + children: [ + Image.asset("assets/app_logo_mini.png", width: 20, height: 20, fit: BoxFit.cover), + const SizedBox(width: 12), + Text(S.current.app_index_version_info(ConstConf.appVersion, ConstConf.isMSE ? "" : " Dev")), + ], ), - ); - }(), - actions: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - IconButton( - icon: Stack( - children: [ - Padding( - padding: const EdgeInsets.all(6), - child: Icon( - FluentIcons.installation, - size: 22, - color: Colors.white.withValues(alpha: .6), - ), - ), - _makeAria2TaskNumWidget() - ], - ), - onPressed: () => _goDownloader(context), - // onPressed: model.goDownloader + ), + ); + }(), + actions: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + IconButton( + icon: Stack( + children: [ + Padding( + padding: const EdgeInsets.all(6), + child: Icon(FluentIcons.installation, size: 22, color: Colors.white.withValues(alpha: .6)), + ), + _makeAria2TaskNumWidget(), + ], ), - const SizedBox(width: 24), - const WindowButtons() - ], - )), + onPressed: () => _goDownloader(context), + // onPressed: model.goDownloader + ), + const SizedBox(width: 24), + const WindowButtons(), + ], + ), + ), pane: NavigationPane( key: Key("NavigationPane_${S.current.app_language_code}"), selected: curIndex.value, @@ -86,21 +82,13 @@ class IndexUI extends HookConsumerWidget { } Map get pageMenus => { - FluentIcons.home: ( - S.current.app_index_menu_home, - const HomeUI(), - ), - FluentIcons.toolbox: ( - S.current.app_index_menu_tools, - const ToolsUI(), - ), - FluentIcons.power_apps: ((S.current.nav_title), const NavUI()), - FluentIcons.settings: (S.current.app_index_menu_settings, const SettingsUI()), - FluentIcons.info: ( - S.current.app_index_menu_about, - const AboutUI(), - ), - }; + FluentIcons.home: (S.current.app_index_menu_home, const HomeUI()), + FluentIcons.game: (S.current.app_index_menu_lobby, const PartyRoomUI()), + FluentIcons.toolbox: (S.current.app_index_menu_tools, const ToolsUI()), + FluentIcons.power_apps: ((S.current.nav_title), const NavUI()), + FluentIcons.settings: (S.current.app_index_menu_settings, const SettingsUI()), + FluentIcons.info: (S.current.app_index_menu_about, const AboutUI()), + }; List getNavigationPaneItems(ValueNotifier curIndexState) { // width = 64 @@ -116,10 +104,7 @@ class IndexUI extends HookConsumerWidget { children: [ Icon(kv.key, size: 18), const SizedBox(height: 3), - Text( - kv.value.$1, - style: const TextStyle(fontSize: 11), - ) + Text(kv.value.$1, style: const TextStyle(fontSize: 11)), ], ), ), @@ -144,22 +129,14 @@ class IndexUI extends HookConsumerWidget { return const SizedBox(); } return Positioned( - bottom: 0, - right: 0, - child: Container( - decoration: BoxDecoration( - color: Colors.red, - borderRadius: BorderRadius.circular(12), - ), - padding: const EdgeInsets.only(left: 6, right: 6, bottom: 1.5, top: 1.5), - child: Text( - "${aria2cState.aria2TotalTaskNum}", - style: const TextStyle( - fontSize: 8, - color: Colors.white, - ), - ), - )); + bottom: 0, + right: 0, + child: Container( + decoration: BoxDecoration(color: Colors.red, borderRadius: BorderRadius.circular(12)), + padding: const EdgeInsets.only(left: 6, right: 6, bottom: 1.5, top: 1.5), + child: Text("${aria2cState.aria2TotalTaskNum}", style: const TextStyle(fontSize: 8, color: Colors.white)), + ), + ); }, ); } @@ -167,4 +144,4 @@ class IndexUI extends HookConsumerWidget { void _goDownloader(BuildContext context) { context.push('/index/downloader'); } -} \ No newline at end of file +} diff --git a/lib/ui/nav/nav_state.dart b/lib/ui/nav/nav_state.dart index b7196f1..864bc67 100644 --- a/lib/ui/nav/nav_state.dart +++ b/lib/ui/nav/nav_state.dart @@ -33,8 +33,10 @@ class Nav extends _$Nav { if (!_mounted) return; try { final r = await UDBNavApi.getNavItems(pageNo: pageNo); + if (!_mounted) return; state = state.copyWith(items: r.docs, errorInfo: ""); } catch (e) { + if (!_mounted) return; state = state.copyWith(errorInfo: e.toString()); } } diff --git a/lib/ui/nav/nav_state.g.dart b/lib/ui/nav/nav_state.g.dart index e5b764e..3ab26d9 100644 --- a/lib/ui/nav/nav_state.g.dart +++ b/lib/ui/nav/nav_state.g.dart @@ -40,7 +40,7 @@ final class NavProvider extends $NotifierProvider { } } -String _$navHash() => r'00c4da8fdd37214cda179a81ece3676add7aab53'; +String _$navHash() => r'bd3773505d6ae53f577ac6f3bfe711b320faa524'; abstract class _$Nav extends $Notifier { NavState build(); diff --git a/lib/ui/party_room/party_room_ui.dart b/lib/ui/party_room/party_room_ui.dart index c86f270..a00ee4d 100644 --- a/lib/ui/party_room/party_room_ui.dart +++ b/lib/ui/party_room/party_room_ui.dart @@ -1,41 +1,32 @@ -import 'package:flutter/material.dart'; +import 'package:fluent_ui/fluent_ui.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:starcitizen_doctor/generated/l10n.dart'; -import 'package:url_launcher/url_launcher_string.dart'; +import 'package:starcitizen_doctor/provider/party_room.dart'; +import 'package:starcitizen_doctor/ui/party_room/party_room_ui_model.dart'; +import 'package:starcitizen_doctor/ui/party_room/widgets/party_room_connect_page.dart'; +import 'package:starcitizen_doctor/ui/party_room/widgets/party_room_list_page.dart'; +import 'package:starcitizen_doctor/ui/party_room/widgets/party_room_detail_page.dart'; +import 'package:starcitizen_doctor/ui/party_room/widgets/party_room_register_page.dart'; class PartyRoomUI extends HookConsumerWidget { const PartyRoomUI({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { - return Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - S.current.lobby_online_lobby_coming_soon, - style: const TextStyle(fontSize: 20), - ), - const SizedBox(height: 12), - GestureDetector( - onTap: () { - launchUrlString("https://wj.qq.com/s2/14112124/f4c8/"); - }, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text(S.current.lobby_invitation_to_participate), - Text( - S.current.lobby_survey, - style: const TextStyle( - color: Colors.blue, - ), - ) - ], - ), - ), - ], - ), - ); + final partyRoomState = ref.watch(partyRoomProvider); + ref.watch(partyRoomUIModelProvider.select((_) => null)); + // 根据状态显示不同页面 + if (!partyRoomState.client.isConnected) { + return const PartyRoomConnectPage(); + } + + if (!partyRoomState.auth.isLoggedIn) { + return const PartyRoomRegisterPage(); + } + + if (partyRoomState.room.isInRoom) { + return const PartyRoomDetailPage(); + } + + return const PartyRoomListPage(); } } diff --git a/lib/ui/party_room/party_room_ui_model.dart b/lib/ui/party_room/party_room_ui_model.dart new file mode 100644 index 0000000..d7d72c4 --- /dev/null +++ b/lib/ui/party_room/party_room_ui_model.dart @@ -0,0 +1,262 @@ +import 'dart:async'; + +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; +import 'package:starcitizen_doctor/generated/proto/partroom/partroom.pb.dart'; +import 'package:starcitizen_doctor/provider/party_room.dart'; + +part 'party_room_ui_model.freezed.dart'; + +part 'party_room_ui_model.g.dart'; + +@freezed +sealed class PartyRoomUIState with _$PartyRoomUIState { + const factory PartyRoomUIState({ + @Default(false) bool isConnecting, + @Default(false) bool showRoomList, + @Default([]) List roomListItems, + @Default(1) int currentPage, + @Default(20) int pageSize, + @Default(0) int totalRooms, + String? selectedMainTagId, + String? selectedSubTagId, + @Default('') String searchOwnerName, + @Default(false) bool isLoading, + String? errorMessage, + @Default('') String preRegisterCode, + @Default('') String registerGameUserId, + @Default(false) bool isReconnecting, + @Default(0) int reconnectAttempts, + }) = _PartyRoomUIState; +} + +@riverpod +class PartyRoomUIModel extends _$PartyRoomUIModel { + Timer? _reconnectTimer; + + @override + PartyRoomUIState build() { + state = const PartyRoomUIState(); + ref.listen(partyRoomProvider, (previous, next) { + _handleConnectionStateChange(previous, next); + }); + + connectToServer(); + + // 在 dispose 时清理定时器 + ref.onDispose(() { + _reconnectTimer?.cancel(); + }); + + return state; + } + + /// 处理连接状态变化 + void _handleConnectionStateChange(PartyRoomFullState? previous, PartyRoomFullState next) { + // 检测断线:之前已连接但现在未连接 + if (previous != null && previous.client.isConnected && !next.client.isConnected && !state.isReconnecting) { + dPrint('[PartyRoomUI] Connection lost, starting reconnection...'); + _startReconnection(); + } + } + + /// 开始断线重连 + Future _startReconnection() async { + if (state.isReconnecting) return; + + state = state.copyWith(isReconnecting: true, reconnectAttempts: 0); + + try { + // 尝试重新连接和登录 + await _attemptReconnect(); + } catch (e) { + dPrint('[PartyRoomUI] Reconnection failed: $e'); + state = state.copyWith(isReconnecting: false, errorMessage: '重连失败: $e'); + } + } + + /// 尝试重新连接 + Future _attemptReconnect() async { + const maxAttempts = 5; + const baseDelay = Duration(seconds: 2); + + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + state = state.copyWith(reconnectAttempts: attempt); + dPrint('[PartyRoomUI] Reconnection attempt $attempt/$maxAttempts'); + + try { + final partyRoom = ref.read(partyRoomProvider.notifier); + + // 重新连接 + await partyRoom.connect(); + + // 重新登录 + await partyRoom.login(); + + // 重新加载标签和房间列表 + await partyRoom.loadTags(); + if (state.showRoomList) { + await loadRoomList(); + } + + // 重连成功 + state = state.copyWith(isReconnecting: false, reconnectAttempts: 0, errorMessage: null); + + dPrint('[PartyRoomUI] Reconnection successful'); + return; + } catch (e) { + dPrint('[PartyRoomUI] Reconnection attempt $attempt failed: $e'); + + if (attempt < maxAttempts) { + // 使用指数退避策略 + final delay = baseDelay * (1 << (attempt - 1)); + dPrint('[PartyRoomUI] Waiting ${delay.inSeconds}s before next attempt...'); + await Future.delayed(delay); + } + } + } + + // 所有重连尝试都失败 + state = state.copyWith(isReconnecting: false, errorMessage: '重连失败,已尝试 $maxAttempts 次'); + throw Exception('Max reconnection attempts reached'); + } + + /// 连接到服务器 + Future connectToServer() async { + state = state.copyWith(isConnecting: true, errorMessage: null); + await Future.delayed(Duration(seconds: 1)); + try { + final partyRoom = ref.read(partyRoomProvider.notifier); + await partyRoom.connect(); + + // 尝试登录 + try { + await partyRoom.login(); + // 登录成功,加载标签和房间列表 + await partyRoom.loadTags(); + await loadRoomList(); + state = state.copyWith(showRoomList: true); + } catch (e) { + // 未注册,保持在连接状态 + dPrint('[PartyRoomUI] Login failed, need register: $e'); + } + + state = state.copyWith(isConnecting: false); + } catch (e) { + state = state.copyWith(isConnecting: false, errorMessage: '连接失败: $e'); + rethrow; + } + } + + /// 请求注册验证码 + Future requestPreRegister(String gameUserId) async { + state = state.copyWith(isLoading: true, errorMessage: null, registerGameUserId: gameUserId); + + try { + final partyRoom = ref.read(partyRoomProvider.notifier); + final response = await partyRoom.preRegister(gameUserId); + + state = state.copyWith(isLoading: false, preRegisterCode: response.verificationCode); + } catch (e) { + state = state.copyWith(isLoading: false, errorMessage: '获取验证码失败: $e'); + rethrow; + } + } + + /// 完成注册 + Future completeRegister() async { + if (state.registerGameUserId.isEmpty) { + throw Exception('游戏ID不能为空'); + } + + state = state.copyWith(isLoading: true, errorMessage: null); + + try { + final partyRoom = ref.read(partyRoomProvider.notifier); + await partyRoom.register(state.registerGameUserId); + + // 注册成功,登录并加载数据 + await partyRoom.login(); + await partyRoom.loadTags(); + await loadRoomList(); + + state = state.copyWith(isLoading: false, showRoomList: true, preRegisterCode: '', registerGameUserId: ''); + } catch (e) { + state = state.copyWith(isLoading: false, errorMessage: '注册失败: $e'); + rethrow; + } + } + + /// 加载房间列表 + Future loadRoomList({ + String? mainTagId, + String? subTagId, + String? searchName, + int? page, + bool append = false, + }) async { + try { + state = state.copyWith(isLoading: true); + + // 更新筛选条件 + if (mainTagId != null) state = state.copyWith(selectedMainTagId: mainTagId); + if (subTagId != null) state = state.copyWith(selectedSubTagId: subTagId); + if (searchName != null) state = state.copyWith(searchOwnerName: searchName); + if (page != null) state = state.copyWith(currentPage: page); + + final partyRoom = ref.read(partyRoomProvider.notifier); + final response = await partyRoom.getRoomList( + mainTagId: state.selectedMainTagId, + subTagId: state.selectedSubTagId, + searchOwnerName: state.searchOwnerName, + page: state.currentPage, + pageSize: state.pageSize, + ); + + // 追加模式:合并数据,否则替换数据 + final newRooms = append ? [...state.roomListItems, ...response.rooms] : response.rooms; + + state = state.copyWith(isLoading: false, roomListItems: newRooms, totalRooms: response.total, errorMessage: null); + } catch (e) { + state = state.copyWith(isLoading: false, errorMessage: '加载房间列表失败: $e'); + } + } + + /// 加载更多房间(无限滑动) + Future loadMoreRooms() async { + final totalPages = (state.totalRooms / state.pageSize).ceil(); + if (state.currentPage >= totalPages || state.isLoading) return; + + await loadRoomList(page: state.currentPage + 1, append: true); + } + + /// 刷新房间列表 + Future refreshRoomList() async { + state = state.copyWith(currentPage: 1, roomListItems: []); + await loadRoomList(page: 1); + } + + /// 清除错误消息 + void clearError() { + state = state.copyWith(errorMessage: null); + } + + /// 断开连接 + Future disconnect() async { + final partyRoom = ref.read(partyRoomProvider.notifier); + await partyRoom.disconnect(); + + state = const PartyRoomUIState(); + } + + void setSelectedMainTagId(String? value) { + state = state.copyWith(selectedMainTagId: value); + refreshRoomList(); + } + + void dismissRoom() { + ref.read(partyRoomProvider.notifier).dismissRoom(); + ref.read(partyRoomProvider.notifier).loadTags(); + } +} diff --git a/lib/ui/party_room/party_room_ui_model.freezed.dart b/lib/ui/party_room/party_room_ui_model.freezed.dart new file mode 100644 index 0000000..99fd3ba --- /dev/null +++ b/lib/ui/party_room/party_room_ui_model.freezed.dart @@ -0,0 +1,313 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'party_room_ui_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; +/// @nodoc +mixin _$PartyRoomUIState { + + bool get isConnecting; bool get showRoomList; List get roomListItems; int get currentPage; int get pageSize; int get totalRooms; String? get selectedMainTagId; String? get selectedSubTagId; String get searchOwnerName; bool get isLoading; String? get errorMessage; String get preRegisterCode; String get registerGameUserId; bool get isReconnecting; int get reconnectAttempts; +/// Create a copy of PartyRoomUIState +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$PartyRoomUIStateCopyWith get copyWith => _$PartyRoomUIStateCopyWithImpl(this as PartyRoomUIState, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is PartyRoomUIState&&(identical(other.isConnecting, isConnecting) || other.isConnecting == isConnecting)&&(identical(other.showRoomList, showRoomList) || other.showRoomList == showRoomList)&&const DeepCollectionEquality().equals(other.roomListItems, roomListItems)&&(identical(other.currentPage, currentPage) || other.currentPage == currentPage)&&(identical(other.pageSize, pageSize) || other.pageSize == pageSize)&&(identical(other.totalRooms, totalRooms) || other.totalRooms == totalRooms)&&(identical(other.selectedMainTagId, selectedMainTagId) || other.selectedMainTagId == selectedMainTagId)&&(identical(other.selectedSubTagId, selectedSubTagId) || other.selectedSubTagId == selectedSubTagId)&&(identical(other.searchOwnerName, searchOwnerName) || other.searchOwnerName == searchOwnerName)&&(identical(other.isLoading, isLoading) || other.isLoading == isLoading)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)&&(identical(other.preRegisterCode, preRegisterCode) || other.preRegisterCode == preRegisterCode)&&(identical(other.registerGameUserId, registerGameUserId) || other.registerGameUserId == registerGameUserId)&&(identical(other.isReconnecting, isReconnecting) || other.isReconnecting == isReconnecting)&&(identical(other.reconnectAttempts, reconnectAttempts) || other.reconnectAttempts == reconnectAttempts)); +} + + +@override +int get hashCode => Object.hash(runtimeType,isConnecting,showRoomList,const DeepCollectionEquality().hash(roomListItems),currentPage,pageSize,totalRooms,selectedMainTagId,selectedSubTagId,searchOwnerName,isLoading,errorMessage,preRegisterCode,registerGameUserId,isReconnecting,reconnectAttempts); + +@override +String toString() { + return 'PartyRoomUIState(isConnecting: $isConnecting, showRoomList: $showRoomList, roomListItems: $roomListItems, currentPage: $currentPage, pageSize: $pageSize, totalRooms: $totalRooms, selectedMainTagId: $selectedMainTagId, selectedSubTagId: $selectedSubTagId, searchOwnerName: $searchOwnerName, isLoading: $isLoading, errorMessage: $errorMessage, preRegisterCode: $preRegisterCode, registerGameUserId: $registerGameUserId, isReconnecting: $isReconnecting, reconnectAttempts: $reconnectAttempts)'; +} + + +} + +/// @nodoc +abstract mixin class $PartyRoomUIStateCopyWith<$Res> { + factory $PartyRoomUIStateCopyWith(PartyRoomUIState value, $Res Function(PartyRoomUIState) _then) = _$PartyRoomUIStateCopyWithImpl; +@useResult +$Res call({ + bool isConnecting, bool showRoomList, List roomListItems, int currentPage, int pageSize, int totalRooms, String? selectedMainTagId, String? selectedSubTagId, String searchOwnerName, bool isLoading, String? errorMessage, String preRegisterCode, String registerGameUserId, bool isReconnecting, int reconnectAttempts +}); + + + + +} +/// @nodoc +class _$PartyRoomUIStateCopyWithImpl<$Res> + implements $PartyRoomUIStateCopyWith<$Res> { + _$PartyRoomUIStateCopyWithImpl(this._self, this._then); + + final PartyRoomUIState _self; + final $Res Function(PartyRoomUIState) _then; + +/// Create a copy of PartyRoomUIState +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? isConnecting = null,Object? showRoomList = null,Object? roomListItems = null,Object? currentPage = null,Object? pageSize = null,Object? totalRooms = null,Object? selectedMainTagId = freezed,Object? selectedSubTagId = freezed,Object? searchOwnerName = null,Object? isLoading = null,Object? errorMessage = freezed,Object? preRegisterCode = null,Object? registerGameUserId = null,Object? isReconnecting = null,Object? reconnectAttempts = null,}) { + return _then(_self.copyWith( +isConnecting: null == isConnecting ? _self.isConnecting : isConnecting // ignore: cast_nullable_to_non_nullable +as bool,showRoomList: null == showRoomList ? _self.showRoomList : showRoomList // ignore: cast_nullable_to_non_nullable +as bool,roomListItems: null == roomListItems ? _self.roomListItems : roomListItems // ignore: cast_nullable_to_non_nullable +as List,currentPage: null == currentPage ? _self.currentPage : currentPage // ignore: cast_nullable_to_non_nullable +as int,pageSize: null == pageSize ? _self.pageSize : pageSize // ignore: cast_nullable_to_non_nullable +as int,totalRooms: null == totalRooms ? _self.totalRooms : totalRooms // ignore: cast_nullable_to_non_nullable +as int,selectedMainTagId: freezed == selectedMainTagId ? _self.selectedMainTagId : selectedMainTagId // ignore: cast_nullable_to_non_nullable +as String?,selectedSubTagId: freezed == selectedSubTagId ? _self.selectedSubTagId : selectedSubTagId // ignore: cast_nullable_to_non_nullable +as String?,searchOwnerName: null == searchOwnerName ? _self.searchOwnerName : searchOwnerName // ignore: cast_nullable_to_non_nullable +as String,isLoading: null == isLoading ? _self.isLoading : isLoading // ignore: cast_nullable_to_non_nullable +as bool,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable +as String?,preRegisterCode: null == preRegisterCode ? _self.preRegisterCode : preRegisterCode // ignore: cast_nullable_to_non_nullable +as String,registerGameUserId: null == registerGameUserId ? _self.registerGameUserId : registerGameUserId // ignore: cast_nullable_to_non_nullable +as String,isReconnecting: null == isReconnecting ? _self.isReconnecting : isReconnecting // ignore: cast_nullable_to_non_nullable +as bool,reconnectAttempts: null == reconnectAttempts ? _self.reconnectAttempts : reconnectAttempts // ignore: cast_nullable_to_non_nullable +as int, + )); +} + +} + + +/// Adds pattern-matching-related methods to [PartyRoomUIState]. +extension PartyRoomUIStatePatterns on PartyRoomUIState { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _PartyRoomUIState value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _PartyRoomUIState() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _PartyRoomUIState value) $default,){ +final _that = this; +switch (_that) { +case _PartyRoomUIState(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _PartyRoomUIState value)? $default,){ +final _that = this; +switch (_that) { +case _PartyRoomUIState() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( bool isConnecting, bool showRoomList, List roomListItems, int currentPage, int pageSize, int totalRooms, String? selectedMainTagId, String? selectedSubTagId, String searchOwnerName, bool isLoading, String? errorMessage, String preRegisterCode, String registerGameUserId, bool isReconnecting, int reconnectAttempts)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _PartyRoomUIState() when $default != null: +return $default(_that.isConnecting,_that.showRoomList,_that.roomListItems,_that.currentPage,_that.pageSize,_that.totalRooms,_that.selectedMainTagId,_that.selectedSubTagId,_that.searchOwnerName,_that.isLoading,_that.errorMessage,_that.preRegisterCode,_that.registerGameUserId,_that.isReconnecting,_that.reconnectAttempts);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( bool isConnecting, bool showRoomList, List roomListItems, int currentPage, int pageSize, int totalRooms, String? selectedMainTagId, String? selectedSubTagId, String searchOwnerName, bool isLoading, String? errorMessage, String preRegisterCode, String registerGameUserId, bool isReconnecting, int reconnectAttempts) $default,) {final _that = this; +switch (_that) { +case _PartyRoomUIState(): +return $default(_that.isConnecting,_that.showRoomList,_that.roomListItems,_that.currentPage,_that.pageSize,_that.totalRooms,_that.selectedMainTagId,_that.selectedSubTagId,_that.searchOwnerName,_that.isLoading,_that.errorMessage,_that.preRegisterCode,_that.registerGameUserId,_that.isReconnecting,_that.reconnectAttempts);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( bool isConnecting, bool showRoomList, List roomListItems, int currentPage, int pageSize, int totalRooms, String? selectedMainTagId, String? selectedSubTagId, String searchOwnerName, bool isLoading, String? errorMessage, String preRegisterCode, String registerGameUserId, bool isReconnecting, int reconnectAttempts)? $default,) {final _that = this; +switch (_that) { +case _PartyRoomUIState() when $default != null: +return $default(_that.isConnecting,_that.showRoomList,_that.roomListItems,_that.currentPage,_that.pageSize,_that.totalRooms,_that.selectedMainTagId,_that.selectedSubTagId,_that.searchOwnerName,_that.isLoading,_that.errorMessage,_that.preRegisterCode,_that.registerGameUserId,_that.isReconnecting,_that.reconnectAttempts);case _: + return null; + +} +} + +} + +/// @nodoc + + +class _PartyRoomUIState implements PartyRoomUIState { + const _PartyRoomUIState({this.isConnecting = false, this.showRoomList = false, final List roomListItems = const [], this.currentPage = 1, this.pageSize = 20, this.totalRooms = 0, this.selectedMainTagId, this.selectedSubTagId, this.searchOwnerName = '', this.isLoading = false, this.errorMessage, this.preRegisterCode = '', this.registerGameUserId = '', this.isReconnecting = false, this.reconnectAttempts = 0}): _roomListItems = roomListItems; + + +@override@JsonKey() final bool isConnecting; +@override@JsonKey() final bool showRoomList; + final List _roomListItems; +@override@JsonKey() List get roomListItems { + if (_roomListItems is EqualUnmodifiableListView) return _roomListItems; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_roomListItems); +} + +@override@JsonKey() final int currentPage; +@override@JsonKey() final int pageSize; +@override@JsonKey() final int totalRooms; +@override final String? selectedMainTagId; +@override final String? selectedSubTagId; +@override@JsonKey() final String searchOwnerName; +@override@JsonKey() final bool isLoading; +@override final String? errorMessage; +@override@JsonKey() final String preRegisterCode; +@override@JsonKey() final String registerGameUserId; +@override@JsonKey() final bool isReconnecting; +@override@JsonKey() final int reconnectAttempts; + +/// Create a copy of PartyRoomUIState +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$PartyRoomUIStateCopyWith<_PartyRoomUIState> get copyWith => __$PartyRoomUIStateCopyWithImpl<_PartyRoomUIState>(this, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _PartyRoomUIState&&(identical(other.isConnecting, isConnecting) || other.isConnecting == isConnecting)&&(identical(other.showRoomList, showRoomList) || other.showRoomList == showRoomList)&&const DeepCollectionEquality().equals(other._roomListItems, _roomListItems)&&(identical(other.currentPage, currentPage) || other.currentPage == currentPage)&&(identical(other.pageSize, pageSize) || other.pageSize == pageSize)&&(identical(other.totalRooms, totalRooms) || other.totalRooms == totalRooms)&&(identical(other.selectedMainTagId, selectedMainTagId) || other.selectedMainTagId == selectedMainTagId)&&(identical(other.selectedSubTagId, selectedSubTagId) || other.selectedSubTagId == selectedSubTagId)&&(identical(other.searchOwnerName, searchOwnerName) || other.searchOwnerName == searchOwnerName)&&(identical(other.isLoading, isLoading) || other.isLoading == isLoading)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)&&(identical(other.preRegisterCode, preRegisterCode) || other.preRegisterCode == preRegisterCode)&&(identical(other.registerGameUserId, registerGameUserId) || other.registerGameUserId == registerGameUserId)&&(identical(other.isReconnecting, isReconnecting) || other.isReconnecting == isReconnecting)&&(identical(other.reconnectAttempts, reconnectAttempts) || other.reconnectAttempts == reconnectAttempts)); +} + + +@override +int get hashCode => Object.hash(runtimeType,isConnecting,showRoomList,const DeepCollectionEquality().hash(_roomListItems),currentPage,pageSize,totalRooms,selectedMainTagId,selectedSubTagId,searchOwnerName,isLoading,errorMessage,preRegisterCode,registerGameUserId,isReconnecting,reconnectAttempts); + +@override +String toString() { + return 'PartyRoomUIState(isConnecting: $isConnecting, showRoomList: $showRoomList, roomListItems: $roomListItems, currentPage: $currentPage, pageSize: $pageSize, totalRooms: $totalRooms, selectedMainTagId: $selectedMainTagId, selectedSubTagId: $selectedSubTagId, searchOwnerName: $searchOwnerName, isLoading: $isLoading, errorMessage: $errorMessage, preRegisterCode: $preRegisterCode, registerGameUserId: $registerGameUserId, isReconnecting: $isReconnecting, reconnectAttempts: $reconnectAttempts)'; +} + + +} + +/// @nodoc +abstract mixin class _$PartyRoomUIStateCopyWith<$Res> implements $PartyRoomUIStateCopyWith<$Res> { + factory _$PartyRoomUIStateCopyWith(_PartyRoomUIState value, $Res Function(_PartyRoomUIState) _then) = __$PartyRoomUIStateCopyWithImpl; +@override @useResult +$Res call({ + bool isConnecting, bool showRoomList, List roomListItems, int currentPage, int pageSize, int totalRooms, String? selectedMainTagId, String? selectedSubTagId, String searchOwnerName, bool isLoading, String? errorMessage, String preRegisterCode, String registerGameUserId, bool isReconnecting, int reconnectAttempts +}); + + + + +} +/// @nodoc +class __$PartyRoomUIStateCopyWithImpl<$Res> + implements _$PartyRoomUIStateCopyWith<$Res> { + __$PartyRoomUIStateCopyWithImpl(this._self, this._then); + + final _PartyRoomUIState _self; + final $Res Function(_PartyRoomUIState) _then; + +/// Create a copy of PartyRoomUIState +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? isConnecting = null,Object? showRoomList = null,Object? roomListItems = null,Object? currentPage = null,Object? pageSize = null,Object? totalRooms = null,Object? selectedMainTagId = freezed,Object? selectedSubTagId = freezed,Object? searchOwnerName = null,Object? isLoading = null,Object? errorMessage = freezed,Object? preRegisterCode = null,Object? registerGameUserId = null,Object? isReconnecting = null,Object? reconnectAttempts = null,}) { + return _then(_PartyRoomUIState( +isConnecting: null == isConnecting ? _self.isConnecting : isConnecting // ignore: cast_nullable_to_non_nullable +as bool,showRoomList: null == showRoomList ? _self.showRoomList : showRoomList // ignore: cast_nullable_to_non_nullable +as bool,roomListItems: null == roomListItems ? _self._roomListItems : roomListItems // ignore: cast_nullable_to_non_nullable +as List,currentPage: null == currentPage ? _self.currentPage : currentPage // ignore: cast_nullable_to_non_nullable +as int,pageSize: null == pageSize ? _self.pageSize : pageSize // ignore: cast_nullable_to_non_nullable +as int,totalRooms: null == totalRooms ? _self.totalRooms : totalRooms // ignore: cast_nullable_to_non_nullable +as int,selectedMainTagId: freezed == selectedMainTagId ? _self.selectedMainTagId : selectedMainTagId // ignore: cast_nullable_to_non_nullable +as String?,selectedSubTagId: freezed == selectedSubTagId ? _self.selectedSubTagId : selectedSubTagId // ignore: cast_nullable_to_non_nullable +as String?,searchOwnerName: null == searchOwnerName ? _self.searchOwnerName : searchOwnerName // ignore: cast_nullable_to_non_nullable +as String,isLoading: null == isLoading ? _self.isLoading : isLoading // ignore: cast_nullable_to_non_nullable +as bool,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable +as String?,preRegisterCode: null == preRegisterCode ? _self.preRegisterCode : preRegisterCode // ignore: cast_nullable_to_non_nullable +as String,registerGameUserId: null == registerGameUserId ? _self.registerGameUserId : registerGameUserId // ignore: cast_nullable_to_non_nullable +as String,isReconnecting: null == isReconnecting ? _self.isReconnecting : isReconnecting // ignore: cast_nullable_to_non_nullable +as bool,reconnectAttempts: null == reconnectAttempts ? _self.reconnectAttempts : reconnectAttempts // ignore: cast_nullable_to_non_nullable +as int, + )); +} + + +} + +// dart format on diff --git a/lib/ui/party_room/party_room_ui_model.g.dart b/lib/ui/party_room/party_room_ui_model.g.dart new file mode 100644 index 0000000..4901ef5 --- /dev/null +++ b/lib/ui/party_room/party_room_ui_model.g.dart @@ -0,0 +1,63 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'party_room_ui_model.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning + +@ProviderFor(PartyRoomUIModel) +const partyRoomUIModelProvider = PartyRoomUIModelProvider._(); + +final class PartyRoomUIModelProvider + extends $NotifierProvider { + const PartyRoomUIModelProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'partyRoomUIModelProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$partyRoomUIModelHash(); + + @$internal + @override + PartyRoomUIModel create() => PartyRoomUIModel(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(PartyRoomUIState value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$partyRoomUIModelHash() => r'262069d02bbc7d76fe6797c6c744bdf848122492'; + +abstract class _$PartyRoomUIModel extends $Notifier { + PartyRoomUIState build(); + @$mustCallSuper + @override + void runBuild() { + final created = build(); + final ref = this.ref as $Ref; + final element = + ref.element + as $ClassProviderElement< + AnyNotifier, + PartyRoomUIState, + Object?, + Object? + >; + element.handleValue(ref, created); + } +} diff --git a/lib/ui/party_room/widgets/create_room_dialog.dart b/lib/ui/party_room/widgets/create_room_dialog.dart new file mode 100644 index 0000000..7fbc5ef --- /dev/null +++ b/lib/ui/party_room/widgets/create_room_dialog.dart @@ -0,0 +1,190 @@ +import 'package:fluent_ui/fluent_ui.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:starcitizen_doctor/provider/party_room.dart'; + +/// 创建房间对话框 +class CreateRoomDialog extends HookConsumerWidget { + const CreateRoomDialog({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final partyRoomState = ref.watch(partyRoomProvider); + final partyRoom = ref.read(partyRoomProvider.notifier); + + final selectedMainTag = useState(null); + final selectedSubTag = useState(null); + final targetMembersController = useTextEditingController(text: '6'); + final hasPassword = useState(false); + final passwordController = useTextEditingController(); + final socialLinksController = useTextEditingController(); + final isCreating = useState(false); + + return ContentDialog( + constraints: const BoxConstraints(maxWidth: 500), + title: const Text('创建房间'), + content: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + InfoLabel( + label: '房间类型', + child: ComboBox( + placeholder: const Text('选择主标签'), + value: selectedMainTag.value, + items: partyRoomState.room.tags.map((tag) { + return ComboBoxItem(value: tag.id, child: Text(tag.name)); + }).toList(), + onChanged: (value) { + selectedMainTag.value = value; + selectedSubTag.value = null; + }, + ), + ), + const SizedBox(height: 12), + + if (selectedMainTag.value != null) ...[ + InfoLabel( + label: '子标签 (可选)', + child: ComboBox( + placeholder: const Text('选择子标签'), + value: selectedSubTag.value, + items: [ + const ComboBoxItem(value: null, child: Text('无')), + ...partyRoomState.room.tags.firstWhere((tag) => tag.id == selectedMainTag.value).subTags.map(( + subTag, + ) { + return ComboBoxItem(value: subTag.id, child: Text(subTag.name)); + }), + ], + onChanged: (value) { + selectedSubTag.value = value; + }, + ), + ), + const SizedBox(height: 12), + ], + + InfoLabel( + label: '目标人数 (2-600)', + child: TextBox( + controller: targetMembersController, + placeholder: '输入目标人数', + keyboardType: TextInputType.number, + ), + ), + const SizedBox(height: 12), + + Row( + children: [ + Checkbox( + checked: hasPassword.value, + onChanged: (value) { + hasPassword.value = value ?? false; + }, + content: const Text('设置密码'), + ), + ], + ), + if (hasPassword.value) ...[ + const SizedBox(height: 8), + InfoLabel( + label: '房间密码', + child: TextBox(controller: passwordController, placeholder: '输入密码', obscureText: true), + ), + ], + const SizedBox(height: 12), + + InfoLabel( + label: '社交链接 (可选)', + child: TextBox(controller: socialLinksController, placeholder: 'https://discord.gg/xxxxx', maxLines: 1), + ), + ], + ), + ), + actions: [ + FilledButton( + onPressed: isCreating.value + ? null + : () async { + final mainTagId = selectedMainTag.value; + if (mainTagId == null || mainTagId.isEmpty) { + await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('提示'), + content: const Text('请选择房间类型'), + actions: [FilledButton(child: const Text('确定'), onPressed: () => Navigator.pop(context))], + ), + ); + return; + } + + final targetMembers = int.tryParse(targetMembersController.text); + if (targetMembers == null || targetMembers < 2 || targetMembers > 600) { + await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('提示'), + content: const Text('目标人数必须在 2-600 之间'), + actions: [FilledButton(child: const Text('确定'), onPressed: () => Navigator.pop(context))], + ), + ); + return; + } + + if (hasPassword.value && passwordController.text.trim().isEmpty) { + await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('提示'), + content: const Text('请输入密码'), + actions: [FilledButton(child: const Text('确定'), onPressed: () => Navigator.pop(context))], + ), + ); + return; + } + + final socialLinks = socialLinksController.text + .split('\n') + .where((link) => link.trim().isNotEmpty && link.trim().startsWith('http')) + .toList(); + + isCreating.value = true; + try { + await partyRoom.createRoom( + mainTagId: mainTagId, + subTagId: selectedSubTag.value, + targetMembers: targetMembers, + hasPassword: hasPassword.value, + password: hasPassword.value ? passwordController.text : null, + socialLinks: socialLinks.isEmpty ? null : socialLinks, + ); + + if (context.mounted) { + Navigator.pop(context); + } + } catch (e) { + isCreating.value = false; + if (context.mounted) { + await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('创建失败'), + content: Text(e.toString()), + actions: [FilledButton(child: const Text('确定'), onPressed: () => Navigator.pop(context))], + ), + ); + } + } + }, + child: isCreating.value + ? const SizedBox(width: 16, height: 16, child: ProgressRing(strokeWidth: 2)) + : const Text('创建'), + ), + Button(onPressed: isCreating.value ? null : () => Navigator.pop(context), child: const Text('取消')), + ], + ); + } +} diff --git a/lib/ui/party_room/widgets/party_room_connect_page.dart b/lib/ui/party_room/widgets/party_room_connect_page.dart new file mode 100644 index 0000000..077d79a --- /dev/null +++ b/lib/ui/party_room/widgets/party_room_connect_page.dart @@ -0,0 +1,98 @@ +import 'package:fluent_ui/fluent_ui.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:starcitizen_doctor/ui/party_room/party_room_ui_model.dart'; + +/// 连接服务器页面 +class PartyRoomConnectPage extends HookConsumerWidget { + const PartyRoomConnectPage({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final uiModel = ref.read(partyRoomUIModelProvider.notifier); + final uiState = ref.watch(partyRoomUIModelProvider); + + return ScaffoldPage( + padding: EdgeInsets.zero, + content: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [Colors.black.withValues(alpha: 0.3), Colors.black.withValues(alpha: 0.6)], + ), + ), + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Logo 或图标 + Container( + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: const Color(0xFF1E3A5F).withValues(alpha: 0.6), + shape: BoxShape.circle, + boxShadow: [ + BoxShadow(color: const Color(0xFF4A9EFF).withValues(alpha: 0.3), blurRadius: 30, spreadRadius: 5), + ], + ), + child: const Icon(FluentIcons.group, size: 64, color: Color(0xFF4A9EFF)), + ), + const SizedBox(height: 32), + + // 标题 + const Text( + '组队大厅', + style: TextStyle(fontSize: 32, fontWeight: FontWeight.bold, color: Color(0xFFE0E0E0), letterSpacing: 2), + ), + const SizedBox(height: 12), + + // 副标题 + Text('正在连接服务器...', style: TextStyle(fontSize: 14, color: Colors.white.withValues(alpha: 0.7))), + const SizedBox(height: 32), + + // 加载动画 + const SizedBox(width: 40, height: 40, child: ProgressRing(strokeWidth: 3)), + const SizedBox(height: 32), + + if (uiState.errorMessage != null) ...[ + Container( + constraints: const BoxConstraints(maxWidth: 400), + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: const Color(0xFF3D1E1E).withValues(alpha: 0.8), + borderRadius: BorderRadius.circular(8), + border: Border.all(color: const Color(0xFFFF6B6B), width: 1), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Row( + children: [ + Icon(FluentIcons.error_badge, color: Color(0xFFFF6B6B), size: 16), + SizedBox(width: 8), + Text( + '连接失败', + style: TextStyle(color: Color(0xFFFF6B6B), fontWeight: FontWeight.bold), + ), + ], + ), + const SizedBox(height: 8), + Text(uiState.errorMessage!, style: const TextStyle(color: Color(0xFFE0E0E0))), + const SizedBox(height: 12), + FilledButton( + onPressed: () async { + await uiModel.connectToServer(); + }, + child: const Text('重试'), + ), + ], + ), + ), + ], + ], + ), + ), + ), + ); + } +} diff --git a/lib/ui/party_room/widgets/party_room_detail_page.dart b/lib/ui/party_room/widgets/party_room_detail_page.dart new file mode 100644 index 0000000..14927e2 --- /dev/null +++ b/lib/ui/party_room/widgets/party_room_detail_page.dart @@ -0,0 +1,689 @@ +import 'package:fluent_ui/fluent_ui.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:starcitizen_doctor/common/conf/url_conf.dart'; +import 'package:starcitizen_doctor/generated/proto/partroom/partroom.pb.dart' as partroom; +import 'package:starcitizen_doctor/generated/proto/partroom/partroom.pb.dart'; +import 'package:starcitizen_doctor/provider/party_room.dart'; +import 'package:starcitizen_doctor/ui/party_room/party_room_ui_model.dart'; +import 'package:starcitizen_doctor/widgets/src/cache_image.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + +/// 房间详情页面 (Discord 样式) +class PartyRoomDetailPage extends ConsumerStatefulWidget { + const PartyRoomDetailPage({super.key}); + + @override + ConsumerState createState() => _PartyRoomDetailPageState(); +} + +class _PartyRoomDetailPageState extends ConsumerState { + final ScrollController _scrollController = ScrollController(); + int _lastEventCount = 0; + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } + + void _scrollToBottom() { + if (_scrollController.hasClients) { + Future.delayed(const Duration(milliseconds: 100), () { + if (_scrollController.hasClients) { + _scrollController.animateTo( + _scrollController.position.maxScrollExtent, + duration: const Duration(milliseconds: 300), + curve: Curves.easeOut, + ); + } + }); + } + } + + @override + Widget build(BuildContext context) { + final partyRoomState = ref.watch(partyRoomProvider); + final partyRoom = ref.read(partyRoomProvider.notifier); + final room = partyRoomState.room.currentRoom; + final members = partyRoomState.room.members; + final isOwner = partyRoomState.room.isOwner; + final events = partyRoomState.room.recentEvents; + + // 检测消息数量变化,触发滚动 + if (events.length != _lastEventCount) { + _lastEventCount = events.length; + if (events.isNotEmpty) { + _scrollToBottom(); + } + } + + return ScaffoldPage( + padding: EdgeInsets.zero, + content: Row( + children: [ + // 左侧成员列表 (类似 Discord 侧边栏) + Container( + width: 240, + decoration: BoxDecoration( + color: Color(0xFF232428).withValues(alpha: .3), + border: Border(right: BorderSide(color: Colors.black.withValues(alpha: 0.3), width: 1)), + ), + child: Column( + children: [ + // 房间信息头部 + _buildRoomHeader(context, room, members, isOwner, partyRoom), + const Divider( + style: DividerThemeData(thickness: 1, decoration: BoxDecoration(color: Color(0xFF1E1F22))), + ), + // 成员列表 + Expanded(child: _buildMembersSidebar(context, ref, members, isOwner, partyRoom)), + ], + ), + ), + // 右侧消息区域 + Expanded( + child: Column( + children: [ + // 消息列表 + Expanded(child: _buildMessageList(context, events, _scrollController, ref)), + // 信号发送按钮 + _buildSignalSender(context, ref, partyRoom, room), + ], + ), + ), + ], + ), + ); + } + + // 房间信息头部 + Widget _buildRoomHeader(BuildContext context, dynamic room, List members, bool isOwner, PartyRoom partyRoom) { + return Container( + padding: const EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + const Icon(FluentIcons.room, size: 16, color: Color(0xFFB5BAC1)), + const SizedBox(width: 8), + Expanded( + child: Text( + room?.ownerGameId ?? '房间', + style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold, color: Colors.white), + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(FluentIcons.group, size: 12, color: Color(0xFF80848E)), + const SizedBox(width: 4), + Text( + '${members.length}/${room?.targetMembers ?? 0} 成员', + style: const TextStyle(fontSize: 11, color: Color(0xFF80848E)), + ), + ], + ), + if (isOwner) ...[ + const SizedBox(height: 8), + SizedBox( + width: double.infinity, + child: Button( + onPressed: () async { + final confirmed = await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('确认解散'), + content: const Text('确定要解散房间吗?所有成员将被移出。'), + actions: [ + Button(child: const Text('取消'), onPressed: () => Navigator.pop(context, false)), + FilledButton( + style: ButtonStyle(backgroundColor: WidgetStateProperty.all(const Color(0xFFDA373C))), + child: const Text('解散', style: TextStyle(color: Colors.white)), + onPressed: () => Navigator.pop(context, true), + ), + ], + ), + ); + if (confirmed == true) { + ref.read(partyRoomUIModelProvider.notifier).dismissRoom(); + } + }, + style: ButtonStyle( + backgroundColor: WidgetStateProperty.resolveWith((state) { + if (state.isHovered || state.isPressed) { + return const Color(0xFFB3261E); + } + return const Color(0xFFDA373C); + }), + ), + child: const Text('解散房间', style: TextStyle(color: Colors.white)), + ), + ), + ] else ...[ + const SizedBox(height: 8), + SizedBox( + width: double.infinity, + child: Button( + onPressed: () async { + await partyRoom.leaveRoom(); + }, + style: ButtonStyle(backgroundColor: WidgetStateProperty.all(const Color(0xFF404249))), + child: const Text('离开房间', style: TextStyle(color: Color(0xFFB5BAC1))), + ), + ), + ], + ], + ), + ); + } + + IconData _getSocialIcon(String link) { + if (link.contains('qq.com')) return FontAwesomeIcons.qq; + if (link.contains('discord')) return FontAwesomeIcons.discord; + if (link.contains('kook')) return FluentIcons.chat; + return FluentIcons.link; + } + + String _getSocialName(String link) { + if (link.contains('discord')) return 'Discord'; + if (link.contains('kook')) return 'KOOK'; + if (link.contains('qq')) return 'QQ'; + return '链接'; + } + + // 成员侧边栏 + Widget _buildMembersSidebar(BuildContext context, WidgetRef ref, List members, bool isOwner, PartyRoom partyRoom) { + if (members.isEmpty) { + return Center( + child: Text('暂无成员', style: TextStyle(color: Colors.white.withValues(alpha: 0.5), fontSize: 12)), + ); + } + + return ListView.builder( + padding: const EdgeInsets.symmetric(vertical: 8), + itemCount: members.length, + itemBuilder: (context, index) { + final member = members[index]; + return _buildMemberItem(context, ref, member, isOwner, partyRoom); + }, + ); + } + + Widget _buildMemberItem(BuildContext context, WidgetRef ref, RoomMember member, bool isOwner, PartyRoom partyRoom) { + final avatarUrl = member.avatarUrl.isNotEmpty ? '${URLConf.rsiAvatarBaseUrl}${member.avatarUrl}' : null; + + return Container( + margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 1), + child: HoverButton( + onPressed: isOwner && !member.isOwner ? () => _showMemberContextMenu(context, member, partyRoom) : null, + builder: (context, states) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: states.isHovered ? const Color(0xFF404249) : Colors.transparent, + borderRadius: BorderRadius.circular(4), + ), + child: Row( + children: [ + // 头像 + makeUserAvatar(member.handleName, avatarUrl: avatarUrl, size: 32), + const SizedBox(width: 8), + // 名称和状态 + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Flexible( + child: Text( + member.handleName.isNotEmpty ? member.handleName : member.gameUserId, + style: TextStyle( + fontSize: 13, + color: member.isOwner ? const Color(0xFFFAA81A) : const Color(0xFFDBDEE1), + fontWeight: member.isOwner ? FontWeight.bold : FontWeight.normal, + ), + overflow: TextOverflow.ellipsis, + ), + ), + if (member.isOwner) ...[ + const SizedBox(width: 4), + const Icon(FluentIcons.crown, size: 10, color: Color(0xFFFAA81A)), + ], + ], + ), + if (member.status.currentLocation.isNotEmpty) + Text( + member.status.currentLocation, + style: const TextStyle(fontSize: 10, color: Color(0xFF80848E)), + overflow: TextOverflow.ellipsis, + ), + ], + ), + ), + // 状态指示器 + Container( + width: 8, + height: 8, + decoration: const BoxDecoration( + color: Color(0xFF23A559), // 在线绿色 + shape: BoxShape.circle, + ), + ), + ], + ), + ); + }, + ), + ); + } + + Widget makeUserAvatar(String memberName, {String? avatarUrl, double size = 32}) { + return SizedBox( + width: size, + height: size, + child: avatarUrl == null + ? CircleAvatar( + radius: 16, + backgroundColor: const Color(0xFF5865F2), + child: Text( + memberName.toUpperCase(), + style: const TextStyle(color: Colors.white, fontSize: 12, fontWeight: FontWeight.bold), + ), + ) + : ClipRRect( + borderRadius: BorderRadius.circular(100), + child: CacheNetImage(url: avatarUrl), + ), + ); + } + + void _showMemberContextMenu(BuildContext context, dynamic member, PartyRoom partyRoom) async { + await showDialog( + context: context, + builder: (context) => ContentDialog( + title: Text(member.handleName.isNotEmpty ? member.handleName : member.gameUserId), + content: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + FilledButton( + onPressed: () async { + Navigator.pop(context); + final confirmed = await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('转移房主'), + content: Text( + '确定要将房主转移给 ${member.handleName.isNotEmpty ? member.handleName : member.gameUserId} 吗?', + ), + actions: [ + Button(child: const Text('取消'), onPressed: () => Navigator.pop(context, false)), + FilledButton(child: const Text('转移'), onPressed: () => Navigator.pop(context, true)), + ], + ), + ); + if (confirmed == true) { + await partyRoom.transferOwnership(member.gameUserId); + } + }, + child: const Text('转移房主'), + ), + const SizedBox(height: 8), + Button( + onPressed: () async { + Navigator.pop(context); + final confirmed = await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('踢出成员'), + content: Text('确定要踢出 ${member.handleName.isNotEmpty ? member.handleName : member.gameUserId} 吗?'), + actions: [ + Button(child: const Text('取消'), onPressed: () => Navigator.pop(context, false)), + FilledButton( + style: ButtonStyle(backgroundColor: WidgetStateProperty.all(const Color(0xFFDA373C))), + child: const Text('踢出'), + onPressed: () => Navigator.pop(context, true), + ), + ], + ), + ); + if (confirmed == true) { + await partyRoom.kickMember(member.gameUserId); + } + }, + style: ButtonStyle(backgroundColor: WidgetStateProperty.all(const Color(0xFFDA373C))), + child: const Text('踢出成员', style: TextStyle(color: Colors.white)), + ), + ], + ), + actions: [Button(child: const Text('关闭'), onPressed: () => Navigator.pop(context))], + ), + ); + } + + // 消息列表 + Widget _buildMessageList(BuildContext context, List events, ScrollController scrollController, WidgetRef ref) { + final partyRoomState = ref.watch(partyRoomProvider); + final room = partyRoomState.room.currentRoom; + final hasSocialLinks = room != null && room.socialLinks.isNotEmpty; + + // 计算总项数:社交链接消息(如果有)+ 事件消息 + final totalItems = (hasSocialLinks ? 1 : 0) + events.length; + + if (totalItems == 0) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(FluentIcons.chat, size: 64, color: Color(0xFF404249)), + const SizedBox(height: 16), + Text('暂无消息', style: TextStyle(color: Colors.white.withValues(alpha: 0.5), fontSize: 14)), + const SizedBox(height: 4), + Text('发送一条信号开始对话吧!', style: TextStyle(color: Colors.white.withValues(alpha: 0.3), fontSize: 12)), + ], + ), + ); + } + + return ListView.builder( + controller: scrollController, + padding: const EdgeInsets.all(16), + itemCount: totalItems, + itemBuilder: (context, index) { + // 第一条消息显示社交链接(如果有) + if (hasSocialLinks && index == 0) { + return _buildSocialLinksMessage(room); + } + + // 其他消息显示事件 + final eventIndex = hasSocialLinks ? index - 1 : index; + final event = events[eventIndex]; + return _buildMessageItem(event, ref); + }, + ); + } + + // 社交链接系统消息 + Widget _buildSocialLinksMessage(dynamic room) { + return Container( + margin: const EdgeInsets.only(bottom: 16), + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: const Color(0xFF2B2D31), + border: Border.all(color: const Color(0xFF5865F2).withValues(alpha: 0.3)), + borderRadius: BorderRadius.circular(8), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + padding: const EdgeInsets.all(6), + decoration: const BoxDecoration(color: Color(0xFF5865F2), shape: BoxShape.circle), + child: const Icon(FluentIcons.info, size: 14, color: Colors.white), + ), + const SizedBox(width: 12), + const Expanded( + child: Text( + '该房间包含第三方社交连接,点击加入一起开黑吧~', + style: TextStyle(fontSize: 14, color: Color(0xFFDBDEE1), fontWeight: FontWeight.w500), + ), + ), + ], + ), + const SizedBox(height: 12), + Wrap( + spacing: 8, + runSpacing: 8, + children: room.socialLinks.map((link) { + return HyperlinkButton( + onPressed: () => launchUrlString(link), + style: ButtonStyle( + padding: WidgetStateProperty.all(const EdgeInsets.symmetric(horizontal: 12, vertical: 8)), + backgroundColor: WidgetStateProperty.resolveWith((states) { + if (states.isHovered) return const Color(0xFF4752C4); + return const Color(0xFF5865F2); + }), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(_getSocialIcon(link), size: 16, color: Colors.white), + const SizedBox(width: 8), + Text( + _getSocialName(link), + style: const TextStyle(fontSize: 13, color: Colors.white, fontWeight: FontWeight.w500), + ), + ], + ), + ); + }).toList(), + ), + ], + ), + ); + } + + Widget _buildMessageItem(dynamic event, WidgetRef ref) { + final roomEvent = event as partroom.RoomEvent; + final isSignal = roomEvent.type == partroom.RoomEventType.SIGNAL_BROADCAST; + final userName = _getEventUserName(roomEvent); + final avatarUrl = _getEventAvatarUrl(roomEvent); + + return Container( + margin: const EdgeInsets.only(bottom: 16), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + makeUserAvatar(userName, avatarUrl: avatarUrl, size: 28), + const SizedBox(width: 12), + // 消息内容 + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + userName, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: isSignal ? Colors.white : const Color(0xFF80848E), + ), + ), + const SizedBox(width: 8), + Text( + _formatTime(roomEvent.timestamp), + style: const TextStyle(fontSize: 11, color: Color(0xFF80848E)), + ), + ], + ), + const SizedBox(height: 4), + Text( + _getEventText(roomEvent, ref), + style: TextStyle( + fontSize: 14, + color: isSignal ? const Color(0xFFDBDEE1) : const Color(0xFF949BA4), + fontStyle: isSignal ? FontStyle.normal : FontStyle.italic, + ), + ), + ], + ), + ), + ], + ), + ); + } + + String _getEventUserName(partroom.RoomEvent event) { + switch (event.type) { + case partroom.RoomEventType.SIGNAL_BROADCAST: + return event.signalSender.isNotEmpty ? event.signalSender : '未知用户'; + case partroom.RoomEventType.MEMBER_JOINED: + case partroom.RoomEventType.MEMBER_LEFT: + case partroom.RoomEventType.MEMBER_KICKED: + return event.hasMember() && event.member.handleName.isNotEmpty + ? event.member.handleName + : event.hasMember() + ? event.member.gameUserId + : '未知用户'; + case partroom.RoomEventType.OWNER_CHANGED: + return event.hasMember() && event.member.handleName.isNotEmpty ? event.member.handleName : '新房主'; + default: + return '系统'; + } + } + + String? _getEventAvatarUrl(partroom.RoomEvent event) { + if (event.type == partroom.RoomEventType.SIGNAL_BROADCAST || + event.type == partroom.RoomEventType.MEMBER_JOINED || + event.type == partroom.RoomEventType.MEMBER_LEFT || + event.type == partroom.RoomEventType.MEMBER_KICKED || + event.type == partroom.RoomEventType.OWNER_CHANGED) { + if (event.hasMember() && event.member.avatarUrl.isNotEmpty) { + return '${URLConf.rsiAvatarBaseUrl}${event.member.avatarUrl}'; + } + } + return null; + } + + // 信号发送器 + Widget _buildSignalSender(BuildContext context, WidgetRef ref, PartyRoom partyRoom, dynamic room) { + final partyRoomState = ref.watch(partyRoomProvider); + final signalTypes = partyRoomState.room.signalTypes.where((s) => !s.isSpecial).toList(); + + return Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: const Color(0xFF2B2D31).withValues(alpha: .4), + border: Border(top: BorderSide(color: Colors.black.withValues(alpha: 0.3))), + ), + child: Row( + children: [ + const Spacer(), + DropDownButton( + leading: const Icon(FluentIcons.send, size: 16), + title: Text(signalTypes.isEmpty ? '加载中...' : '发送信号'), + disabled: signalTypes.isEmpty || room == null, + items: signalTypes.map((signal) { + return MenuFlyoutItem( + leading: const Icon(FluentIcons.radio_bullet, size: 16), + text: Text(signal.name.isNotEmpty ? signal.name : signal.id), + onPressed: () => _sendSignal(context, ref, partyRoom, room, signal), + ); + }).toList(), + ), + ], + ), + ); + } + + Future _sendSignal( + BuildContext context, + WidgetRef ref, + PartyRoom partyRoom, + dynamic room, + dynamic signal, + ) async { + if (room == null) return; + + try { + await partyRoom.sendSignal(signal.id); + + // 发送成功后,显示在消息列表中 + if (context.mounted) { + // 信号已发送,会通过事件流更新到消息列表 + } + } catch (e) { + // 显示错误提示 + if (context.mounted) { + await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('发送失败'), + content: Text(e.toString()), + actions: [FilledButton(child: const Text('确定'), onPressed: () => Navigator.pop(context))], + ), + ); + } + } + } + + String _getEventText(partroom.RoomEvent event, WidgetRef ref) { + final partyRoomState = ref.read(partyRoomProvider); + final signalTypes = partyRoomState.room.signalTypes; + switch (event.type) { + case partroom.RoomEventType.SIGNAL_BROADCAST: + // 从 signalTypes 提取信号名称 + final signalType = signalTypes.where((s) => s.id == event.signalId).firstOrNull; + // 显示信号ID和参数 + if (event.signalId.isNotEmpty) { + if (event.signalParams.isNotEmpty) { + final params = event.signalParams; + return "signalId: ${event.signalId},params:$params"; + } + } + return signalType?.name ?? event.signalId; + + case partroom.RoomEventType.MEMBER_JOINED: + return '加入了房间'; + + case partroom.RoomEventType.MEMBER_LEFT: + return '离开了房间'; + + case partroom.RoomEventType.OWNER_CHANGED: + return '成为了新房主'; + + case partroom.RoomEventType.ROOM_UPDATED: + return '房间信息已更新'; + + case partroom.RoomEventType.MEMBER_STATUS_UPDATED: + if (event.hasMember()) { + final member = event.member; + final name = member.handleName.isNotEmpty ? member.handleName : member.gameUserId; + if (member.hasStatus() && member.status.currentLocation.isNotEmpty) { + return '$name 更新了状态: ${member.status.currentLocation}'; + } + return '$name 更新了状态'; + } + return '成员状态已更新'; + + case partroom.RoomEventType.ROOM_DISMISSED: + return '房间已解散'; + + case partroom.RoomEventType.MEMBER_KICKED: + return '被踢出房间'; + + default: + return '未知事件'; + } + } + + String _formatTime(dynamic timestamp) { + try { + final date = DateTime.fromMillisecondsSinceEpoch(timestamp.toInt() * 1000); + final now = DateTime.now(); + final diff = now.difference(date); + + if (diff.inMinutes < 1) { + return '刚刚'; + } else if (diff.inMinutes < 60) { + return '${diff.inMinutes} 分钟前'; + } else if (diff.inHours < 24) { + return '${diff.inHours} 小时前'; + } else { + return '${diff.inDays} 天前'; + } + } catch (e) { + return ''; + } + } +} diff --git a/lib/ui/party_room/widgets/party_room_list_page.dart b/lib/ui/party_room/widgets/party_room_list_page.dart new file mode 100644 index 0000000..6dcf57d --- /dev/null +++ b/lib/ui/party_room/widgets/party_room_list_page.dart @@ -0,0 +1,371 @@ +import 'dart:ui'; + +import 'package:fluent_ui/fluent_ui.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; +import 'package:flutter_tilt/flutter_tilt.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:starcitizen_doctor/common/conf/url_conf.dart'; +import 'package:starcitizen_doctor/provider/party_room.dart'; +import 'package:starcitizen_doctor/ui/party_room/party_room_ui_model.dart'; +import 'package:starcitizen_doctor/ui/party_room/widgets/create_room_dialog.dart'; +import 'package:starcitizen_doctor/widgets/widgets.dart'; + +/// 房间列表页面 +class PartyRoomListPage extends HookConsumerWidget { + const PartyRoomListPage({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final uiModel = ref.read(partyRoomUIModelProvider.notifier); + final uiState = ref.watch(partyRoomUIModelProvider); + final partyRoomState = ref.watch(partyRoomProvider); + final partyRoom = ref.read(partyRoomProvider.notifier); + + final searchController = useTextEditingController(); + final scrollController = useScrollController(); + + useEffect(() { + // 初次加载房间列表 + Future.microtask(() => uiModel.loadRoomList()); + return null; + }, []); + + // 无限滑动监听 + useEffect(() { + void onScroll() { + if (scrollController.position.pixels >= scrollController.position.maxScrollExtent - 200) { + // 距离底部200px时开始加载 + final totalPages = (uiState.totalRooms / uiState.pageSize).ceil(); + if (!uiState.isLoading && uiState.currentPage < totalPages && uiState.errorMessage == null) { + uiModel.loadMoreRooms(); + } + } + } + + scrollController.addListener(onScroll); + return () => scrollController.removeListener(onScroll); + }, [uiState.isLoading, uiState.currentPage, uiState.totalRooms]); + + return ScaffoldPage( + padding: EdgeInsets.zero, + content: Column( + children: [ + // 筛选栏 + Container( + padding: const EdgeInsets.all(16), + child: Row( + children: [ + Expanded( + child: TextBox( + controller: searchController, + placeholder: '搜索房主名称...', + prefix: const Padding(padding: EdgeInsets.only(left: 8), child: Icon(FluentIcons.search)), + onSubmitted: (value) { + uiModel.loadRoomList(searchName: value, page: 1); + }, + ), + ), + const SizedBox(width: 12), + _buildTagFilter(context, ref, uiState, partyRoomState), + const SizedBox(width: 12), + IconButton(icon: const Icon(FluentIcons.refresh), onPressed: () => uiModel.refreshRoomList()), + const SizedBox(width: 12), + FilledButton( + onPressed: () => _showCreateRoomDialog(context, ref), + child: const Row( + mainAxisSize: MainAxisSize.min, + children: [Icon(FluentIcons.add, size: 16), SizedBox(width: 8), Text('创建房间')], + ), + ), + ], + ), + ), + + // 房间列表 + Expanded(child: _buildRoomList(context, ref, uiState, partyRoom, scrollController)), + ], + ), + ); + } + + Widget _buildTagFilter( + BuildContext context, + WidgetRef ref, + PartyRoomUIState uiState, + PartyRoomFullState partyRoomState, + ) { + final tags = partyRoomState.room.tags; + + return ComboBox( + placeholder: const Text('选择标签'), + value: uiState.selectedMainTagId, + items: [ + const ComboBoxItem(value: null, child: Text('全部标签')), + ...tags.map((tag) => ComboBoxItem(value: tag.id, child: Text(tag.name))), + ], + onChanged: (value) { + ref.read(partyRoomUIModelProvider.notifier).setSelectedMainTagId(value); + }, + ); + } + + Widget _buildRoomList( + BuildContext context, + WidgetRef ref, + PartyRoomUIState uiState, + PartyRoom partyRoom, + ScrollController scrollController, + ) { + if (uiState.isLoading && uiState.roomListItems.isEmpty) { + return const Center(child: ProgressRing()); + } + + if (uiState.errorMessage != null && uiState.roomListItems.isEmpty) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(FluentIcons.error, size: 48, color: Color(0xFFFF6B6B)), + const SizedBox(height: 16), + Text(uiState.errorMessage!, style: const TextStyle(color: Color(0xFFE0E0E0))), + const SizedBox(height: 16), + FilledButton( + onPressed: () { + ref.read(partyRoomUIModelProvider.notifier).refreshRoomList(); + }, + child: const Text('重试'), + ), + ], + ), + ); + } + + if (uiState.roomListItems.isEmpty) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(FluentIcons.room, size: 48, color: Colors.grey.withValues(alpha: 0.6)), + const SizedBox(height: 16), + Text('暂无房间', style: TextStyle(color: Colors.white.withValues(alpha: 0.7))), + const SizedBox(height: 8), + Text('成为第一个创建房间的人吧!', style: TextStyle(fontSize: 12, color: Colors.white.withValues(alpha: 0.5))), + const SizedBox(height: 16), + FilledButton(onPressed: () => _showCreateRoomDialog(context, ref), child: const Text('创建房间')), + ], + ), + ); + } + + final totalPages = (uiState.totalRooms / uiState.pageSize).ceil(); + final hasMore = uiState.currentPage < totalPages; + + return MasonryGridView.count( + controller: scrollController, + crossAxisCount: 3, + mainAxisSpacing: 12, + crossAxisSpacing: 12, + itemCount: uiState.roomListItems.length + (hasMore || uiState.isLoading ? 1 : 0), + padding: const EdgeInsets.all(16), + itemBuilder: (context, index) { + // 显示加载更多指示器 + if (index == uiState.roomListItems.length) { + return Container( + padding: const EdgeInsets.all(24), + child: Center( + child: uiState.isLoading + ? const ProgressRing() + : Text('已加载全部房间', style: TextStyle(color: Colors.white.withValues(alpha: 0.5))), + ), + ); + } + + final room = uiState.roomListItems[index]; + return _buildRoomCard(context, ref, partyRoom, room, index); + }, + ); + } + + Widget _buildRoomCard(BuildContext context, WidgetRef ref, PartyRoom partyRoom, dynamic room, int index) { + final avatarUrl = room.ownerAvatar.isNotEmpty ? '${URLConf.rsiAvatarBaseUrl}${room.ownerAvatar}' : ''; + + return GridItemAnimator( + index: index, + child: GestureDetector( + onTap: () => _joinRoom(context, ref, partyRoom, room), + child: Tilt( + shadowConfig: const ShadowConfig(maxIntensity: .3), + borderRadius: BorderRadius.circular(12), + clipBehavior: Clip.hardEdge, + child: Container( + decoration: BoxDecoration(borderRadius: BorderRadius.circular(12)), + clipBehavior: Clip.hardEdge, + child: Stack( + children: [ + // 背景图片 + if (avatarUrl.isNotEmpty) + Positioned.fill( + child: CacheNetImage(url: avatarUrl, fit: BoxFit.cover), + ), + // 黑色遮罩 + Positioned.fill( + child: Container(decoration: BoxDecoration(color: Colors.black.withValues(alpha: 0.6))), + ), + // 模糊效果 + Positioned.fill( + child: ClipRect( + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 15.0, sigmaY: 15.0), + child: Container(color: Colors.transparent), + ), + ), + ), + // 内容 + Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + // 头像和房主信息 + Row( + children: [ + CircleAvatar( + radius: 24, + backgroundColor: const Color(0xFF4A9EFF).withValues(alpha: 0.5), + backgroundImage: avatarUrl.isNotEmpty ? NetworkImage(avatarUrl) : null, + child: avatarUrl.isEmpty ? const Icon(FluentIcons.contact, color: Colors.white) : null, + ), + const SizedBox(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Flexible( + child: Text( + room.ownerHandleName.isNotEmpty ? room.ownerHandleName : room.ownerGameId, + style: const TextStyle( + fontWeight: FontWeight.bold, + color: Colors.white, + fontSize: 14, + ), + overflow: TextOverflow.ellipsis, + ), + ), + if (room.hasPassword) ...[ + const SizedBox(width: 4), + Icon(FluentIcons.lock, size: 12, color: Colors.white.withValues(alpha: 0.7)), + ], + ], + ), + const SizedBox(height: 2), + Row( + children: [ + Icon(FluentIcons.group, size: 11, color: Colors.white.withValues(alpha: 0.6)), + const SizedBox(width: 4), + Text( + '${room.currentMembers}/${room.targetMembers}', + style: TextStyle(fontSize: 11, color: Colors.white.withValues(alpha: 0.7)), + ), + ], + ), + ], + ), + ), + ], + ), + const SizedBox(height: 12), + // 标签和时间 + Wrap( + spacing: 6, + runSpacing: 6, + children: [ + if (room.mainTagId.isNotEmpty) + Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: const Color(0xFF4A9EFF).withValues(alpha: 0.3), + borderRadius: BorderRadius.circular(4), + ), + child: Text( + room.mainTagId, + style: const TextStyle(fontSize: 11, color: Color(0xFF4A9EFF)), + ), + ), + if (room.socialLinks.isNotEmpty) + Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: Colors.green.withValues(alpha: 0.2), + borderRadius: BorderRadius.circular(4), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(FluentIcons.link, size: 10, color: Colors.green.withValues(alpha: 0.8)), + const SizedBox(width: 4), + Text( + '${room.socialLinks.length}', + style: TextStyle(fontSize: 11, color: Colors.green.withValues(alpha: 0.9)), + ), + ], + ), + ), + ], + ), + ], + ), + ), + ], + ), + ), + ), + ), + ); + } + + Future _showCreateRoomDialog(BuildContext context, WidgetRef ref) async { + await showDialog(context: context, builder: (context) => const CreateRoomDialog()); + } + + Future _joinRoom(BuildContext context, WidgetRef ref, PartyRoom partyRoom, dynamic room) async { + String? password; + + if (room.hasPassword) { + password = await showDialog( + context: context, + builder: (context) { + final passwordController = TextEditingController(); + return ContentDialog( + title: const Text('输入房间密码'), + content: TextBox(controller: passwordController, placeholder: '请输入密码', obscureText: true), + actions: [ + Button(child: const Text('取消'), onPressed: () => Navigator.pop(context)), + FilledButton(child: const Text('加入'), onPressed: () => Navigator.pop(context, passwordController.text)), + ], + ); + }, + ); + + if (password == null) return; + } + + try { + await partyRoom.joinRoom(room.roomUuid, password: password); + } catch (e) { + if (context.mounted) { + await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('加入失败'), + content: Text(e.toString()), + actions: [FilledButton(child: const Text('确定'), onPressed: () => Navigator.pop(context))], + ), + ); + } + } + } +} diff --git a/lib/ui/party_room/widgets/party_room_register_page.dart b/lib/ui/party_room/widgets/party_room_register_page.dart new file mode 100644 index 0000000..467043f --- /dev/null +++ b/lib/ui/party_room/widgets/party_room_register_page.dart @@ -0,0 +1,364 @@ +import 'package:fluent_ui/fluent_ui.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:starcitizen_doctor/ui/party_room/party_room_ui_model.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + +/// 注册页面 +class PartyRoomRegisterPage extends HookConsumerWidget { + const PartyRoomRegisterPage({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final uiModel = ref.read(partyRoomUIModelProvider.notifier); + final uiState = ref.watch(partyRoomUIModelProvider); + + final gameIdController = useTextEditingController(); + final currentStep = useState(0); + + return ScaffoldPage( + padding: EdgeInsets.zero, + content: Center( + child: SizedBox( + width: MediaQuery.of(context).size.width * .6, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + const Expanded( + child: Text( + '注册账号', + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold, color: Color(0xFFE0E0E0)), + ), + ), + ], + ), + const SizedBox(height: 24), + + if (uiState.errorMessage != null) ...[ + InfoBar( + title: const Text('错误'), + content: Text(uiState.errorMessage!), + severity: InfoBarSeverity.error, + onClose: () => uiModel.clearError(), + ), + const SizedBox(height: 16), + ], + + // 步骤指示器 + Row( + children: [ + _buildStepIndicator( + context, + number: 1, + title: '输入游戏ID', + isActive: currentStep.value == 0, + isCompleted: currentStep.value > 0, + ), + const Expanded(child: Divider()), + _buildStepIndicator( + context, + number: 2, + title: '验证RSI账号', + isActive: currentStep.value == 1, + isCompleted: currentStep.value > 1, + ), + const Expanded(child: Divider()), + _buildStepIndicator( + context, + number: 3, + title: '完成注册', + isActive: currentStep.value == 2, + isCompleted: false, + ), + ], + ), + const SizedBox(height: 24), + + if (currentStep.value == 0) ..._buildStep1(context, uiModel, uiState, gameIdController, currentStep), + + if (currentStep.value == 1) ..._buildStep2(context, uiModel, uiState, gameIdController, currentStep), + + if (currentStep.value == 2) ..._buildStep3(context, uiModel, uiState, currentStep), + + const SizedBox(height: 16), + const Divider(), + const SizedBox(height: 16), + + InfoBar( + title: const Text('关于账号验证'), + content: const Text('接下来,您需要在 RSI 账号简介中添加验证码以证明账号所有权,验证通过后,您可以移除该验证码。'), + severity: InfoBarSeverity.info, + ), + ], + ), + ), + ), + ); + } + + static Widget _buildStepIndicator( + BuildContext context, { + required int number, + required String title, + required bool isActive, + required bool isCompleted, + }) { + return Column( + children: [ + Container( + width: 32, + height: 32, + decoration: BoxDecoration( + color: isCompleted + ? const Color(0xFF4CAF50) + : isActive + ? const Color(0xFF4A9EFF) + : Colors.grey.withValues(alpha: 0.3), + shape: BoxShape.circle, + ), + child: Center( + child: isCompleted + ? const Icon(FluentIcons.check_mark, size: 16, color: Colors.white) + : Text( + '$number', + style: TextStyle( + color: isActive ? Colors.white : Colors.grey.withValues(alpha: 0.7), + fontWeight: FontWeight.bold, + ), + ), + ), + ), + const SizedBox(height: 4), + Text( + title, + style: TextStyle( + fontSize: 11, + color: isActive ? const Color(0xFF4A9EFF) : Colors.grey.withValues(alpha: 0.7), + fontWeight: isActive ? FontWeight.bold : FontWeight.normal, + ), + ), + ], + ); + } + + static List _buildStep1( + BuildContext context, + PartyRoomUIModel uiModel, + PartyRoomUIState uiState, + TextEditingController gameIdController, + ValueNotifier currentStep, + ) { + return [ + const Text( + '步骤 1: 输入您的游戏ID', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold, color: Color(0xFFE0E0E0)), + ), + const SizedBox(height: 12), + Text( + '请输入您在星际公民中的游戏ID(Handle),' + '这是您在游戏中使用的唯一标识符。', + style: TextStyle(fontSize: 13, color: Colors.white.withValues(alpha: 0.6)), + ), + const SizedBox(height: 16), + + TextBox( + controller: gameIdController, + placeholder: '例如: Citizen123', + enabled: !uiState.isLoading, + onSubmitted: (value) async { + if (value.trim().isEmpty) return; + await _requestVerificationCode(uiModel, uiState, value.trim(), currentStep); + }, + ), + const SizedBox(height: 16), + + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Button( + onPressed: () { + launchUrlString('https://robertsspaceindustries.com/en/account/dashboard'); + }, + child: const Text('查看我的游戏ID'), + ), + const SizedBox(width: 8), + FilledButton( + onPressed: uiState.isLoading + ? null + : () async { + final gameId = gameIdController.text.trim(); + if (gameId.isEmpty) { + await showDialog( + context: context, + builder: (context) => ContentDialog( + title: const Text('提示'), + content: const Text('请输入游戏ID'), + actions: [FilledButton(child: const Text('确定'), onPressed: () => Navigator.pop(context))], + ), + ); + return; + } + await _requestVerificationCode(uiModel, uiState, gameId, currentStep); + }, + child: uiState.isLoading + ? const SizedBox(width: 16, height: 16, child: ProgressRing(strokeWidth: 2)) + : const Text('下一步'), + ), + ], + ), + ]; + } + + static Future _requestVerificationCode( + PartyRoomUIModel uiModel, + PartyRoomUIState uiState, + String gameId, + ValueNotifier currentStep, + ) async { + try { + await uiModel.requestPreRegister(gameId); + currentStep.value = 1; + } catch (e) { + // 错误已在 state 中设置 + } + } + + static List _buildStep2( + BuildContext context, + PartyRoomUIModel uiModel, + PartyRoomUIState uiState, + TextEditingController gameIdController, + ValueNotifier currentStep, + ) { + return [ + const Text( + '步骤 2: 验证 RSI 账号', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold, color: Color(0xFFE0E0E0)), + ), + const SizedBox(height: 12), + Text('请按照以下步骤完成账号验证:', style: TextStyle(fontSize: 13, color: Colors.white.withValues(alpha: 0.6))), + const SizedBox(height: 16), + + Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: const Color(0xFF1E3A5F).withValues(alpha: 0.3), + borderRadius: BorderRadius.circular(8), + border: Border.all(color: const Color(0xFF4A9EFF).withValues(alpha: 0.3)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + '1. 复制以下验证码:', + style: TextStyle(fontWeight: FontWeight.bold, color: Color(0xFFE0E0E0)), + ), + const SizedBox(height: 8), + Row( + children: [ + SelectableText( + 'SCB:${uiState.preRegisterCode}', + style: const TextStyle( + fontSize: 16, + fontFamily: 'monospace', + fontWeight: FontWeight.bold, + color: Color(0xFF4A9EFF), + ), + ), + SizedBox(width: 12), + Button( + child: Icon(FluentIcons.copy), + onPressed: () { + Clipboard.setData(ClipboardData(text: 'SCB:${uiState.preRegisterCode}')); + }, + ), + ], + ), + const SizedBox(height: 16), + const Text( + '2. 访问您的 RSI 账号资设置页', + style: TextStyle(fontWeight: FontWeight.bold, color: Color(0xFFE0E0E0)), + ), + const SizedBox(height: 8), + Button( + onPressed: () { + launchUrlString('https://robertsspaceindustries.com/en/account/profile'); + }, + child: const Text('打开资料页'), + ), + const SizedBox(height: 16), + const Text( + '3. 编辑您的个人简介,将验证码添加到简介中', + style: TextStyle(fontWeight: FontWeight.bold, color: Color(0xFFE0E0E0)), + ), + const SizedBox(height: 8), + Text( + '在简介的任意位置添加验证码即可,验证码30分钟内有效', + style: TextStyle(fontSize: 12, color: Colors.white.withValues(alpha: 0.5)), + ), + ], + ), + ), + const SizedBox(height: 16), + + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Button( + onPressed: () { + currentStep.value = 0; + }, + child: const Text('上一步'), + ), + FilledButton( + onPressed: uiState.isLoading + ? null + : () async { + await _completeRegistration(uiModel, currentStep); + }, + child: uiState.isLoading + ? const SizedBox(width: 16, height: 16, child: ProgressRing(strokeWidth: 2)) + : const Text('我已添加,验证并注册'), + ), + ], + ), + ]; + } + + static Future _completeRegistration(PartyRoomUIModel uiModel, ValueNotifier currentStep) async { + try { + await uiModel.completeRegister(); + currentStep.value = 2; + } catch (e) { + // 错误已在 state 中设置 + } + } + + static List _buildStep3( + BuildContext context, + PartyRoomUIModel uiModel, + PartyRoomUIState uiState, + ValueNotifier currentStep, + ) { + return [ + Center( + child: Column( + children: [ + const Icon(FluentIcons.completed_solid, size: 64, color: Color(0xFF4CAF50)), + const SizedBox(height: 16), + const Text( + '注册成功!', + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold, color: Color(0xFFE0E0E0)), + ), + const SizedBox(height: 8), + Text('您已成功注册组队大厅,现在可以开始使用了', style: TextStyle(fontSize: 13, color: Colors.white.withValues(alpha: 0.6))), + ], + ), + ), + ]; + } +} diff --git a/pubspec.lock b/pubspec.lock index b652b5f..385e751 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -78,10 +78,10 @@ packages: dependency: transitive description: name: build - sha256: ce76b1d48875e3233fde17717c23d1f60a91cc631597e49a400c89b475395b1d + sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9 url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.0.2" build_cli_annotations: dependency: transitive description: @@ -106,30 +106,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: d1d57f7807debd7349b4726a19fd32ec8bc177c71ad0febf91a20f84cd2d4b46 - url: "https://pub.dev" - source: hosted - version: "3.0.3" build_runner: dependency: "direct dev" description: name: build_runner - sha256: b24597fceb695969d47025c958f3837f9f0122e237c6a22cb082a5ac66c3ca30 + sha256: "7b5b569f3df370590a85029148d6fc66c7d0201fc6f1847c07dd85d365ae9fcd" url: "https://pub.dev" source: hosted - version: "2.7.1" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "066dda7f73d8eb48ba630a55acb50c4a84a2e6b453b1cb4567f581729e794f7b" - url: "https://pub.dev" - source: hosted - version: "9.3.1" + version: "2.10.3" built_collection: dependency: transitive description: @@ -606,6 +590,22 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.0" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454" + url: "https://pub.dev" + source: hosted + version: "0.3.3+1" + googleapis_auth: + dependency: transitive + description: + name: googleapis_auth + sha256: b81fe352cc4a330b3710d2b7ad258d9bcef6f909bb759b306bf42973a7d046db + url: "https://pub.dev" + source: hosted + version: "2.0.0" graphs: dependency: transitive description: @@ -614,6 +614,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.2" + grpc: + dependency: "direct main" + description: + name: grpc + sha256: d5711432e7fcb41d23f88461651d503db98661af73ac7df211ace9c92fd03753 + url: "https://pub.dev" + source: hosted + version: "5.0.0" hexcolor: dependency: "direct main" description: @@ -670,6 +678,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.6.0" + http2: + dependency: transitive + description: + name: http2 + sha256: "382d3aefc5bd6dc68c6b892d7664f29b5beb3251611ae946a98d35158a82bbfa" + url: "https://pub.dev" + source: hosted + version: "2.3.1" http_client_helper: dependency: transitive description: @@ -1022,6 +1038,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.0.3" + protobuf: + dependency: "direct main" + description: + name: protobuf + sha256: "2fcc8a202ca7ec17dab7c97d6b6d91cf03aa07fe6f65f8afbb6dfa52cc5bd902" + url: "https://pub.dev" + source: hosted + version: "5.1.0" pub_semver: dependency: transitive description: @@ -1385,14 +1409,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.12" - timing: - dependency: transitive - description: - name: timing - sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" - url: "https://pub.dev" - source: hosted - version: "1.0.2" translator: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index e7fc839..1d4646e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -58,7 +58,7 @@ dependencies: aria2: git: https://github.com/xkeyC/dart_aria2_rpc.git # path: ../../xkeyC/dart_aria2_rpc - intl: any + intl: ^0.20.2 synchronized: ^3.4.0 super_sliver_list: ^0.4.1 file: ^7.0.1 @@ -71,6 +71,10 @@ dependencies: path: ^1.9.1 crypto: ^3.0.7 xml: ^6.6.1 + + # gRPC and protobuf + grpc: ^5.0.0 + protobuf: ^5.1.0 dependency_overrides: http: ^1.6.0 intl: ^0.20.2 @@ -80,7 +84,7 @@ dev_dependencies: sdk: flutter flutter_lints: ^6.0.0 msix: ^3.16.12 - build_runner: 2.7.1 + build_runner: 2.10.3 freezed: ^3.2.3 json_serializable: ^6.11.1 riverpod_generator: ^3.0.3 diff --git a/update_grpc.bat b/update_grpc.bat deleted file mode 100644 index 1c3ec48..0000000 --- a/update_grpc.bat +++ /dev/null @@ -1 +0,0 @@ -protoc --dart_out=grpc:lib/generated/grpc/party_room_server -I../party_room_server/protos/ ../party_room_server/protos/*.proto