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,
clientEvent: data,
source: packet.channel,
needsUpdate: process.needsUpdate,
worldName: worldName,
);
if (!force) {
server.defaultEventSystem.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:
}
server.sendEvent(
event.serverEvent,
target: event.target,
worldName: worldName,
);
final updatePackets = process.buildUpdatePacketsFor(
state,
server.channels,
event.needsUpdate,
);
for (final packet in updatePackets) {
sendEvent(packet.data, target: packet.channel);
}
case KickServerResponse():
server.kick(packet.channel, process.message);
}
}