64 lines
1.5 KiB
Dart
64 lines
1.5 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;
|
|
|
|
ApiWebsocketMessage(
|
|
{required this.type,
|
|
required this.move,
|
|
required this.color,
|
|
required this.reason});
|
|
|
|
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);
|
|
break;
|
|
case MessageType.move:
|
|
ret = ApiWebsocketMessage(
|
|
type: type,
|
|
move: ApiMove.fromJson(json['move']),
|
|
color: null,
|
|
reason: null);
|
|
break;
|
|
case MessageType.invalidMove:
|
|
ret = ApiWebsocketMessage(
|
|
type: type,
|
|
move: ApiMove.fromJson(json['move']),
|
|
color: null,
|
|
reason: json['reason'],
|
|
);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
Map<String, dynamic> toJson() =>
|
|
{'messageType': type, 'move': move, 'color': color};
|
|
}
|