isValidClientEvent function
Implementation
bool isValidClientEvent(
WorldEvent event,
Channel channel,
WorldState state, {
required AssetManager assetManager,
ChallengeManager? challengeManager,
}) => switch (event) {
TeamJoinRequest() =>
_isReasonableIdentifier(event.team) &&
state.info.teams.containsKey(event.team),
TeamLeaveRequest() =>
_isReasonableIdentifier(event.team) &&
state.info.teams.containsKey(event.team),
CellRollRequest() =>
event.object?.inRange(
0,
state
.getTableOrDefault(event.cell.table)
.getCell(event.cell.position)
.objects
.length -
1,
) ??
true,
ShuffleCellRequest() =>
state
.getTableOrDefault(event.cell.table)
.cells
.containsKey(event.cell.position),
ObjectsSpawned() => event.objects.values.expand((e) => e).every((e) {
final figure = assetManager.getFigure(e.asset);
return figure != null &&
(e.variation == null || figure.variations.containsKey(e.variation));
}),
ObjectsMoved() =>
event.from != event.to &&
event.objects.every(
(e) => e.inRange(
0,
state
.getTableOrDefault(event.table)
.getCell(event.from)
.objects
.length -
1,
),
),
CellHideChanged() =>
event.object?.inRange(
0,
state
.getTableOrDefault(event.cell.table)
.getCell(event.cell.position)
.objects
.length -
1,
) ??
true,
ObjectIndexChanged() => event.index.inRange(
0,
state
.getTableOrDefault(event.cell.table)
.getCell(event.cell.position)
.objects
.length -
1,
),
TeamRemoved() => state.info.teams.containsKey(event.team),
PacksChangeRequest() =>
channel == kAuthorityChannel &&
event.packs.length <= _maxPacksPerRequest &&
event.packs.every(_isReasonableIdentifier),
MessageRequest() =>
event.message.isNotEmpty && event.message.length <= _maxTextLength,
BoardsSpawnRequest() =>
_isReasonableIdentifier(event.table) &&
event.assets.length <= _maxBoardsPerRequest &&
event.assets.values.expand((e) => e).length <= _maxBoardsPerRequest,
BoardMoveRequest() =>
_isReasonableIdentifier(event.table) &&
event.from != event.to &&
event.index.inRange(
0,
state
.getTableOrDefault(event.table)
.getCell(event.from)
.tiles
.length -
1,
),
ModeChangeRequest() => channel == kAuthorityChannel,
DialogCloseRequest() => _isReasonableIdentifier(event.id),
ImagesRequest() =>
event.ids.length <= _maxImagesPerRequest &&
event.ids.every(_isReasonableIdentifier),
ToolbarActionRequest() => _isReasonableIdentifier(event.actionId),
_ => true,
};