onClientEvent method
Implementation
Future<void> onClientEvent(
NetworkerPacket<WorldEvent> packet, {
bool force = false,
}) async {
final data = packet.data;
ServerResponse? process;
try {
process = await processClientEvent(
data is UserJoined ? null : data,
packet.channel,
state,
assetManager: assetManager,
allowServerEvents: packet.isServer,
challengeManager: server.challengeManager,
userManager: server.userManager,
);
} catch (e) {
server.log('Error processing event: $e', level: LogLevel.error);
}
if (process == null) return;
switch (process) {
case UpdateServerResponse():
final event = Event(
serverEvent: process.main?.data,
target: process.main?.channel ?? kAnyChannel,
clientEvent: data,
source: packet.channel,
needsUpdate: process.needsUpdate,
worldName: worldName,
);
if (!force) {
await server.defaultWorld.pluginSystem.fire(event);
if (event.cancelled) return;
server.log(
'Processing event by ${event.source}: ${limitOutput(event.clientEvent)}, answered with ${limitOutput(event.serverEvent)}',
level: LogLevel.verbose,
);
}
switch (packet.data) {
case MessageRequest data:
server.log(
"Message by ${packet.channel}: ${data.message}",
level: LogLevel.info,
);
default:
}
_scheduledUpdates.add((event.serverEvent, process, event.needsUpdate));
final serverEvent = event.serverEvent;
if (serverEvent != null) {
await sendEvent(serverEvent, target: event.target);
}
for (final scheduled in event.scheduledEvents) {
await onClientEvent(scheduled, force: true);
}
case KickServerResponse():
server.kick(packet.channel, process.message);
}
}