Skip to content

Commit

Permalink
updated flutter project to session -> lobby changes
Browse files Browse the repository at this point in the history
  • Loading branch information
F4zination committed Apr 24, 2024
1 parent d716155 commit 3ab37ee
Show file tree
Hide file tree
Showing 6 changed files with 121 additions and 91 deletions.
20 changes: 14 additions & 6 deletions duo_client/lib/provider/api_provider.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'package:duo_client/pb/lobby.pb.dart';

import 'storage_provider.dart';
import '../utils/connection/abstract_connection.dart';
import '../utils/connection/grpc_server_connection.dart';
Expand All @@ -13,6 +15,9 @@ class ApiProvider extends ChangeNotifier implements AbstractServerConnection {
AbstractServerConnection? _serverConnection;
final StorageProvider _storageProvider;

@override
LobbyStatus? get lobbyStatus => _serverConnection?.lobbyStatus;

ApiProvider(this._storageProvider) {
init(_storageProvider.lastSelectedConnectionType); //Defaults to grpc
}
Expand All @@ -39,18 +44,18 @@ class ApiProvider extends ChangeNotifier implements AbstractServerConnection {
}

@override
Future<int> createSession(String token, String pin) {
return _serverConnection!.createSession(token, pin);
Future<int> createLobby(String token) {
return _serverConnection!.createLobby(token);
}

@override
Future<int> disconnectSession(String token, int sessionId) {
return _serverConnection!.disconnectSession(token, sessionId);
Future<int> disconnectLobby(String token, int lobbyId) {
return _serverConnection!.disconnectLobby(token, lobbyId);
}

@override
Future<int> joinSession(String token, int sessionId) {
return _serverConnection!.joinSession(token, sessionId);
Future<int> joinLobby(String token, int lobbyId) {
return _serverConnection!.joinLobby(token, lobbyId);
}

@override
Expand All @@ -62,6 +67,9 @@ class ApiProvider extends ChangeNotifier implements AbstractServerConnection {
Future<int> registerUser(String username) {
return _serverConnection!.registerUser(username);
}

@override
set lobbyStatus(LobbyStatus? _lobbyStatus) {}
}

final apiProvider = ChangeNotifierProvider<ApiProvider>((ref) {
Expand Down
75 changes: 19 additions & 56 deletions duo_client/lib/screens/lobby_screen.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import 'dart:math';
import 'package:animated_background/animated_background.dart';
import 'package:duo_client/provider/api_provider.dart';
import 'package:duo_client/provider/storage_provider.dart';
import 'package:duo_client/utils/constants.dart';
import 'package:duo_client/utils/helpers.dart';
import 'package:duo_client/widgets/add_tile.dart';
import 'package:duo_client/widgets/invite_dialog.dart';
import 'package:duo_client/widgets/user_tile.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
Expand All @@ -23,21 +23,19 @@ class _LobbyScreenState extends ConsumerState<LobbyScreen>
with TickerProviderStateMixin {
bool creatingLobby = true;
late final ApiProvider _apiProvider;
int sessionID = -1;
String displaySessionID = '';
int lobbyID = -1;
String displaylobbyID = '';
late final StorageProvider _storageProvider;

void createLobby() async {
try {
_apiProvider = ref.watch(apiProvider);
_storageProvider = ref.watch(storageProvider);
_apiProvider.init(ServerConnectionType.grpc);
_apiProvider
.createSession(_storageProvider.accessToken, sessionID.toString())
.then(
_apiProvider.createLobby(_storageProvider.accessToken).then(
(value) {
sessionID = value;
displaySessionID = Helpers.fillPrefixWithZeros(sessionID);
lobbyID = value;
displaylobbyID = Helpers.fillPrefixWithZeros(lobbyID);
setState(() {
creatingLobby = false;
});
Expand Down Expand Up @@ -122,54 +120,19 @@ class _LobbyScreenState extends ConsumerState<LobbyScreen>
childAspectRatio: 1.5,
),
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: AddTile(
..._apiProvider.lobbyStatus!.users.map((user) {
return UserTile(user: user);
}),
...List.generate(
_apiProvider.lobbyStatus!.maxPlayers -
_apiProvider.lobbyStatus!.users.length,
(index) {
return AddTile(
Dialog: InviteDialog(
invideCode: displaySessionID,
invideCode: displaylobbyID,
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: AddTile(
Dialog: InviteDialog(
invideCode: displaySessionID,
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: AddTile(
Dialog: InviteDialog(
invideCode: displaySessionID,
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: AddTile(
Dialog: InviteDialog(
invideCode: displaySessionID,
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: AddTile(
Dialog: InviteDialog(
invideCode: displaySessionID,
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: AddTile(
Dialog: InviteDialog(
invideCode: displaySessionID,
),
),
),
);
})
],
),
),
Expand All @@ -184,9 +147,9 @@ class _LobbyScreenState extends ConsumerState<LobbyScreen>
onPressed: () async {
int status = await ref
.read(apiProvider)
.disconnectSession(
.disconnectLobby(
ref.read(storageProvider).accessToken,
sessionID);
lobbyID);
if (status == 0) {
Navigator.of(context).pop();
} else {
Expand Down
10 changes: 7 additions & 3 deletions duo_client/lib/utils/connection/abstract_connection.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import 'package:duo_client/pb/lobby.pb.dart';

abstract class AbstractServerConnection {
LobbyStatus? lobbyStatus;

AbstractServerConnection();
Future<int> registerUser(String username);
Future<int> loginUser(String uuid);
Future<int> createSession(String token, String pin);
Future<int> joinSession(String token, int sessionId);
Future<int> disconnectSession(String token, int sessionId);
Future<int> createLobby(String token);
Future<int> joinLobby(String token, int sessionId);
Future<int> disconnectLobby(String token, int sessionId);
}
49 changes: 26 additions & 23 deletions duo_client/lib/utils/connection/grpc_server_connection.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'dart:convert';
import 'package:duo_client/pb/lobby.pb.dart';
import 'package:duo_client/provider/storage_provider.dart';

import '../../pb/auth_messages.pb.dart';
import '../../pb/session_messages.pb.dart';
import 'abstract_connection.dart';
import '../constants.dart';
import '../encryption/encryption_handler.dart';
Expand Down Expand Up @@ -104,17 +104,16 @@ class GrpcServerConnection extends AbstractServerConnection {
}

@override
Future<int> createSession(String token, String pin) async {
Future<int> createLobby(String token) async {
try {
CreateSessionResponse response =
await client.createSession(CreateSessionRequest()
..token = token
..pin = pin);

if (response.sessionId != 0) {
print('Session ID: ${response.sessionId}');

return response.sessionId;
ResponseStream<LobbyStatus> response =
await client.createLobby(CreateLobbyRequest()..token = token);

await for (LobbyStatus ls in response) {
// Todo Update LobbyProvider with new state
//print('Received: ${ls.lobbyId}');
lobbyStatus = ls;
_notifyListeners();
}
} catch (e) {
print('Error: $e');
Expand All @@ -124,15 +123,16 @@ class GrpcServerConnection extends AbstractServerConnection {
}

@override
Future<int> joinSession(String token, int sessionId) async {
Future<int> joinLobby(String token, int lobbyId) async {
try {
ResponseStream<SessionStream> stream =
client.joinSession(JoinSessionRequest()
..token = token
..sessionId = sessionId);

await for (SessionStream ss in stream) {
print('Received: ${ss.sessionState.users.length}');
ResponseStream<LobbyStatus> stream = client.joinLobby(JoinLobbyRequest()
..token = token
..lobbyId = lobbyId);

await for (LobbyStatus ls in stream) {
//print('Received: ${ls.users}');
lobbyStatus = ls;
_notifyListeners();
}
} catch (e) {
return -1;
Expand All @@ -141,12 +141,15 @@ class GrpcServerConnection extends AbstractServerConnection {
}

@override
Future<int> disconnectSession(String token, int sessionId) async {
Future<int> disconnectLobby(String token, int lobbyId) async {
try {
DisconnectSessionResponse res =
await client.disconnectSession(DisconnectSessionRequest()
DisconnectLobbyResponse res =
await client.disconnectLobby(DisconnectLobbyRequest()
..token = token
..sessionId = sessionId);
..lobbyId = lobbyId);

lobbyStatus = null;
_notifyListeners();

if (res.success) {
return 0;
Expand Down
5 changes: 2 additions & 3 deletions duo_client/lib/widgets/join_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import 'package:duo_client/screens/lobby_screen.dart';
import 'package:duo_client/screens/qr_scanner_screen.dart';
import 'package:duo_client/utils/constants.dart';
import 'package:duo_client/utils/helpers.dart';
import 'package:duo_client/widgets/duo_container.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
Expand Down Expand Up @@ -82,7 +81,7 @@ class _JoinDialogState extends ConsumerState<JoinDialog> {
const SizedBox(width: Constants.defaultPadding / 2),
IconButton(
onPressed: () async {
dynamic? id = await Navigator.of(context)
dynamic id = await Navigator.of(context)
.pushNamed(QrCodeScanner.route);
if (id != null) {
_controller.text =
Expand Down Expand Up @@ -114,7 +113,7 @@ class _JoinDialogState extends ConsumerState<JoinDialog> {
});
return;
}
int stauts = await ref.read(apiProvider).joinSession(
int stauts = await ref.read(apiProvider).joinLobby(
ref.read(storageProvider).accessToken,
int.parse(_controller.text));
if (stauts == 0) {
Expand Down
53 changes: 53 additions & 0 deletions duo_client/lib/widgets/user_tile.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import 'package:duo_client/pb/user.pb.dart';
import 'package:duo_client/utils/constants.dart';
import 'package:duo_client/widgets/duo_container.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';

class UserTile extends StatelessWidget {
const UserTile({
super.key,
required this.user,
});

final User user;

@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;
return DuoContainer(
width: width / 3.5,
height: height / 4.5,
child: Material(
color: Colors.transparent,
child: InkWell(
borderRadius: BorderRadius.circular(Constants.defaultRadius),
child: Padding(
padding: const EdgeInsets.all(Constants.defaultPadding),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SvgPicture.asset(
'res/icons/user.svg',
colorFilter: ColorFilter.mode(
Theme.of(context).colorScheme.onPrimary,
BlendMode.srcIn,
),
),
const SizedBox(height: 10),
Text(
user.name,
style: TextStyle(
color: Theme.of(context).colorScheme.onPrimary,
fontSize: 20,
),
),
],
),
),
),
),
);
}
}

0 comments on commit 3ab37ee

Please sign in to comment.