🎨 Refactor
Dieser Commit ist enthalten in:
Ursprung
dcd06af559
Commit
ddc7353ad1
@ -1,28 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is a part of the SteamWar software.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2022 SteamWar.de-Serverteam
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.steamwar.network.packets;
|
|
||||||
|
|
||||||
import de.steamwar.network.packets.common.FightInfoPacket;
|
|
||||||
import de.steamwar.network.packets.common.FightEndsPacket;
|
|
||||||
|
|
||||||
public abstract class NetworkHandler {
|
|
||||||
public void handle(FightEndsPacket packet) {}
|
|
||||||
public void handle(FightInfoPacket packet) {}
|
|
||||||
}
|
|
@ -19,25 +19,36 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets;
|
package de.steamwar.network.packets;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
@EqualsAndHashCode
|
||||||
public abstract class NetworkPacket implements Serializable {
|
public abstract class NetworkPacket implements Serializable {
|
||||||
|
|
||||||
private final Sender sender;
|
public byte[] serialize() {
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
public NetworkPacket(Sender sender) {
|
try {
|
||||||
this.sender = sender;
|
ObjectOutputStream oos = new ObjectOutputStream(baos);
|
||||||
|
oos.writeObject(this);
|
||||||
|
oos.flush();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return baos.toByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Sender getSender() {
|
public static void handle(byte[] data) {
|
||||||
return sender;
|
PacketHandler.handlePacket(deserialize(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void handle(NetworkHandler handler);
|
public static NetworkPacket deserialize(byte[] data) {
|
||||||
|
ByteArrayInputStream bais = new ByteArrayInputStream(data);
|
||||||
public enum Sender {
|
try {
|
||||||
SERVER,
|
ObjectInputStream ois = new ObjectInputStream(bais);
|
||||||
CLIENT,
|
return (NetworkPacket) ois.readObject();
|
||||||
BOTH
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
77
src/de/steamwar/network/packets/PacketHandler.java
Normale Datei
77
src/de/steamwar/network/packets/PacketHandler.java
Normale Datei
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.network.packets;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public abstract class PacketHandler {
|
||||||
|
|
||||||
|
private static final List<PacketHandler> PACKET_HANDLERS = new ArrayList<>();
|
||||||
|
|
||||||
|
private final Map<Class<? extends NetworkPacket>, Method> HANDLER_MAP = new HashMap<>();
|
||||||
|
|
||||||
|
public static void handlePacket(NetworkPacket packet) {
|
||||||
|
for (PacketHandler handler : PACKET_HANDLERS) {
|
||||||
|
handler.handle(packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PacketHandler() {
|
||||||
|
Method[] methods = getClass().getMethods();
|
||||||
|
for (Method method : methods) {
|
||||||
|
if(method.getParameterCount() != 1 || !NetworkPacket.class.isAssignableFrom(method.getParameterTypes()[0])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (method.isAnnotationPresent(Handler.class)) {
|
||||||
|
Class<? extends NetworkPacket> packetClass = (Class<? extends NetworkPacket>) method.getParameterTypes()[0];
|
||||||
|
HANDLER_MAP.put(packetClass, method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void register() {
|
||||||
|
PACKET_HANDLERS.add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregister() {
|
||||||
|
PACKET_HANDLERS.remove(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handle(NetworkPacket packet) {
|
||||||
|
Method method = HANDLER_MAP.get(packet.getClass());
|
||||||
|
if (method == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
method.invoke(this, packet);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
protected @interface Handler {}
|
||||||
|
}
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is a part of the SteamWar software.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2022 SteamWar.de-Serverteam
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.steamwar.network.packets.client;
|
|
||||||
|
|
||||||
import de.steamwar.network.packets.NetworkHandler;
|
|
||||||
import de.steamwar.network.packets.server.*;
|
|
||||||
|
|
||||||
public abstract class ClientNetworkHandler extends NetworkHandler {
|
|
||||||
public void handle(BaumemberUpdatePacket packet) {}
|
|
||||||
public void handle(CloseInventoryPacket packet) {}
|
|
||||||
public void handle(InventoryPacket packet) {}
|
|
||||||
public void handle(PingPacket packet) {}
|
|
||||||
public void handle(StartingServerPacket packet) {}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is a part of the SteamWar software.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2022 SteamWar.de-Serverteam
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.steamwar.network.packets.client;
|
|
||||||
|
|
||||||
import de.steamwar.network.packets.NetworkHandler;
|
|
||||||
import de.steamwar.network.packets.NetworkPacket;
|
|
||||||
import de.steamwar.network.packets.server.ServerNetworkHandler;
|
|
||||||
|
|
||||||
public abstract class ClientPacket extends NetworkPacket {
|
|
||||||
public ClientPacket() {
|
|
||||||
super(Sender.CLIENT);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(NetworkHandler handler) {
|
|
||||||
handle((ServerNetworkHandler) handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract void handle(ServerNetworkHandler handler);
|
|
||||||
}
|
|
@ -19,21 +19,17 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.client;
|
package de.steamwar.network.packets.client;
|
||||||
|
|
||||||
import de.steamwar.network.packets.server.ServerNetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Data;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.NonNull;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@AllArgsConstructor
|
||||||
public class ExecuteCommandPacket extends ClientPacket {
|
@NoArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class ExecuteCommandPacket extends NetworkPacket {
|
||||||
|
|
||||||
private static final long serialVersionUID = 6283457297487602016L;
|
private static final long serialVersionUID = 6283457297487602016L;
|
||||||
@NonNull
|
|
||||||
private int playerId;
|
private int playerId;
|
||||||
@NonNull
|
|
||||||
private String command;
|
private String command;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(ServerNetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -19,15 +19,10 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.client;
|
package de.steamwar.network.packets.client;
|
||||||
|
|
||||||
import de.steamwar.network.packets.server.ServerNetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Data;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@Data
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class ImALobbyPacket extends ClientPacket {
|
public class ImALobbyPacket extends NetworkPacket {
|
||||||
private static final long serialVersionUID = 8110246509205246654L;
|
private static final long serialVersionUID = 8110246509205246654L;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(ServerNetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -19,33 +19,22 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.client;
|
package de.steamwar.network.packets.client;
|
||||||
|
|
||||||
import de.steamwar.network.packets.server.ServerNetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.*;
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NonNull;
|
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
@Data
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class InventoryCallbackPacket extends ClientPacket {
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class InventoryCallbackPacket extends NetworkPacket {
|
||||||
private static final long serialVersionUID = -261823209186008718L;
|
private static final long serialVersionUID = -261823209186008718L;
|
||||||
@NonNull
|
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
private int position = -1;
|
private int position = -1;
|
||||||
@NonNull
|
|
||||||
private int owner;
|
private int owner;
|
||||||
@NonNull
|
|
||||||
private CallbackType type;
|
private CallbackType type;
|
||||||
@NonNull
|
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
private ClickType clickType = ClickType.UNKNOWN;
|
private ClickType clickType = ClickType.UNKNOWN;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(ServerNetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum CallbackType {
|
public enum CallbackType {
|
||||||
CLICK,
|
CLICK,
|
||||||
CLOSE,
|
CLOSE,
|
||||||
|
@ -19,23 +19,18 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.client;
|
package de.steamwar.network.packets.client;
|
||||||
|
|
||||||
import de.steamwar.network.packets.server.ServerNetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Data;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.NonNull;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@AllArgsConstructor
|
||||||
public class PrepareSchemPacket extends ClientPacket {
|
@NoArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class PrepareSchemPacket extends NetworkPacket {
|
||||||
|
|
||||||
private static final long serialVersionUID = -4798561188105813349L;
|
private static final long serialVersionUID = -4798561188105813349L;
|
||||||
@NonNull
|
|
||||||
private int player;
|
private int player;
|
||||||
@NonNull
|
|
||||||
private int schem;
|
private int schem;
|
||||||
@NonNull
|
|
||||||
private String schemType;
|
private String schemType;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(ServerNetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is a part of the SteamWar software.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2022 SteamWar.de-Serverteam
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.steamwar.network.packets.common;
|
|
||||||
|
|
||||||
import de.steamwar.network.packets.NetworkPacket;
|
|
||||||
|
|
||||||
public abstract class CommonPacket extends NetworkPacket {
|
|
||||||
public CommonPacket() {
|
|
||||||
super(Sender.BOTH);
|
|
||||||
}
|
|
||||||
}
|
|
@ -19,33 +19,22 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.common;
|
package de.steamwar.network.packets.common;
|
||||||
|
|
||||||
import de.steamwar.network.packets.NetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Builder;
|
import lombok.*;
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NonNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
@Data
|
@AllArgsConstructor
|
||||||
public class FightEndsPacket extends CommonPacket {
|
@NoArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class FightEndsPacket extends NetworkPacket {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1279352415549011332L;
|
private static final long serialVersionUID = 1279352415549011332L;
|
||||||
@NonNull
|
|
||||||
private byte win;
|
private byte win;
|
||||||
@NonNull
|
|
||||||
private int blueSchem;
|
private int blueSchem;
|
||||||
@NonNull
|
|
||||||
private int redSchem;
|
private int redSchem;
|
||||||
@NonNull
|
|
||||||
private List<Integer> bluePlayers;
|
private List<Integer> bluePlayers;
|
||||||
@NonNull
|
|
||||||
private List<Integer> redPlayers;
|
private List<Integer> redPlayers;
|
||||||
@NonNull
|
|
||||||
private String gameMode;
|
private String gameMode;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(NetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -19,49 +19,30 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.common;
|
package de.steamwar.network.packets.common;
|
||||||
|
|
||||||
import de.steamwar.network.packets.NetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Builder;
|
import lombok.*;
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NonNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
@Data
|
@AllArgsConstructor
|
||||||
public class FightInfoPacket extends CommonPacket{
|
@NoArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class FightInfoPacket extends NetworkPacket {
|
||||||
|
|
||||||
private static final long serialVersionUID = 7448644597856605853L;
|
private static final long serialVersionUID = 7448644597856605853L;
|
||||||
@NonNull
|
|
||||||
private String serverName;
|
private String serverName;
|
||||||
@NonNull
|
|
||||||
private String gameMode;
|
private String gameMode;
|
||||||
@NonNull
|
|
||||||
private String arena;
|
private String arena;
|
||||||
@NonNull
|
|
||||||
private String blueName;
|
private String blueName;
|
||||||
@NonNull
|
|
||||||
private String redName;
|
private String redName;
|
||||||
@NonNull
|
|
||||||
private String fightState;
|
private String fightState;
|
||||||
@NonNull
|
|
||||||
private int countdown;
|
private int countdown;
|
||||||
@NonNull
|
|
||||||
private int blueLeader;
|
private int blueLeader;
|
||||||
@NonNull
|
|
||||||
private int redLeader;
|
private int redLeader;
|
||||||
@NonNull
|
|
||||||
private int blueSchem;
|
private int blueSchem;
|
||||||
@NonNull
|
|
||||||
private int redSchem;
|
private int redSchem;
|
||||||
@NonNull
|
|
||||||
private List<Integer> bluePlayers;
|
private List<Integer> bluePlayers;
|
||||||
@NonNull
|
|
||||||
private List<Integer> redPlayers;
|
private List<Integer> redPlayers;
|
||||||
@NonNull
|
|
||||||
private List<Integer> spectators;
|
private List<Integer> spectators;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(NetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -19,15 +19,13 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.server;
|
package de.steamwar.network.packets.server;
|
||||||
|
|
||||||
import de.steamwar.network.packets.client.ClientNetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class BaumemberUpdatePacket extends ServerPacket{
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class BaumemberUpdatePacket extends NetworkPacket {
|
||||||
private static final long serialVersionUID = 6863118892424244051L;
|
private static final long serialVersionUID = 6863118892424244051L;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(ClientNetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -19,19 +19,16 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.server;
|
package de.steamwar.network.packets.server;
|
||||||
|
|
||||||
import de.steamwar.network.packets.client.ClientNetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Data;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.NonNull;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@AllArgsConstructor
|
||||||
public class CloseInventoryPacket extends ServerPacket {
|
@NoArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class CloseInventoryPacket extends NetworkPacket {
|
||||||
|
|
||||||
private static final long serialVersionUID = -2191021190060504521L;
|
private static final long serialVersionUID = -2191021190060504521L;
|
||||||
@NonNull
|
|
||||||
private int playerId;
|
private int playerId;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(ClientNetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -19,27 +19,21 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.server;
|
package de.steamwar.network.packets.server;
|
||||||
|
|
||||||
import de.steamwar.network.packets.client.ClientNetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Data;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.NonNull;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Data
|
@AllArgsConstructor
|
||||||
public class InventoryPacket extends ServerPacket {
|
@NoArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class InventoryPacket extends NetworkPacket {
|
||||||
|
|
||||||
private static final long serialVersionUID = 8071052544654047316L;
|
private static final long serialVersionUID = 8071052544654047316L;
|
||||||
@NonNull
|
|
||||||
private String title;
|
private String title;
|
||||||
@NonNull
|
|
||||||
private int player;
|
private int player;
|
||||||
@NonNull
|
|
||||||
private int size;
|
private int size;
|
||||||
@NonNull
|
|
||||||
private Map<Integer, String> items;
|
private Map<Integer, String> items;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(ClientNetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -19,18 +19,15 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.server;
|
package de.steamwar.network.packets.server;
|
||||||
|
|
||||||
import de.steamwar.network.packets.client.ClientNetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Data;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.NonNull;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@NoArgsConstructor
|
||||||
public class PingPacket extends ServerPacket {
|
@AllArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class PingPacket extends NetworkPacket {
|
||||||
private static final long serialVersionUID = 714647343959550378L;
|
private static final long serialVersionUID = 714647343959550378L;
|
||||||
@NonNull
|
|
||||||
private int id;
|
private int id;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(ClientNetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is a part of the SteamWar software.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2022 SteamWar.de-Serverteam
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.steamwar.network.packets.server;
|
|
||||||
|
|
||||||
import de.steamwar.network.packets.NetworkHandler;
|
|
||||||
import de.steamwar.network.packets.client.*;
|
|
||||||
|
|
||||||
public abstract class ServerNetworkHandler extends NetworkHandler {
|
|
||||||
public void handle(ExecuteCommandPacket packet) {}
|
|
||||||
public void handle(ImALobbyPacket packet) {}
|
|
||||||
public void handle(InventoryCallbackPacket packet) {}
|
|
||||||
public void handle(PrepareSchemPacket packet) {}
|
|
||||||
}
|
|
@ -19,18 +19,15 @@
|
|||||||
|
|
||||||
package de.steamwar.network.packets.server;
|
package de.steamwar.network.packets.server;
|
||||||
|
|
||||||
import de.steamwar.network.packets.client.ClientNetworkHandler;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import lombok.Data;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.NonNull;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@NoArgsConstructor
|
||||||
public class StartingServerPacket extends ServerPacket {
|
@AllArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class StartingServerPacket extends NetworkPacket {
|
||||||
private static final long serialVersionUID = 2808607245898121801L;
|
private static final long serialVersionUID = 2808607245898121801L;
|
||||||
|
|
||||||
private int user;
|
private int user;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(ClientNetworkHandler handler) {
|
|
||||||
handler.handle(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
83
testsrc/de/steamwar/RandomGenerator.java
Normale Datei
83
testsrc/de/steamwar/RandomGenerator.java
Normale Datei
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
public class RandomGenerator {
|
||||||
|
|
||||||
|
private static final Random random = new Random();
|
||||||
|
private static final Map<Class<?>, Function<Class<?>, ?>> generators = new HashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
generators.put(Integer.class, (clazz) -> random.nextInt());
|
||||||
|
generators.put(int.class, (clazz) -> random.nextInt());
|
||||||
|
generators.put(Double.class, (clazz) -> random.nextDouble());
|
||||||
|
generators.put(double.class, (clazz) -> random.nextInt());
|
||||||
|
generators.put(Boolean.class, (clazz) -> random.nextBoolean());
|
||||||
|
generators.put(boolean.class, (clazz) -> random.nextBoolean());
|
||||||
|
generators.put(Byte.class, (clazz) -> (byte) random.nextInt(127));
|
||||||
|
generators.put(byte.class, (clazz) -> (byte) random.nextInt(127));
|
||||||
|
|
||||||
|
generators.put(List.class, aClass -> {
|
||||||
|
int length = random.nextInt(10);
|
||||||
|
List<Object> list = new ArrayList<>();
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
list.add(generators.get(Integer.class).apply(Integer.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
});
|
||||||
|
|
||||||
|
generators.put(String.class, aClass -> {
|
||||||
|
int length = random.nextInt(10);
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
builder.append(random.nextInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.toString();
|
||||||
|
});
|
||||||
|
|
||||||
|
generators.put(Map.class, aClass -> {
|
||||||
|
int length = random.nextInt(10);
|
||||||
|
Map<Object, Object> map = new HashMap<>();
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
map.put(generators.get(Integer.class).apply(Integer.class), generators.get(String.class).apply(String.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
return map;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> T generateRandom(Class<T> clazz) {
|
||||||
|
if(clazz.isEnum()) {
|
||||||
|
return generateRandomEnum(clazz);
|
||||||
|
} else {
|
||||||
|
return (T) generators.get(clazz).apply(clazz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> T generateRandomEnum(Class<T> clazz) {
|
||||||
|
return clazz.getEnumConstants()[random.nextInt(clazz.getEnumConstants().length)];
|
||||||
|
}
|
||||||
|
}
|
80
testsrc/de/steamwar/network/AllPackets.java
Normale Datei
80
testsrc/de/steamwar/network/AllPackets.java
Normale Datei
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.network;
|
||||||
|
|
||||||
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
|
import de.steamwar.network.packets.client.ExecuteCommandPacket;
|
||||||
|
import de.steamwar.network.packets.client.ImALobbyPacket;
|
||||||
|
import de.steamwar.network.packets.client.InventoryCallbackPacket;
|
||||||
|
import de.steamwar.network.packets.client.PrepareSchemPacket;
|
||||||
|
import de.steamwar.network.packets.common.FightEndsPacket;
|
||||||
|
import de.steamwar.network.packets.common.FightInfoPacket;
|
||||||
|
import de.steamwar.network.packets.server.*;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Parameter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static de.steamwar.RandomGenerator.*;
|
||||||
|
|
||||||
|
public class AllPackets {
|
||||||
|
|
||||||
|
public static final Class<? extends NetworkPacket>[] packets = new Class[]{
|
||||||
|
ExecuteCommandPacket.class,
|
||||||
|
ImALobbyPacket.class,
|
||||||
|
InventoryCallbackPacket.class,
|
||||||
|
PrepareSchemPacket.class,
|
||||||
|
FightEndsPacket.class,
|
||||||
|
FightInfoPacket.class,
|
||||||
|
BaumemberUpdatePacket.class,
|
||||||
|
CloseInventoryPacket.class,
|
||||||
|
InventoryPacket.class,
|
||||||
|
PingPacket.class,
|
||||||
|
StartingServerPacket.class
|
||||||
|
};
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public static List<NetworkPacket> getAllPackets() {
|
||||||
|
List<NetworkPacket> packets = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Class<? extends NetworkPacket> packet : AllPackets.packets) {
|
||||||
|
Constructor<? extends NetworkPacket> longConstructor = (Constructor<? extends NetworkPacket>) packet.getConstructors()[0];
|
||||||
|
for (Constructor<?> constructor : packet.getConstructors()) {
|
||||||
|
if (constructor.getParameterCount() > longConstructor.getParameterCount()) {
|
||||||
|
longConstructor = (Constructor<? extends NetworkPacket>) constructor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Object[] args = new Object[longConstructor.getParameterCount()];
|
||||||
|
Parameter[] parameters = longConstructor.getParameters();
|
||||||
|
for (int i = 0; i < parameters.length; i++) {
|
||||||
|
Parameter parameter = parameters[i];
|
||||||
|
args[i] = generateRandom(parameter.getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkPacket packetInstance = longConstructor.newInstance(args);
|
||||||
|
packets.add(packetInstance);
|
||||||
|
}
|
||||||
|
return packets;
|
||||||
|
}
|
||||||
|
}
|
@ -17,21 +17,22 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.steamwar.network.packets.server;
|
package de.steamwar.network;
|
||||||
|
|
||||||
import de.steamwar.network.packets.NetworkHandler;
|
|
||||||
import de.steamwar.network.packets.NetworkPacket;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import de.steamwar.network.packets.client.ClientNetworkHandler;
|
import org.junit.Test;
|
||||||
|
|
||||||
public abstract class ServerPacket extends NetworkPacket {
|
import static org.junit.Assert.*;
|
||||||
public ServerPacket() {
|
|
||||||
super(Sender.SERVER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
public class PacketTest {
|
||||||
public void handle(NetworkHandler handler) {
|
|
||||||
handle((ClientNetworkHandler) handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract void handle(ClientNetworkHandler handler);
|
@Test
|
||||||
|
public void testPacketSerialization() {
|
||||||
|
for (NetworkPacket allPacket : AllPackets.getAllPackets()) {
|
||||||
|
byte[] data = allPacket.serialize();
|
||||||
|
NetworkPacket deserializedPacket = NetworkPacket.deserialize(data);
|
||||||
|
assertEquals("Packet: " + allPacket.getClass().getName() + " is not correctly deserialized", allPacket, deserializedPacket);
|
||||||
|
System.out.println("Packet: " + allPacket.getClass().getName() + " is correctly deserialized");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren