42 lines
1.0 KiB
Dart
42 lines
1.0 KiB
Dart
import 'package:mchess/api/move.dart';
|
|
|
|
enum MessageType {
|
|
moveMessage,
|
|
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;
|
|
|
|
ApiWebsocketMessage(
|
|
{required this.type, required this.move, required this.color});
|
|
|
|
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']));
|
|
break;
|
|
case MessageType.moveMessage:
|
|
ret = ApiWebsocketMessage(
|
|
type: type, move: ApiMove.fromJson(json['move']), color: null);
|
|
}
|
|
return ret;
|
|
}
|
|
}
|