80 lines
1.8 KiB
Dart
80 lines
1.8 KiB
Dart
import 'package:mchess/api/move.dart';
|
|
|
|
enum MessageType {
|
|
move,
|
|
invalidMove,
|
|
colorDetermined;
|
|
|
|
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? color;
|
|
final String? reason;
|
|
final String? position;
|
|
final ApiCoordinate? squareInCheck;
|
|
|
|
ApiWebsocketMessage({
|
|
required this.type,
|
|
required this.move,
|
|
required this.color,
|
|
required this.reason,
|
|
required this.position,
|
|
required this.squareInCheck,
|
|
});
|
|
|
|
factory ApiWebsocketMessage.fromJson(Map<String, dynamic> json) {
|
|
final type = MessageType.fromJson(json['messageType']);
|
|
ApiWebsocketMessage ret;
|
|
switch (type) {
|
|
case MessageType.colorDetermined:
|
|
ret = ApiWebsocketMessage(
|
|
type: type,
|
|
move: null,
|
|
color: ApiColor.fromJson(json['color']),
|
|
reason: null,
|
|
position: null,
|
|
squareInCheck: null,
|
|
);
|
|
break;
|
|
case MessageType.move:
|
|
ret = ApiWebsocketMessage(
|
|
type: type,
|
|
move: ApiMove.fromJson(json['move']),
|
|
color: null,
|
|
reason: null,
|
|
position: json['position'],
|
|
squareInCheck: json['squareInCheck']
|
|
);
|
|
break;
|
|
case MessageType.invalidMove:
|
|
ret = ApiWebsocketMessage(
|
|
type: type,
|
|
move: ApiMove.fromJson(json['move']),
|
|
color: null,
|
|
reason: json['reason'],
|
|
position: null,
|
|
squareInCheck: json['squareInCheck'],
|
|
);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
'messageType': type,
|
|
'move': move,
|
|
'color': color,
|
|
};
|
|
}
|