Skip to content

Commit

Permalink
refact: separate logic file
Browse files Browse the repository at this point in the history
  • Loading branch information
Lucisokiu committed Oct 19, 2024
1 parent f9f9b83 commit 64fe1ce
Show file tree
Hide file tree
Showing 16 changed files with 513 additions and 187 deletions.
6 changes: 3 additions & 3 deletions lib/core/websocket/interfaces/socket_emiter_interface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ import 'package:waterbus_sdk/flutter_waterbus_sdk.dart';
import 'package:waterbus_sdk/types/models/draw_model.dart';

abstract class SocketEmiter {
List<DrawModel> localDraw = [];
List<DrawModel> remoteDraw = [];

void establishBroadcast({
required String sdp,
required String roomId,
Expand Down Expand Up @@ -30,9 +33,6 @@ abstract class SocketEmiter {
void sendNewSdp(String sdp);
void leaveRoom(String roomId);
void setSubtitle(bool isEnabled);
void startWhiteBoard(int roomId);
void updateWhiteBoard(int roomId, DrawModel draw, String action);
void cleanWhiteBoard(int roomId);

void reconnect();
}
23 changes: 0 additions & 23 deletions lib/core/websocket/socket_emiter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import 'package:waterbus_sdk/core/websocket/interfaces/socket_emiter_interface.d
import 'package:waterbus_sdk/core/websocket/interfaces/socket_handler_interface.dart';
import 'package:waterbus_sdk/flutter_waterbus_sdk.dart';
import 'package:waterbus_sdk/injection/injection_container.dart';
import 'package:waterbus_sdk/types/models/draw_model.dart';

@Injectable(as: SocketEmiter)
class SocketEmiterImpl extends SocketEmiter {
// MARK: emit functions
Expand Down Expand Up @@ -111,27 +109,6 @@ class SocketEmiterImpl extends SocketEmiter {
_socket?.emit(SocketEvent.setSubscribeSubtitleCSS, {'enabled': isEnabled});
}

@override
void startWhiteBoard(int roomId) {
_socket
?.emit(SocketEvent.startWhiteBoardCSS, {'roomId': roomId.toString()});
}

@override
void updateWhiteBoard(int roomId, DrawModel draw, String action) {
_socket?.emit(SocketEvent.updateWhiteBoardCSS, {
'roomId': roomId,
'action': action,
'paints': [draw.toMap()],
});
}

@override
void cleanWhiteBoard(int roomId) {
_socket
?.emit(SocketEvent.cleanWhiteBoardCSS, {'roomId': roomId.toString()});
}

@override
void reconnect() {
_socket?.emit(SocketEvent.reconnect);
Expand Down
44 changes: 20 additions & 24 deletions lib/core/websocket/socket_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ import 'package:waterbus_sdk/core/api/auth/datasources/auth_local_datasource.dar
import 'package:waterbus_sdk/core/api/base/dio_configuration.dart';
import 'package:waterbus_sdk/core/webrtc/webrtc_interface.dart';
import 'package:waterbus_sdk/core/websocket/interfaces/socket_handler_interface.dart';
import 'package:waterbus_sdk/core/whiteboard/white_board_interfaces.dart';
import 'package:waterbus_sdk/flutter_waterbus_sdk.dart';
import 'package:waterbus_sdk/types/enums/draw_socket_enum.dart';
import 'package:waterbus_sdk/types/models/draw_model.dart';
import 'package:waterbus_sdk/types/models/draw_socket_event.dart';
import 'package:waterbus_sdk/utils/encrypt/encrypt.dart';
import 'package:waterbus_sdk/utils/extensions/duration_extensions.dart';
import 'package:waterbus_sdk/utils/logger/logger.dart';
Expand All @@ -21,11 +22,13 @@ class SocketHandlerImpl extends SocketHandler {
final WaterbusLogger _logger;
final AuthLocalDataSource _authLocal;
final DioConfiguration _dioConfig;
final WhiteBoardManager _whiteBoardManager;
SocketHandlerImpl(
this._rtcManager,
this._logger,
this._authLocal,
this._dioConfig,
this._whiteBoardManager,
);

Socket? _socket;
Expand Down Expand Up @@ -326,37 +329,30 @@ class SocketHandlerImpl extends SocketHandler {
_socket?.on(SocketEvent.startWhiteBoardSSC, (data) {
if (data == null) return;

final List<dynamic> drawDataSocket = data['paints'];
final List<DrawModel> drawList =
drawDataSocket.map((data) => DrawModel.fromMap(data)).toList();
WaterbusSdk.onDrawChanged?.call(
DrawSocketEvent(
event: DrawSocketEnum.start,
draw: drawList,
),
);
final drawDataSocket = data['paints'];
drawDataSocket.map((data) => DrawModel.fromMap(data)).toList();
debugPrint(drawDataSocket[0]?.toMap().toString());
_whiteBoardManager.startWhiteBoardSSC(drawDataSocket);
});
_socket?.on(SocketEvent.updateWhiteBoardSSC, (data) {
if (data == null) return;
final UpdateDrawEnum action = UpdateDrawEnum.fromString(data['action']);

final String actionMap = data['action'];
final DrawActionEnum action = actionMap.drawSocketEnum;
final List drawDataSocket = data['paints'];
final List<DrawModel> drawList =
drawDataSocket.map((data) => DrawModel.fromMap(data)).toList();
WaterbusSdk.onDrawChanged?.call(
DrawSocketEvent(
event: DrawSocketEnum.update,
action: action,
draw: drawList,
),
);

_whiteBoardManager.startWhiteBoardSSC(drawList);

if (action == DrawActionEnum.updateAdd) {
_whiteBoardManager.updateWhiteBoardAddSSC(drawList);
} else if (action == DrawActionEnum.updateRemove) {
_whiteBoardManager.updateWhiteBoardRemoveSSC(drawList);
}
});
_socket?.on(SocketEvent.cleanWhiteBoardSSC, (data) {
WaterbusSdk.onDrawChanged?.call(
DrawSocketEvent(
event: DrawSocketEnum.delete,
draw: [],
),
);
_whiteBoardManager.cleanWhiteBoardSSC();
});
});
}
Expand Down
117 changes: 117 additions & 0 deletions lib/core/whiteboard/white_board.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
import 'package:injectable/injectable.dart';
import 'package:socket_io_client/socket_io_client.dart';

import 'package:waterbus_sdk/constants/socket_events.dart';
import 'package:waterbus_sdk/core/webrtc/webrtc_interface.dart';
import 'package:waterbus_sdk/core/websocket/interfaces/socket_handler_interface.dart';
import 'package:waterbus_sdk/core/whiteboard/white_board_interfaces.dart';
import 'package:waterbus_sdk/flutter_waterbus_sdk.dart';
import 'package:waterbus_sdk/injection/injection_container.dart';
import 'package:waterbus_sdk/types/enums/draw_socket_enum.dart';
import 'package:waterbus_sdk/types/models/draw_model.dart';

@Injectable(as: WhiteBoardManager)
class WhiteBoardManagerIpml extends WhiteBoardManager {
final List<DrawModel> localWhiteBoard = [];
final List<DrawModel> remoteWhiteBoard = [];
final List<DrawModel> historyWhiteBoard = [];
final WaterbusWebRTCManager _rtcManager;
WhiteBoardManagerIpml(
this._rtcManager,
);
@override
Future<void> startWhiteBoardCSS() async {
_socket
?.emit(SocketEvent.startWhiteBoardCSS, {'roomId': _rtcManager.roomId});
}

@override
Future<void> updateWhiteBoardCSS(
DrawModel draw,
DrawActionEnum action,
) async {
historyWhiteBoard.add(draw);
localWhiteBoard.add(draw);
_socket?.emit(SocketEvent.updateWhiteBoardCSS, {
'roomId': _rtcManager.roomId,
'action': action.str,
'paints': [draw.toMap()],
});
final props = [...localWhiteBoard, ...remoteWhiteBoard];
WaterbusSdk.onDrawChanged?.call(props);
}

@override
Future<void> cleanWhiteBoardCSS() async {
localWhiteBoard.clear();
remoteWhiteBoard.clear();
historyWhiteBoard.clear();
_socket
?.emit(SocketEvent.cleanWhiteBoardCSS, {'roomId': _rtcManager.roomId});
final props = [...localWhiteBoard, ...remoteWhiteBoard];
WaterbusSdk.onDrawChanged?.call(props);
}

@override
Future<void> undoWhiteBoardCSS() async {
if (localWhiteBoard.isNotEmpty) {
final undoModel = localWhiteBoard.last;
localWhiteBoard.removeLast();
_socket?.emit(SocketEvent.updateWhiteBoardCSS, {
'roomId': _rtcManager.roomId,
'action': DrawActionEnum.updateRemove.str,
'paints': [undoModel.toMap()],
});
final props = [...localWhiteBoard, ...remoteWhiteBoard];
WaterbusSdk.onDrawChanged?.call(props);
}
}

@override
Future<void> redoWhiteBoardCSS() async {
if (historyWhiteBoard.length != localWhiteBoard.length) {
final redoModel = historyWhiteBoard[localWhiteBoard.length];
localWhiteBoard.add(redoModel);

_socket?.emit(SocketEvent.updateWhiteBoardCSS, {
'roomId': _rtcManager.roomId,
'action': DrawActionEnum.updateAdd.str,
'paints': [redoModel.toMap()],
});
}
final props = [...localWhiteBoard, ...remoteWhiteBoard];
WaterbusSdk.onDrawChanged?.call(props);
}

@override
Future<void> startWhiteBoardSSC(List<DrawModel> drawList) async {}

@override
Future<void> updateWhiteBoardAddSSC(List<DrawModel> drawList) async {
remoteWhiteBoard.addAll(drawList);
callBackWhiteBoard();
}

@override
Future<void> updateWhiteBoardRemoveSSC(List<DrawModel> drawList) async {
remoteWhiteBoard.removeWhere((element) => drawList.contains(element));
callBackWhiteBoard();
}

@override
Future<void> cleanWhiteBoardSSC() async {
localWhiteBoard.clear();
remoteWhiteBoard.clear();
historyWhiteBoard.clear();
callBackWhiteBoard();
}

@override
Future<void> callBackWhiteBoard() async {
final props = [...localWhiteBoard, ...remoteWhiteBoard];
props.sort((a, b) => a.createdAt.compareTo(b.createdAt));
WaterbusSdk.onDrawChanged?.call(props);
}

Socket? get _socket => getIt<SocketHandler>().socket;
}
23 changes: 23 additions & 0 deletions lib/core/whiteboard/white_board_interfaces.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:waterbus_sdk/types/enums/draw_socket_enum.dart';
import 'package:waterbus_sdk/types/models/draw_model.dart';

abstract class WhiteBoardManager {
// Emit : CSS
Future<void> startWhiteBoardCSS();
Future<void> updateWhiteBoardCSS(
DrawModel draw,
DrawActionEnum action,
);
Future<void> cleanWhiteBoardCSS();
Future<void> undoWhiteBoardCSS();
Future<void> redoWhiteBoardCSS();

// Listen: SSC
Future<void> startWhiteBoardSSC(List<DrawModel> drawList);
Future<void> updateWhiteBoardAddSSC(List<DrawModel> drawList);
Future<void> updateWhiteBoardRemoveSSC(List<DrawModel> drawList);
Future<void> cleanWhiteBoardSSC();

// Callback
Future<void> callBackWhiteBoard();
}
34 changes: 24 additions & 10 deletions lib/flutter_waterbus_sdk.dart
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
library waterbus_sdk;


import 'package:flutter/foundation.dart';

import 'package:flutter_webrtc_plus/flutter_webrtc_plus.dart';

import 'package:waterbus_sdk/core/api/base/base_local_storage.dart';
import 'package:waterbus_sdk/core/webrtc/webrtc_interface.dart';
import 'package:waterbus_sdk/injection/injection_container.dart';
import 'package:waterbus_sdk/types/enums/draw_socket_enum.dart';
import 'package:waterbus_sdk/types/index.dart';
import 'package:waterbus_sdk/types/models/draw_model.dart';
import 'package:waterbus_sdk/types/models/draw_socket_event.dart';
import 'package:waterbus_sdk/utils/callkit/callkit_listener.dart';
import 'package:waterbus_sdk/waterbus_sdk_interface.dart';

Expand All @@ -26,7 +26,7 @@ class WaterbusSdk {
static Function(VideoSenderStats)? onStatsChanged;
static Function(Subtitle)? onSubtitle;
static Function(MessageSocketEvent)? onMesssageChanged;
static Function(DrawSocketEvent)? onDrawChanged;
static Function(List<DrawModel> drawList)? onDrawChanged;

set onMessageSocketChanged(Function(MessageSocketEvent) onMesssageChanged) {
WaterbusSdk.onMesssageChanged = onMesssageChanged;
Expand All @@ -44,7 +44,7 @@ class WaterbusSdk {
WaterbusSdk.onSubtitle = onSubtitle;
}

set onDrawSocketChanged(Function(DrawSocketEvent) onDrawChanged) {
set setOnDrawChanged(Function(List<DrawModel> drawList)? onDrawChanged) {
WaterbusSdk.onDrawChanged = onDrawChanged;
}

Expand Down Expand Up @@ -118,16 +118,30 @@ class WaterbusSdk {
await _sdk.leaveRoom();
}

Future<void> getWhiteBoard(int roomId) async {
await _sdk.getWhiteBoard(roomId);
// MARK : White board
Future<void> startWhiteBoard() async {
await _sdk.startWhiteBoard();
}

Future<void> updateWhiteBoard(
DrawModel draw,
DrawActionEnum action,
) async {
await _sdk.updateWhiteBoard(draw, action);
}

Future<void> updateWhiteBoard(int roomId,DrawModel draw, String action) async {
await _sdk.updateWhiteBoard(roomId,draw,action);
Future<void> cleanWhiteBoard() async {
await _sdk.cleanWhiteBoard();
}
Future<void> cleanWhiteBoard(int roomId) async {
await _sdk.cleanWhiteBoard(roomId);

Future<void> undo() async {
await _sdk.undoWhiteBoard();
}

Future<void> redo() async {
await _sdk.redoWhiteBoard();
}

// Related to local media
Future<void> reconnect() async => await _sdk.reconnect();

Expand Down
6 changes: 6 additions & 0 deletions lib/injection/injection_container.config.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 64fe1ce

Please sign in to comment.