Merge pull request 'Networking' (#2) from network into master
Reviewed-on: #2
Dieser Commit ist enthalten in:
Commit
0bc2987b2b
49
src/de/steamwar/network/packets/NetworkPacket.java
Normale Datei
49
src/de/steamwar/network/packets/NetworkPacket.java
Normale Datei
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* 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 lombok.EqualsAndHashCode;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
@EqualsAndHashCode
|
||||
public abstract class NetworkPacket implements Serializable {
|
||||
|
||||
@SneakyThrows
|
||||
public byte[] serialize() {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
ObjectOutputStream oos = new ObjectOutputStream(baos);
|
||||
oos.writeObject(this);
|
||||
oos.flush();
|
||||
return baos.toByteArray();
|
||||
}
|
||||
|
||||
public static void handle(byte[] data) {
|
||||
PacketHandler.handlePacket(deserialize(data));
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public static NetworkPacket deserialize(byte[] data) {
|
||||
ByteArrayInputStream bais = new ByteArrayInputStream(data);
|
||||
ObjectInputStream ois = new ObjectInputStream(bais);
|
||||
return (NetworkPacket) ois.readObject();
|
||||
}
|
||||
}
|
76
src/de/steamwar/network/packets/PacketHandler.java
Normale Datei
76
src/de/steamwar/network/packets/PacketHandler.java
Normale Datei
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* 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 lombok.SneakyThrows;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
protected 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);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public void handle(NetworkPacket packet) {
|
||||
Method method = HANDLER_MAP.get(packet.getClass());
|
||||
if (method == null) {
|
||||
return;
|
||||
}
|
||||
method.invoke(this, packet);
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
protected @interface Handler {}
|
||||
}
|
37
src/de/steamwar/network/packets/client/ExecuteCommandPacket.java
Normale Datei
37
src/de/steamwar/network/packets/client/ExecuteCommandPacket.java
Normale Datei
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 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.NetworkPacket;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Getter
|
||||
public class ExecuteCommandPacket extends NetworkPacket {
|
||||
|
||||
private static final long serialVersionUID = 6283457297487602016L;
|
||||
private int playerId;
|
||||
private String command;
|
||||
}
|
29
src/de/steamwar/network/packets/client/ImALobbyPacket.java
Normale Datei
29
src/de/steamwar/network/packets/client/ImALobbyPacket.java
Normale Datei
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 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.NetworkPacket;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ImALobbyPacket extends NetworkPacket {
|
||||
private static final long serialVersionUID = 8110246509205246654L;
|
||||
}
|
88
src/de/steamwar/network/packets/client/InventoryCallbackPacket.java
Normale Datei
88
src/de/steamwar/network/packets/client/InventoryCallbackPacket.java
Normale Datei
@ -0,0 +1,88 @@
|
||||
/*
|
||||
* 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.NetworkPacket;
|
||||
import lombok.*;
|
||||
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Getter
|
||||
public class InventoryCallbackPacket extends NetworkPacket {
|
||||
private static final long serialVersionUID = -261823209186008718L;
|
||||
@Builder.Default
|
||||
private int position = -1;
|
||||
private int owner;
|
||||
private CallbackType type;
|
||||
@Builder.Default
|
||||
private ClickType clickType = ClickType.UNKNOWN;
|
||||
|
||||
public enum CallbackType {
|
||||
CLICK,
|
||||
CLOSE,
|
||||
}
|
||||
|
||||
public enum ClickType {
|
||||
LEFT,
|
||||
SHIFT_LEFT,
|
||||
RIGHT,
|
||||
SHIFT_RIGHT,
|
||||
WINDOW_BORDER_LEFT,
|
||||
WINDOW_BORDER_RIGHT,
|
||||
MIDDLE,
|
||||
NUMBER_KEY,
|
||||
DOUBLE_CLICK,
|
||||
DROP,
|
||||
CONTROL_DROP,
|
||||
CREATIVE,
|
||||
UNKNOWN;
|
||||
|
||||
public boolean isKeyboardClick() {
|
||||
return this == NUMBER_KEY || this == DROP || this == CONTROL_DROP;
|
||||
}
|
||||
|
||||
public boolean isCreativeAction() {
|
||||
return this == MIDDLE || this == CREATIVE;
|
||||
}
|
||||
|
||||
public boolean isRightClick() {
|
||||
return this == RIGHT || this == SHIFT_RIGHT;
|
||||
}
|
||||
|
||||
public boolean isLeftClick() {
|
||||
return this == LEFT || this == SHIFT_LEFT || this == DOUBLE_CLICK || this == CREATIVE;
|
||||
}
|
||||
|
||||
public boolean isShiftClick() {
|
||||
return this == SHIFT_LEFT || this == SHIFT_RIGHT || this == CONTROL_DROP;
|
||||
}
|
||||
|
||||
public static ClickType getByName(String name) {
|
||||
for (ClickType type : values()) {
|
||||
if (type.name().equalsIgnoreCase(name)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
38
src/de/steamwar/network/packets/client/PrepareSchemPacket.java
Normale Datei
38
src/de/steamwar/network/packets/client/PrepareSchemPacket.java
Normale Datei
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* 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.NetworkPacket;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Getter
|
||||
public class PrepareSchemPacket extends NetworkPacket {
|
||||
|
||||
private static final long serialVersionUID = -4798561188105813349L;
|
||||
private int player;
|
||||
private int schem;
|
||||
private String schemType;
|
||||
}
|
41
src/de/steamwar/network/packets/common/FightEndsPacket.java
Normale Datei
41
src/de/steamwar/network/packets/common/FightEndsPacket.java
Normale Datei
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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;
|
||||
import lombok.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Getter
|
||||
public class FightEndsPacket extends NetworkPacket {
|
||||
|
||||
private static final long serialVersionUID = 1279352415549011332L;
|
||||
private byte win;
|
||||
private int blueSchem;
|
||||
private int redSchem;
|
||||
private List<Integer> bluePlayers;
|
||||
private List<Integer> redPlayers;
|
||||
private String gameMode;
|
||||
}
|
49
src/de/steamwar/network/packets/common/FightInfoPacket.java
Normale Datei
49
src/de/steamwar/network/packets/common/FightInfoPacket.java
Normale Datei
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* 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;
|
||||
import lombok.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Getter
|
||||
public class FightInfoPacket extends NetworkPacket {
|
||||
|
||||
private static final long serialVersionUID = 7448644597856605853L;
|
||||
private @With String serverName;
|
||||
private String gameMode;
|
||||
private String arena;
|
||||
private String blueName;
|
||||
private String redName;
|
||||
private String fightState;
|
||||
private int countdown;
|
||||
private int blueLeader;
|
||||
private int redLeader;
|
||||
private int blueSchem;
|
||||
private int redSchem;
|
||||
private List<Integer> bluePlayers;
|
||||
private List<Integer> redPlayers;
|
||||
private List<Integer> spectators;
|
||||
}
|
29
src/de/steamwar/network/packets/server/BaumemberUpdatePacket.java
Normale Datei
29
src/de/steamwar/network/packets/server/BaumemberUpdatePacket.java
Normale Datei
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 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.NetworkPacket;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class BaumemberUpdatePacket extends NetworkPacket {
|
||||
private static final long serialVersionUID = 6863118892424244051L;
|
||||
|
||||
}
|
36
src/de/steamwar/network/packets/server/CloseInventoryPacket.java
Normale Datei
36
src/de/steamwar/network/packets/server/CloseInventoryPacket.java
Normale Datei
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* 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.NetworkPacket;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Getter
|
||||
public class CloseInventoryPacket extends NetworkPacket {
|
||||
|
||||
private static final long serialVersionUID = -2191021190060504521L;
|
||||
private int playerId;
|
||||
}
|
41
src/de/steamwar/network/packets/server/InventoryPacket.java
Normale Datei
41
src/de/steamwar/network/packets/server/InventoryPacket.java
Normale Datei
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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.NetworkPacket;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Getter
|
||||
public class InventoryPacket extends NetworkPacket {
|
||||
|
||||
private static final long serialVersionUID = 8071052544654047316L;
|
||||
private String title;
|
||||
private int player;
|
||||
private int size;
|
||||
private Map<Integer, String> items;
|
||||
}
|
35
src/de/steamwar/network/packets/server/PingPacket.java
Normale Datei
35
src/de/steamwar/network/packets/server/PingPacket.java
Normale Datei
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* 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.NetworkPacket;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Getter
|
||||
public class PingPacket extends NetworkPacket {
|
||||
private static final long serialVersionUID = 714647343959550378L;
|
||||
private int id;
|
||||
}
|
35
src/de/steamwar/network/packets/server/StartingServerPacket.java
Normale Datei
35
src/de/steamwar/network/packets/server/StartingServerPacket.java
Normale Datei
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* 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.NetworkPacket;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Getter
|
||||
public class StartingServerPacket extends NetworkPacket {
|
||||
private static final long serialVersionUID = 2808607245898121801L;
|
||||
private int user;
|
||||
}
|
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.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];
|
||||
parameter.getName();
|
||||
args[i] = generateRandom(parameter.getType());
|
||||
}
|
||||
|
||||
NetworkPacket packetInstance = longConstructor.newInstance(args);
|
||||
packets.add(packetInstance);
|
||||
}
|
||||
return packets;
|
||||
}
|
||||
}
|
52
testsrc/de/steamwar/network/PacketHandlerTest.java
Normale Datei
52
testsrc/de/steamwar/network/PacketHandlerTest.java
Normale Datei
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* 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.PacketHandler;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
public class PacketHandlerTest {
|
||||
|
||||
TestPacketHandler packetHandler;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
packetHandler = new TestPacketHandler();
|
||||
packetHandler.register();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPacketHandler() {
|
||||
TestPacket packet = new TestPacket();
|
||||
try {
|
||||
PacketHandler.handlePacket(packet);
|
||||
} catch (Exception e) {
|
||||
assertThat(e, instanceOf(InvocationTargetException.class));
|
||||
assertThat(e.getCause(), instanceOf(SecurityException.class));
|
||||
assertThat(e.getCause().getMessage(), equalTo(packet.getClass().getName()));
|
||||
}
|
||||
}
|
||||
}
|
38
testsrc/de/steamwar/network/PacketTest.java
Normale Datei
38
testsrc/de/steamwar/network/PacketTest.java
Normale Datei
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* 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 org.junit.Test;
|
||||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.hamcrest.MatcherAssert.*;
|
||||
|
||||
public class PacketTest {
|
||||
|
||||
@Test
|
||||
public void testPacketSerialization() {
|
||||
for (NetworkPacket allPacket : AllPackets.getAllPackets()) {
|
||||
byte[] data = allPacket.serialize();
|
||||
NetworkPacket deserializedPacket = NetworkPacket.deserialize(data);
|
||||
assertThat("Packet: " + allPacket.getClass().getName() + " is not correctly deserialized", allPacket, equalTo(deserializedPacket));
|
||||
}
|
||||
}
|
||||
}
|
30
testsrc/de/steamwar/network/TestPacket.java
Normale Datei
30
testsrc/de/steamwar/network/TestPacket.java
Normale Datei
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* 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 lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
public class TestPacket extends NetworkPacket {
|
||||
private static final long serialVersionUID = -9079104421295590626L;
|
||||
}
|
30
testsrc/de/steamwar/network/TestPacketHandler.java
Normale Datei
30
testsrc/de/steamwar/network/TestPacketHandler.java
Normale Datei
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* 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.PacketHandler;
|
||||
|
||||
public class TestPacketHandler extends PacketHandler {
|
||||
|
||||
@Handler
|
||||
public void handle(TestPacket packet) {
|
||||
throw new SecurityException(packet.getClass().getName());
|
||||
}
|
||||
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren