mchess-client/lib/api/websocket_message.dart

106 lines
2.7 KiB
Dart
Raw Permalink Normal View History

2023-06-08 15:10:48 +00:00
import 'package:mchess/api/move.dart';
enum MessageType {
boardState,
move,
invalidMove,
colorDetermined,
gameEnded;
2023-06-08 15:10:48 +00:00
String toJson() => name;
static MessageType fromJson(String json) => values.byName(json);
}
enum ApiColor {
black,
white;
String toJson() => name;
static ApiColor fromJson(String json) => values.byName(json);
}
class ApiWebsocketMessage {
final MessageType type;
final ApiMove? move;
final ApiColor? turnColor;
final ApiColor? playerColor;
final String? reason;
final String? position;
final ApiCoordinate? squareInCheck;
2023-06-08 15:10:48 +00:00
ApiWebsocketMessage({
required this.type,
required this.move,
required this.turnColor,
required this.playerColor,
required this.reason,
required this.position,
required this.squareInCheck,
});
2023-06-08 15:10:48 +00:00
factory ApiWebsocketMessage.fromJson(Map<String, dynamic> json) {
final type = MessageType.fromJson(json['messageType']);
ApiWebsocketMessage ret;
switch (type) {
case MessageType.boardState:
ret = ApiWebsocketMessage(
type: type,
2023-12-25 16:50:58 +00:00
move: ApiMove.fromJson(json['move']),
turnColor: ApiColor.fromJson(json['turnColor']),
reason: null,
position: json['position'],
squareInCheck: null,
playerColor: ApiColor.fromJson(json['playerColor']),
);
2023-06-08 15:10:48 +00:00
case MessageType.colorDetermined:
ret = ApiWebsocketMessage(
type: type,
move: null,
turnColor: null,
reason: null,
position: null,
squareInCheck: null,
playerColor: ApiColor.fromJson(json['playerColor']),
);
2023-06-08 15:10:48 +00:00
break;
case MessageType.move:
2023-06-08 15:10:48 +00:00
ret = ApiWebsocketMessage(
type: type,
move: ApiMove.fromJson(json['move']),
turnColor: null,
reason: null,
position: json['position'],
squareInCheck: json['squareInCheck'],
playerColor: null);
break;
case MessageType.invalidMove:
ret = ApiWebsocketMessage(
type: type,
move: ApiMove.fromJson(json['move']),
turnColor: null,
reason: json['reason'],
position: null,
squareInCheck: json['squareInCheck'],
playerColor: null,
);
case MessageType.gameEnded:
ret = ApiWebsocketMessage(
type: type,
move: null,
turnColor: null,
reason: json['reason'],
position: null,
squareInCheck: null,
playerColor: null,
);
2023-06-08 15:10:48 +00:00
}
return ret;
}
2023-07-03 17:41:12 +00:00
Map<String, dynamic> toJson() => {
'messageType': type,
'move': move,
'color': turnColor,
2023-07-03 17:41:12 +00:00
};
2023-06-08 15:10:48 +00:00
}