RuneHive-Game
Loading...
Searching...
No Matches
PacketRepository.java
Go to the documentation of this file.
1package com.runehive.net.packet;
2
3import com.google.common.base.Preconditions;
4import com.runehive.game.world.entity.mob.player.Player;
5import org.apache.logging.log4j.LogManager;
6import org.apache.logging.log4j.Logger;
7
8import javax.annotation.Nullable;
9
10/**
11 * The repository that stores packets sizes and listeners for how to execute the packets.
12 *
13 * @author nshusa
14 */
15public final class PacketRepository {
16
17 private static final Logger logger = LogManager.getLogger(PacketRepository.class);
18
19 /**
20 * The number of client packets known.
21 */
22 private static final int MAX_CLIENT_PACKETS = 257;
23
24 /**
25 * The client -> server packet listeners.
26 */
28
29 /**
30 * The array that holds packet types.
31 */
32 private static final int[] packetTypes = new int[MAX_CLIENT_PACKETS];
33
34 public static void sendToListener(Player player, GamePacket packet) {
35 final PacketListener listener = packetListeners[packet.getOpcode()];
36 if (listener != null) {
37 if (packet.getOpcode() != 0) {
38 //logger.info("Packet recv Opcode: {} Player name: {} Size: {}", packet.getOpcode(), player.getUsername(), packet.getSize());
39 }
40 listener.handlePacket(player, packet);
41 }
42 }
43
44 /**
45 * Registers a listener to listen for client -> server packet events.
46 *
47 * @param opcode The packet to intercept.
48 * @param listener The listener that will execute this packet.
49 */
50 public static void registerListener(int opcode, PacketListener listener) {
51 Preconditions.checkArgument(opcode >= 0 && opcode < packetListeners.length);
52 packetListeners[opcode] = listener;
53 }
54
55 /**
56 * Looks up the listener for this packet.
57 *
58 * @param opcode The opcode of the packet
59 * @return The result.
60 */
61 @Nullable
62 public static PacketListener lookupListener(final int opcode) {
64 if (opcode < 0 || opcode >= packetListeners.length) {
65 return null;
66 }
67 return packetListeners[opcode];
68 }
69
70 /**
71 * The method that looks up the packets type.
72 *
73 * @param opcode The opcode to lookup
74 * @return The packet type.
75 */
76 public static PacketType lookupType(int opcode) {
77 if (opcode < 0 || opcode >= packetTypes.length) {
78 return PacketType.EMPTY;
79 }
80
81 final int size = packetTypes[opcode];
82
83 if (size == -2) {
84 return PacketType.VAR_SHORT;
85 } else if (size == -1) {
86 return PacketType.VAR_BYTE;
87 } else if (size > 0) {
88 return PacketType.FIXED;
89 } else {
90 return PacketType.EMPTY;
91 }
92 }
93
94 /**
95 * Looks up the reference size of a packet.
96 *
97 * @param opcode The packet to lookup
98 * @return The reference size.
99 */
100 public static int lookupSize(int opcode) {
101 if (opcode < 0 || opcode >= packetTypes.length) {
102 return 0;
103 }
104 return packetTypes[opcode];
105 }
106
107 /**
108 * Registers a type for a packet.
109 * <p>
110 * The following types are...
111 * <p>
112 * {@code -2} var_short
113 * {@code -1} var_byte
114 * {@code 0} empty
115 * > 0 fixed
116 *
117 * @param opcode The packet to register this type for
118 * @param type The type for this packet.
119 */
120 public static void registerType(int opcode, int type) {
121 Preconditions.checkArgument(opcode >= 0 && opcode < packetListeners.length);
122 packetTypes[opcode] = type;
123 }
124
125}
This class represents a character controlled by a player.
Definition Player.java:125
Represents a single game packet.
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.
static final int MAX_CLIENT_PACKETS
The number of client packets known.
static void sendToListener(Player player, GamePacket packet)
static void registerType(int opcode, int type)
Registers a type for a packet.
static PacketListener lookupListener(final int opcode)
Looks up the listener for this packet.
static final int[] packetTypes
The array that holds packet types.
static PacketType lookupType(int opcode)
The method that looks up the packets type.
static final PacketListener[] packetListeners
The client -> server packet listeners.
static int lookupSize(int opcode)
Looks up the reference size of a packet.
Represents a type of packet.
VAR_SHORT
A variable packet where the size is indicated by a short.
FIXED
A fixed size packet where the size never changes.
VAR_BYTE
A variable packet where the size is indicated by a byte.
void handlePacket(Player player, GamePacket packet)
Handles the packet that has just been received.