RuneHive-Game
Loading...
Searching...
No Matches
PacketListenerLoader.java
Go to the documentation of this file.
1package com.runehive.io;
2
3import com.runehive.net.packet.PacketListener;
4import com.runehive.net.packet.PacketListenerMeta;
5import com.runehive.net.packet.PacketRepository;
6import io.github.classgraph.*;
7import org.apache.logging.log4j.LogManager;
8import org.apache.logging.log4j.Logger;
9
10import java.lang.annotation.Annotation;
11import java.lang.reflect.Constructor;
12import java.util.Arrays;
13
14/**
15 * The class that loads all packet listeners.
16 *
17 * @author nshusa
18 */
19public final class PacketListenerLoader implements Runnable {
20
21 private static final Logger logger = LogManager.getLogger(PacketListenerLoader.class);
22
23 @Override
24 public void run() {
25 try (final ScanResult scanResult =
26 new ClassGraph()
27 .enableClassInfo()
28 .enableMethodInfo()
29 .enableAnnotationInfo()
30 .acceptPackages("com.runehive.net.packet.in")
31 .scan()) {
32 for (final ClassInfo classInfo : scanResult.getClassesWithAnnotation(PacketListenerMeta.class)) {
33 try {
34 final MethodInfoList constructorInfos = classInfo.getDeclaredConstructorInfo();
35 final MethodInfo constructorInfo = constructorInfos.get(0);
36 final Constructor<?> constructor = constructorInfo.loadClassAndGetConstructor();
37
38 final Object instance = constructor.newInstance();
39 final PacketListener listener = (PacketListener) instance;
40
41 final AnnotationInfo annotationInfo = classInfo.getAnnotationInfo(PacketListenerMeta.class);
42 final Annotation annotation = annotationInfo.loadClassAndInstantiate();
43 final PacketListenerMeta meta = (PacketListenerMeta) annotation;
44
45 Arrays.stream(meta.value())
46 .forEach(it -> PacketRepository.registerListener(it, listener));
47 } catch (final Exception ex) {
48 logger.error(String.format("Error loading packet listeners=%s", classInfo.getSimpleName()), ex);
49 }
50 }
51 }
52 }
53
54}
The class that loads all packet listeners.
The repository that stores packets sizes and listeners for how to execute the packets.
static void registerListener(int opcode, PacketListener listener)
Registers a listener to listen for client -> server packet events.
An annotation that describes what client -> server packets a PacketListener can listen to.
int[] value() default
The client-server packet identifiers that this annotated listener can listen to.