From 3f57857a4b35f0abdeab478d0a438a8308aade26 Mon Sep 17 00:00:00 2001 From: jython234 Date: Sat, 9 Jan 2016 12:31:50 -0600 Subject: [PATCH 01/12] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index c0a3dff..719bb27 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ BlockServer [![Build Status](https://travis-ci.org/BlockServerProject/BlockServer.svg?branch=master)](https://travis-ci.org/BlockServerProject/BlockServer) =========== +BlockServer is an open source platform for Minecraft server software. It is very extensible and open source. This repository contains the core which is needed to run and load the extra modules which allow players to connect to the server. + +The BlockServer Project develops modules to support both PC and PE connections. Currently PC is lower priority as our goal is to support PE first. From 053f0e614a5ff250652f2d79328fc09dfec43ef0 Mon Sep 17 00:00:00 2001 From: jython234 Date: Sat, 9 Jan 2016 13:52:30 -0600 Subject: [PATCH 02/12] I am so confused right now. --- .../core/exceptions/BlockServerException.java | 16 ++++++++++++++ .../exceptions/node/ExceptionBuilder.java | 16 ++++++++++++++ .../core/exceptions/node/ExceptionNode.java | 16 ++++++++++++++ .../core/message/MessageModule.java | 9 ++++++-- .../modules/network/NetworkConverter.java | 3 ++- .../core/modules/network/NetworkProvider.java | 5 ++++- .../core/modules/player/Player.java | 21 ++++++++++++++++++- .../core/modules/player/PlayerModule.java | 11 ++++++++-- 8 files changed, 90 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/blockserver/core/exceptions/BlockServerException.java b/src/main/java/org/blockserver/core/exceptions/BlockServerException.java index 16da0da..3eb49aa 100644 --- a/src/main/java/org/blockserver/core/exceptions/BlockServerException.java +++ b/src/main/java/org/blockserver/core/exceptions/BlockServerException.java @@ -1,3 +1,19 @@ +/* + * This file is part of BlockServer. + * + * BlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BlockServer 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with BlockServer. If not, see . + */ package org.blockserver.core.exceptions; import org.blockserver.core.exceptions.node.ExceptionBuilder; diff --git a/src/main/java/org/blockserver/core/exceptions/node/ExceptionBuilder.java b/src/main/java/org/blockserver/core/exceptions/node/ExceptionBuilder.java index d94d1ba..8a6797f 100644 --- a/src/main/java/org/blockserver/core/exceptions/node/ExceptionBuilder.java +++ b/src/main/java/org/blockserver/core/exceptions/node/ExceptionBuilder.java @@ -1,3 +1,19 @@ +/* + * This file is part of BlockServer. + * + * BlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BlockServer 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with BlockServer. If not, see . + */ package org.blockserver.core.exceptions.node; public class ExceptionBuilder { diff --git a/src/main/java/org/blockserver/core/exceptions/node/ExceptionNode.java b/src/main/java/org/blockserver/core/exceptions/node/ExceptionNode.java index 323497c..ae0a924 100644 --- a/src/main/java/org/blockserver/core/exceptions/node/ExceptionNode.java +++ b/src/main/java/org/blockserver/core/exceptions/node/ExceptionNode.java @@ -1,3 +1,19 @@ +/* + * This file is part of BlockServer. + * + * BlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BlockServer 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with BlockServer. If not, see . + */ package org.blockserver.core.exceptions.node; public class ExceptionNode { diff --git a/src/main/java/org/blockserver/core/message/MessageModule.java b/src/main/java/org/blockserver/core/message/MessageModule.java index ea73908..4e7762c 100644 --- a/src/main/java/org/blockserver/core/message/MessageModule.java +++ b/src/main/java/org/blockserver/core/message/MessageModule.java @@ -22,6 +22,8 @@ import org.blockserver.core.modules.network.NetworkConverter; import org.blockserver.core.modules.network.NetworkModule; import org.blockserver.core.modules.network.NetworkProvider; +import org.blockserver.core.modules.player.Player; +import org.blockserver.core.modules.player.PlayerModule; import org.blockserver.core.modules.scheduler.SchedulerModule; /** @@ -37,8 +39,11 @@ public MessageModule(Server server, SchedulerModule schedulerModule, NetworkConv for (NetworkProvider provider : getProviders()) { provider.receiveInboundPackets().forEach(packet -> { getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { - if (!event.isCancelled()) - getServer().getEventManager().fire(new MessageHandleEvent<>(networkConverter.toMessage(event.getPacket()))); + if (!event.isCancelled()) { + Player player = getServer().getModule(PlayerModule.class).getPlayer(event.getPacket().getAddress()); + if(player != null) + getServer().getEventManager().fire(new MessageHandleEvent<>(networkConverter.toMessage(event.getPacket(), player))); + } }); }); } diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java index 8ba580c..541a06a 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java @@ -18,6 +18,7 @@ import org.blockserver.core.message.Message; +import org.blockserver.core.modules.player.Player; /** * Written by Exerosis! @@ -25,5 +26,5 @@ public interface NetworkConverter { RawPacket toPacket(Message message); - Message toMessage(RawPacket packet); + Message toMessage(RawPacket packet, Player player); } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java index 18dec0a..d6a623d 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java @@ -16,6 +16,7 @@ */ package org.blockserver.core.modules.network; +import lombok.Getter; import org.blockserver.core.Server; import org.blockserver.core.module.Module; @@ -32,9 +33,11 @@ public class NetworkProvider extends Module { private final BlockingQueue packetOutQueue = new LinkedBlockingQueue<>(); private final BlockingQueue packetInQueue = new LinkedBlockingQueue<>(); + @Getter private final NetworkConverter converter; - public NetworkProvider(Server server) { + public NetworkProvider(Server server, NetworkConverter converter) { super(server); + this.converter = converter; } public void queueOutboundPackets(RawPacket... packets) { diff --git a/src/main/java/org/blockserver/core/modules/player/Player.java b/src/main/java/org/blockserver/core/modules/player/Player.java index 7a64bc7..4b8547d 100644 --- a/src/main/java/org/blockserver/core/modules/player/Player.java +++ b/src/main/java/org/blockserver/core/modules/player/Player.java @@ -17,6 +17,13 @@ package org.blockserver.core.modules.player; import lombok.Getter; +import org.blockserver.core.Server; +import org.blockserver.core.event.MessageEventListener; +import org.blockserver.core.message.Message; +import org.blockserver.core.modules.logging.LoggingModule; +import org.blockserver.core.modules.network.NetworkConverter; +import org.blockserver.core.modules.network.NetworkModule; +import org.blockserver.core.modules.network.NetworkProvider; import java.net.InetSocketAddress; import java.util.UUID; @@ -27,13 +34,25 @@ * @author BlockServer Team */ public class Player { + @Getter private final Server server; @Getter private final InetSocketAddress address; @Getter private final String name; @Getter private final UUID UUID; + @Getter private final NetworkProvider provider; - public Player(InetSocketAddress address, String name, UUID UUID) { + public Player(Server server, InetSocketAddress address, String name, UUID UUID, NetworkProvider provider) { + this.server = server; this.address = address; this.name = name; this.UUID = UUID; + this.provider = provider; + } + + public void sendMessage(Message message) { + server.getModule(NetworkModule.class).sendPackets(provider.getConverter().toPacket(message)); + } + + public void handleMessage(Message message) { + server.getModule(LoggingModule.class).debug("Got Message: "+message); } } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java index 85fcd4e..3a155c9 100644 --- a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java +++ b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java @@ -17,8 +17,13 @@ package org.blockserver.core.modules.player; import org.blockserver.core.Server; +import org.blockserver.core.event.EventListener; +import org.blockserver.core.event.MessageEventListener; +import org.blockserver.core.events.MessageHandleEvent; +import org.blockserver.core.message.Message; import org.blockserver.core.module.Module; import org.blockserver.core.modules.logging.LoggingModule; +import org.blockserver.core.modules.network.NetworkProvider; import java.net.InetSocketAddress; import java.util.Collections; @@ -101,9 +106,11 @@ public Player getPlayer(InetSocketAddress address) { * @param address ({@linkplain InetSocketAddress}): The new {@linkplain Player}'s {@linkplain InetSocketAddress}. * @param name ({@linkplain String}): The new {@linkplain Player}'s {@linkplain String}. * @param UUID ({@linkplain UUID}): The new {@linkplain Player}'s {@linkplain UUID}. + * @param provider {{@linkplain NetworkProvider}}: The {@linkplain Player}'s {@linkplain NetworkProvider} that is used + * to communicate with the client. */ - public void internalOpenSession(InetSocketAddress address, String name, UUID UUID) { - players.add(new Player(address, name, UUID)); + public void internalOpenSession(InetSocketAddress address, String name, UUID UUID, NetworkProvider provider) { + players.add(new Player(getServer(), address, name, UUID, provider)); getServer().getModule(LoggingModule.class).debug("New session from " + address.getHostString() + ":" + address.getPort()); } From ca4d1d8d0bdd675156e953e8b84dd194c6f97212 Mon Sep 17 00:00:00 2001 From: Exerosis Date: Sun, 10 Jan 2016 10:13:56 -0500 Subject: [PATCH 03/12] ~Updates --- .../core/event/MessageEventListener.java | 2 +- .../core/events/MessageHandleEvent.java | 2 +- .../core/modules/entity/Entity.java | 42 +++++++++++++++++++ .../core/{ => modules}/message/Message.java | 2 +- .../message/MessageInPlayerLogin.java | 2 +- .../{ => modules}/message/MessageModule.java | 11 +++-- .../message/block/MessageOutBlockChange.java | 4 +- .../modules/network/NetworkConverter.java | 2 +- .../core/modules/player/Player.java | 9 ++++ .../blockserver/core/modules/world/Block.java | 2 +- .../blockserver/core/modules/world/Chunk.java | 6 ++- .../core/modules/world/ChunkProvider.java | 10 ++++- .../blockserver/core/modules/world/World.java | 1 + .../core/modules/world/WorldModule.java | 5 +++ 14 files changed, 85 insertions(+), 15 deletions(-) create mode 100644 src/main/java/org/blockserver/core/modules/entity/Entity.java rename src/main/java/org/blockserver/core/{ => modules}/message/Message.java (95%) rename src/main/java/org/blockserver/core/{ => modules}/message/MessageInPlayerLogin.java (95%) rename src/main/java/org/blockserver/core/{ => modules}/message/MessageModule.java (85%) rename src/main/java/org/blockserver/core/{ => modules}/message/block/MessageOutBlockChange.java (90%) diff --git a/src/main/java/org/blockserver/core/event/MessageEventListener.java b/src/main/java/org/blockserver/core/event/MessageEventListener.java index b585dfe..478ac36 100644 --- a/src/main/java/org/blockserver/core/event/MessageEventListener.java +++ b/src/main/java/org/blockserver/core/event/MessageEventListener.java @@ -18,7 +18,7 @@ import org.blockserver.core.Server; import org.blockserver.core.events.MessageHandleEvent; -import org.blockserver.core.message.Message; +import org.blockserver.core.modules.message.Message; /** * Written by Exerosis! diff --git a/src/main/java/org/blockserver/core/events/MessageHandleEvent.java b/src/main/java/org/blockserver/core/events/MessageHandleEvent.java index 28ea16c..fea482e 100644 --- a/src/main/java/org/blockserver/core/events/MessageHandleEvent.java +++ b/src/main/java/org/blockserver/core/events/MessageHandleEvent.java @@ -19,7 +19,7 @@ import lombok.Getter; import lombok.Setter; import org.blockserver.core.event.CancellableImplementation; -import org.blockserver.core.message.Message; +import org.blockserver.core.modules.message.Message; /** * Written by Exerosis! diff --git a/src/main/java/org/blockserver/core/modules/entity/Entity.java b/src/main/java/org/blockserver/core/modules/entity/Entity.java new file mode 100644 index 0000000..958b5a9 --- /dev/null +++ b/src/main/java/org/blockserver/core/modules/entity/Entity.java @@ -0,0 +1,42 @@ +/* + * This file is part of BlockServer. + * + * BlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BlockServer 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with BlockServer. If not, see . + */ +package org.blockserver.core.modules.entity; + +import org.blockserver.core.modules.world.positions.Location; + +/** + * Written by Exerosis! + */ +public class Entity { + private float x; + private float y; + private float z; + + public Entity(float x, float y, float z) { + this.x = x; + this.y = y; + this.z = z; + } + + public Entity(Location location) { + this(location.getX(), location.getY(), location.getZ()); + } + + public Location getLocation() { + return new Location(x, y, z); + } +} diff --git a/src/main/java/org/blockserver/core/message/Message.java b/src/main/java/org/blockserver/core/modules/message/Message.java similarity index 95% rename from src/main/java/org/blockserver/core/message/Message.java rename to src/main/java/org/blockserver/core/modules/message/Message.java index 5e5809b..4c29287 100644 --- a/src/main/java/org/blockserver/core/message/Message.java +++ b/src/main/java/org/blockserver/core/modules/message/Message.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with BlockServer. If not, see . */ -package org.blockserver.core.message; +package org.blockserver.core.modules.message; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/org/blockserver/core/message/MessageInPlayerLogin.java b/src/main/java/org/blockserver/core/modules/message/MessageInPlayerLogin.java similarity index 95% rename from src/main/java/org/blockserver/core/message/MessageInPlayerLogin.java rename to src/main/java/org/blockserver/core/modules/message/MessageInPlayerLogin.java index ff885a4..dfa0499 100644 --- a/src/main/java/org/blockserver/core/message/MessageInPlayerLogin.java +++ b/src/main/java/org/blockserver/core/modules/message/MessageInPlayerLogin.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with BlockServer. If not, see . */ -package org.blockserver.core.message; +package org.blockserver.core.modules.message; import org.blockserver.core.modules.player.Player; diff --git a/src/main/java/org/blockserver/core/message/MessageModule.java b/src/main/java/org/blockserver/core/modules/message/MessageModule.java similarity index 85% rename from src/main/java/org/blockserver/core/message/MessageModule.java rename to src/main/java/org/blockserver/core/modules/message/MessageModule.java index ea73908..cba820d 100644 --- a/src/main/java/org/blockserver/core/message/MessageModule.java +++ b/src/main/java/org/blockserver/core/modules/message/MessageModule.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with BlockServer. If not, see . */ -package org.blockserver.core.message; +package org.blockserver.core.modules.message; import org.blockserver.core.Server; import org.blockserver.core.events.MessageHandleEvent; @@ -30,6 +30,7 @@ public class MessageModule extends NetworkModule { private final NetworkConverter networkConverter; + //TODO figure out a way to make the converter part async. public MessageModule(Server server, SchedulerModule schedulerModule, NetworkConverter networkConverter) { super(server, schedulerModule); this.networkConverter = networkConverter; @@ -47,8 +48,10 @@ public MessageModule(Server server, SchedulerModule schedulerModule, NetworkConv public void sendMessage(Message message) { - for (NetworkProvider provider : getProviders()) { - provider.queueOutboundPackets(networkConverter.toPacket(message)); - } + getServer().getExecutorService().execute(() -> { + for (NetworkProvider provider : getProviders()) { + provider.queueOutboundPackets(networkConverter.toPacket(message)); + } + }); } } diff --git a/src/main/java/org/blockserver/core/message/block/MessageOutBlockChange.java b/src/main/java/org/blockserver/core/modules/message/block/MessageOutBlockChange.java similarity index 90% rename from src/main/java/org/blockserver/core/message/block/MessageOutBlockChange.java rename to src/main/java/org/blockserver/core/modules/message/block/MessageOutBlockChange.java index e01e23e..4bf64d3 100644 --- a/src/main/java/org/blockserver/core/message/block/MessageOutBlockChange.java +++ b/src/main/java/org/blockserver/core/modules/message/block/MessageOutBlockChange.java @@ -14,9 +14,9 @@ * You should have received a copy of the GNU Lesser General Public License * along with BlockServer. If not, see . */ -package org.blockserver.core.message.block; +package org.blockserver.core.modules.message.block; -import org.blockserver.core.message.Message; +import org.blockserver.core.modules.message.Message; import org.blockserver.core.modules.player.Player; import org.blockserver.core.modules.world.Block; diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java index 8ba580c..8dc57c5 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java @@ -17,7 +17,7 @@ package org.blockserver.core.modules.network; -import org.blockserver.core.message.Message; +import org.blockserver.core.modules.message.Message; /** * Written by Exerosis! diff --git a/src/main/java/org/blockserver/core/modules/player/Player.java b/src/main/java/org/blockserver/core/modules/player/Player.java index 7a64bc7..d59762b 100644 --- a/src/main/java/org/blockserver/core/modules/player/Player.java +++ b/src/main/java/org/blockserver/core/modules/player/Player.java @@ -17,6 +17,8 @@ package org.blockserver.core.modules.player; import lombok.Getter; +import lombok.Setter; +import org.blockserver.core.modules.world.positions.Location; import java.net.InetSocketAddress; import java.util.UUID; @@ -30,10 +32,17 @@ public class Player { @Getter private final InetSocketAddress address; @Getter private final String name; @Getter private final UUID UUID; + @Getter @Setter private int x; + @Getter @Setter private int y; + @Getter @Setter private int z; public Player(InetSocketAddress address, String name, UUID UUID) { this.address = address; this.name = name; this.UUID = UUID; } + + public Location getLocation() { + return new Location(x, y, z); + } } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/world/Block.java b/src/main/java/org/blockserver/core/modules/world/Block.java index 4f41a25..915498d 100644 --- a/src/main/java/org/blockserver/core/modules/world/Block.java +++ b/src/main/java/org/blockserver/core/modules/world/Block.java @@ -17,7 +17,7 @@ package org.blockserver.core.modules.world; import lombok.Getter; -import org.blockserver.core.message.block.MessageOutBlockChange; +import org.blockserver.core.modules.message.block.MessageOutBlockChange; import org.blockserver.core.modules.player.Player; import org.blockserver.core.modules.world.positions.Vector; diff --git a/src/main/java/org/blockserver/core/modules/world/Chunk.java b/src/main/java/org/blockserver/core/modules/world/Chunk.java index 8158eb2..f66c5aa 100644 --- a/src/main/java/org/blockserver/core/modules/world/Chunk.java +++ b/src/main/java/org/blockserver/core/modules/world/Chunk.java @@ -19,6 +19,8 @@ /** * Written by Exerosis! */ -public interface Chunk { - Block getBlockAt(int x, int y, int z); +public class Chunk { + public Block getBlockAt(int x, int y, int z) { + return null; + } } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java b/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java index cf427c3..50e341f 100644 --- a/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java +++ b/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java @@ -20,5 +20,13 @@ * Written by Exerosis! */ public interface ChunkProvider { - Chunk getChunkAt(int x, int y); + Chunk loadChunkAt(int x, int y); + + void unloadChunkAt(int x, int y); + + void unloadChunk(Chunk chunk); + + Chunk getOrLoadChunkAt(int x, int y); + + boolean isChunkLoaded(int x, int y); } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/world/World.java b/src/main/java/org/blockserver/core/modules/world/World.java index da5aa36..d47550a 100644 --- a/src/main/java/org/blockserver/core/modules/world/World.java +++ b/src/main/java/org/blockserver/core/modules/world/World.java @@ -29,6 +29,7 @@ public class World { @Getter private Server server; @Getter private Set players = new HashSet<>(); + @Getter private Set loadedChunks = new HashSet<>(); public World(Server server) { this.server = server; diff --git a/src/main/java/org/blockserver/core/modules/world/WorldModule.java b/src/main/java/org/blockserver/core/modules/world/WorldModule.java index c1c9a7d..4b1facd 100644 --- a/src/main/java/org/blockserver/core/modules/world/WorldModule.java +++ b/src/main/java/org/blockserver/core/modules/world/WorldModule.java @@ -26,4 +26,9 @@ public class WorldModule extends Module { public WorldModule(Server server) { super(server); } + + + public void setBlockMaterial(Block block, Material material) { + + } } \ No newline at end of file From bd90a22086bb3041233ec2fa60043bbd57a42521 Mon Sep 17 00:00:00 2001 From: jython234 Date: Sun, 10 Jan 2016 12:41:18 -0600 Subject: [PATCH 04/12] Fix everything up I think --- .../core/module/loaders/CoreModuleLoader.java | 3 ++- .../core/modules/message/MessageModule.java | 11 ++++++----- .../core/modules/network/NetworkConverter.java | 3 ++- .../core/modules/network/NetworkModule.java | 6 +++++- .../blockserver/core/modules/player/Player.java | 17 +++++++++++++++-- .../core/modules/player/PlayerModule.java | 4 ---- 6 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java b/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java index 3e3a8c2..a5450c1 100644 --- a/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java +++ b/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java @@ -20,6 +20,7 @@ import org.blockserver.core.module.Module; import org.blockserver.core.module.ModuleLoader; import org.blockserver.core.modules.logging.LoggingModule; +import org.blockserver.core.modules.message.MessageModule; import org.blockserver.core.modules.network.NetworkModule; import org.blockserver.core.modules.player.PlayerModule; import org.blockserver.core.modules.scheduler.SchedulerModule; @@ -33,7 +34,7 @@ public Collection setModules(Collection currentModules, Server s LoggingModule loggingModule = new LoggingModule(server); SchedulerModule schedulerModule = new SchedulerModule(server); PlayerModule playerModule = new PlayerModule(server); - NetworkModule networkModule = new NetworkModule(server, schedulerModule); + NetworkModule networkModule = new MessageModule(server, schedulerModule); currentModules.add(loggingModule); currentModules.add(schedulerModule); diff --git a/src/main/java/org/blockserver/core/modules/message/MessageModule.java b/src/main/java/org/blockserver/core/modules/message/MessageModule.java index dc09fe2..1d7363e 100644 --- a/src/main/java/org/blockserver/core/modules/message/MessageModule.java +++ b/src/main/java/org/blockserver/core/modules/message/MessageModule.java @@ -30,20 +30,19 @@ * Written by Exerosis! */ public class MessageModule extends NetworkModule { - private final NetworkConverter networkConverter; //TODO figure out a way to make the converter part async. - public MessageModule(Server server, SchedulerModule schedulerModule, NetworkConverter networkConverter) { + public MessageModule(Server server, SchedulerModule schedulerModule) { super(server, schedulerModule); - this.networkConverter = networkConverter; task = () -> { for (NetworkProvider provider : getProviders()) { provider.receiveInboundPackets().forEach(packet -> { getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { if (!event.isCancelled()) { Player player = getServer().getModule(PlayerModule.class).getPlayer(event.getPacket().getAddress()); - if(player != null) - getServer().getEventManager().fire(new MessageHandleEvent<>(networkConverter.toMessage(event.getPacket(), player))); + if(player != null) { + getServer().getEventManager().fire(new MessageHandleEvent<>(provider.getConverter().toMessage(event.getPacket(), player))); + } } }); }); @@ -52,6 +51,7 @@ public MessageModule(Server server, SchedulerModule schedulerModule, NetworkConv } + /* public void sendMessage(Message message) { getServer().getExecutorService().execute(() -> { for (NetworkProvider provider : getProviders()) { @@ -59,4 +59,5 @@ public void sendMessage(Message message) { } }); } + */ } diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java index 8dc57c5..fe92d28 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java @@ -18,6 +18,7 @@ import org.blockserver.core.modules.message.Message; +import org.blockserver.core.modules.player.Player; /** * Written by Exerosis! @@ -25,5 +26,5 @@ public interface NetworkConverter { RawPacket toPacket(Message message); - Message toMessage(RawPacket packet); + Message toMessage(RawPacket packet, Player player); } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkModule.java b/src/main/java/org/blockserver/core/modules/network/NetworkModule.java index 6a8b1d9..882a8ce 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkModule.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkModule.java @@ -44,12 +44,16 @@ public NetworkModule(Server server, SchedulerModule schedulerModule) { }; } - public void sendPackets(RawPacket... packets) { + public void broadcastPackets(RawPacket... packets) { for (NetworkProvider provider : providers) { provider.queueOutboundPackets(packets); } } + public void sendPackets(NetworkProvider provider, RawPacket... packets) { + provider.queueOutboundPackets(packets); + } + public void registerProvider(NetworkProvider provider) { providers.add(provider); } diff --git a/src/main/java/org/blockserver/core/modules/player/Player.java b/src/main/java/org/blockserver/core/modules/player/Player.java index d285dfe..4e07b63 100644 --- a/src/main/java/org/blockserver/core/modules/player/Player.java +++ b/src/main/java/org/blockserver/core/modules/player/Player.java @@ -17,6 +17,12 @@ package org.blockserver.core.modules.player; import lombok.Getter; +import org.blockserver.core.Server; +import org.blockserver.core.modules.message.Message; +import org.blockserver.core.modules.message.block.MessageOutBlockChange; +import org.blockserver.core.modules.network.NetworkModule; +import org.blockserver.core.modules.network.NetworkProvider; +import org.blockserver.core.modules.world.positions.Location; import java.net.InetSocketAddress; import java.util.UUID; @@ -31,14 +37,21 @@ public class Player { @Getter private final InetSocketAddress address; @Getter private final String name; @Getter private final UUID UUID; + @Getter private final NetworkProvider provider; - public Player(InetSocketAddress address, String name, UUID UUID) { + public Player(Server server, InetSocketAddress address, String name, UUID UUID, NetworkProvider provider) { + this.server = server; this.address = address; this.name = name; this.UUID = UUID; + this.provider = provider; } public Location getLocation() { - return new Location(x, y, z); + return new Location(0, 64, 0); + } + + public void sendMessage(Message message) { + server.getModule(NetworkModule.class).sendPackets(provider, provider.getConverter().toPacket(message)); } } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java index 3a155c9..5578d57 100644 --- a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java +++ b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java @@ -17,10 +17,6 @@ package org.blockserver.core.modules.player; import org.blockserver.core.Server; -import org.blockserver.core.event.EventListener; -import org.blockserver.core.event.MessageEventListener; -import org.blockserver.core.events.MessageHandleEvent; -import org.blockserver.core.message.Message; import org.blockserver.core.module.Module; import org.blockserver.core.modules.logging.LoggingModule; import org.blockserver.core.modules.network.NetworkProvider; From 59e697f3b998e9ca0a4257e7cc91346b86d9b2af Mon Sep 17 00:00:00 2001 From: jython234 Date: Sun, 10 Jan 2016 15:57:52 -0600 Subject: [PATCH 05/12] Example handler --- ...ayerLogin.java => PlayerLoginMessage.java} | 12 ++++++-- .../core/modules/player/Player.java | 28 ++++++++++++++++++- .../org/blockserver/core/utilities/Skin.java | 9 ++++++ 3 files changed, 46 insertions(+), 3 deletions(-) rename src/main/java/org/blockserver/core/modules/message/{MessageInPlayerLogin.java => PlayerLoginMessage.java} (76%) create mode 100644 src/main/java/org/blockserver/core/utilities/Skin.java diff --git a/src/main/java/org/blockserver/core/modules/message/MessageInPlayerLogin.java b/src/main/java/org/blockserver/core/modules/message/PlayerLoginMessage.java similarity index 76% rename from src/main/java/org/blockserver/core/modules/message/MessageInPlayerLogin.java rename to src/main/java/org/blockserver/core/modules/message/PlayerLoginMessage.java index dfa0499..8b22a52 100644 --- a/src/main/java/org/blockserver/core/modules/message/MessageInPlayerLogin.java +++ b/src/main/java/org/blockserver/core/modules/message/PlayerLoginMessage.java @@ -17,12 +17,20 @@ package org.blockserver.core.modules.message; import org.blockserver.core.modules.player.Player; +import org.blockserver.core.utilities.Skin; + +import java.util.UUID; /** * Written by Exerosis! */ -public class MessageInPlayerLogin extends Message { - public MessageInPlayerLogin(Player player) { +public class PlayerLoginMessage extends Message { + public long clientID; + public String username; + public UUID uuid; + public Skin skin; + + public PlayerLoginMessage(Player player) { super(player); } } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/player/Player.java b/src/main/java/org/blockserver/core/modules/player/Player.java index 4e07b63..ce3dc3a 100644 --- a/src/main/java/org/blockserver/core/modules/player/Player.java +++ b/src/main/java/org/blockserver/core/modules/player/Player.java @@ -18,11 +18,15 @@ import lombok.Getter; import org.blockserver.core.Server; +import org.blockserver.core.event.MessageEventListener; +import org.blockserver.core.events.MessageHandleEvent; import org.blockserver.core.modules.message.Message; +import org.blockserver.core.modules.message.PlayerLoginMessage; import org.blockserver.core.modules.message.block.MessageOutBlockChange; import org.blockserver.core.modules.network.NetworkModule; import org.blockserver.core.modules.network.NetworkProvider; import org.blockserver.core.modules.world.positions.Location; +import org.blockserver.core.utilities.Skin; import java.net.InetSocketAddress; import java.util.UUID; @@ -35,9 +39,11 @@ public class Player { @Getter private final Server server; @Getter private final InetSocketAddress address; + @Getter private final NetworkProvider provider; + @Getter private final String name; @Getter private final UUID UUID; - @Getter private final NetworkProvider provider; + @Getter private Skin skin; public Player(Server server, InetSocketAddress address, String name, UUID UUID, NetworkProvider provider) { this.server = server; @@ -45,6 +51,13 @@ public Player(Server server, InetSocketAddress address, String name, UUID UUID, this.name = name; this.UUID = UUID; this.provider = provider; + + new MessageEventListener(){ + @Override + public void onEvent(MessageHandleEvent event) { + handleLogin(event.getMessage()); + } + }.register(PlayerLoginMessage.class, server); } public Location getLocation() { @@ -54,4 +67,17 @@ public Location getLocation() { public void sendMessage(Message message) { server.getModule(NetworkModule.class).sendPackets(provider, provider.getConverter().toPacket(message)); } + + public void handleLogin(PlayerLoginMessage message) { + if(server.getModule(PlayerModule.class).getPlayer(message.username) != null) { + disconnect("blockserver.player.disconnect.username", true); + } + if(server.getModule(PlayerModule.class).getPlayer(message.uuid) != null) { + disconnect("blockserver.player.disconnect.uuid", true); + } + } + + public void disconnect(String message, boolean notify) { + + } } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/utilities/Skin.java b/src/main/java/org/blockserver/core/utilities/Skin.java new file mode 100644 index 0000000..bda766c --- /dev/null +++ b/src/main/java/org/blockserver/core/utilities/Skin.java @@ -0,0 +1,9 @@ +package org.blockserver.core.utilities; + +/** + * Utility class that represents a Skin. + */ +public class Skin { + public byte[] bytes; + public String skinName; +} From dcfcc8783e6dbedb44d65a768b8d85a7b7d61c12 Mon Sep 17 00:00:00 2001 From: Exerosis Date: Mon, 11 Jan 2016 09:39:40 -0500 Subject: [PATCH 06/12] ~Another attempt at networking, unfinished. --- .../core/event/ServerEventListener.java | 38 ++++++++++++ .../core/modules/network/MessageProvider.java | 62 +++++++++++++++++++ .../modules/network/NetworkConverter.java | 4 +- .../core/modules/network/NetworkProvider.java | 23 ++++--- 4 files changed, 116 insertions(+), 11 deletions(-) create mode 100644 src/main/java/org/blockserver/core/event/ServerEventListener.java create mode 100644 src/main/java/org/blockserver/core/modules/network/MessageProvider.java diff --git a/src/main/java/org/blockserver/core/event/ServerEventListener.java b/src/main/java/org/blockserver/core/event/ServerEventListener.java new file mode 100644 index 0000000..fd6f7f9 --- /dev/null +++ b/src/main/java/org/blockserver/core/event/ServerEventListener.java @@ -0,0 +1,38 @@ +/* + * This file is part of BlockServer. + * + * BlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BlockServer 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with BlockServer. If not, see . + */ +package org.blockserver.core.event; + +import org.blockserver.core.Server; + +/** + * Written by Exerosis! + */ +public class ServerEventListener extends EventListener { + public void register(Class listenerType, Server server) { + register(listenerType, server.getEventManager()); + } + + public ServerEventListener post() { + super.post(); + return this; + } + + public ServerEventListener priority(Priority priority) { + super.priority(priority); + return this; + } +} \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/MessageProvider.java b/src/main/java/org/blockserver/core/modules/network/MessageProvider.java new file mode 100644 index 0000000..e204e24 --- /dev/null +++ b/src/main/java/org/blockserver/core/modules/network/MessageProvider.java @@ -0,0 +1,62 @@ +/* + * This file is part of BlockServer. + * + * BlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BlockServer 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with BlockServer. If not, see . + */ +package org.blockserver.core.modules.network; + +import org.blockserver.core.Server; +import org.blockserver.core.event.Priority; +import org.blockserver.core.event.ServerEventListener; +import org.blockserver.core.events.MessageHandleEvent; +import org.blockserver.core.events.RawPacketHandleEvent; +import org.blockserver.core.modules.message.Message; +import org.blockserver.core.modules.scheduler.SchedulerModule; + +/** + * Written by Exerosis! + */ +public class MessageProvider extends NetworkProvider { + private final NetworkConverter converter; + + public MessageProvider(Server server, SchedulerModule scheduler, NetworkConverter converter) { + super(server); + this.converter = converter; + new ServerEventListener() { + @Override + public void onEvent(RawPacketHandleEvent event) { + if (!event.isCancelled()) + getServer().getExecutorService().execute(() -> { + getServer().getEventManager().fire(new MessageHandleEvent<>(converter.toMessage(event.getPacket()))); + }); + } + }.post().priority(Priority.MONITOR).register(RawPacketHandleEvent.class, getServer()); + } + + public void queueInboundMessages(Message... messages) { + getServer().getExecutorService().execute(() -> { + for (Message message : messages) { + queueInboundPackets(converter.toPacket(message)); + } + }); + } + + public void queueOutboundMessages(Message... messages) { + getServer().getExecutorService().execute(() -> { + for (Message message : messages) { + queueOutboundPackets(converter.toPacket(message)); + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java index fe92d28..ef13002 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java @@ -18,7 +18,6 @@ import org.blockserver.core.modules.message.Message; -import org.blockserver.core.modules.player.Player; /** * Written by Exerosis! @@ -26,5 +25,6 @@ public interface NetworkConverter { RawPacket toPacket(Message message); - Message toMessage(RawPacket packet, Player player); + //As much as the player part might be helpful, I looked into it more and it will never actually be needed, also it makes for some huge problems. Sorry Jython buddy x) + Message toMessage(RawPacket packet); } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java index d6a623d..5e0bf0b 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java @@ -16,13 +16,11 @@ */ package org.blockserver.core.modules.network; -import lombok.Getter; import org.blockserver.core.Server; +import org.blockserver.core.events.RawPacketHandleEvent; import org.blockserver.core.module.Module; -import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashSet; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -33,20 +31,27 @@ public class NetworkProvider extends Module { private final BlockingQueue packetOutQueue = new LinkedBlockingQueue<>(); private final BlockingQueue packetInQueue = new LinkedBlockingQueue<>(); - @Getter private final NetworkConverter converter; - public NetworkProvider(Server server, NetworkConverter converter) { + public NetworkProvider(Server server) { super(server); - this.converter = converter; } public void queueOutboundPackets(RawPacket... packets) { - packetOutQueue.addAll(packets.length > 1 ? Arrays.asList(packets) : Collections.singletonList(packets[0])); + for (RawPacket packet : packets) { + getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { + if (!event.isCancelled()) + packetOutQueue.add(event.getPacket()); + }); + } } public void queueInboundPackets(RawPacket... packets) { - if (packets.length > 0) - getServer().getExecutorService().execute(() -> Collections.addAll(packetInQueue, packets)); + for (RawPacket packet : packets) { + getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { + if (!event.isCancelled()) + packetInQueue.add(event.getPacket()); + }); + } } public Collection receiveInboundPackets() { From 092310519ae868c2a770ac542f7840436814ca99 Mon Sep 17 00:00:00 2001 From: Exerosis Date: Tue, 12 Jan 2016 11:26:57 -0500 Subject: [PATCH 07/12] ~A failed attempt at networking... ;( --- .../core/modules/network/MessageProvider.java | 71 +++++++++++++++---- .../core/modules/network/NetworkProvider.java | 37 +--------- 2 files changed, 58 insertions(+), 50 deletions(-) diff --git a/src/main/java/org/blockserver/core/modules/network/MessageProvider.java b/src/main/java/org/blockserver/core/modules/network/MessageProvider.java index e204e24..3d76b05 100644 --- a/src/main/java/org/blockserver/core/modules/network/MessageProvider.java +++ b/src/main/java/org/blockserver/core/modules/network/MessageProvider.java @@ -24,39 +24,80 @@ import org.blockserver.core.modules.message.Message; import org.blockserver.core.modules.scheduler.SchedulerModule; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + /** * Written by Exerosis! */ public class MessageProvider extends NetworkProvider { + private final BlockingQueue messageOutQueue = new LinkedBlockingQueue<>(); + private final BlockingQueue messageInQueue = new LinkedBlockingQueue<>(); + private final SchedulerModule schedulerModule; private final NetworkConverter converter; + private final Runnable task; - public MessageProvider(Server server, SchedulerModule scheduler, NetworkConverter converter) { + public MessageProvider(Server server, SchedulerModule schedulerModule, NetworkConverter converter) { super(server); + this.schedulerModule = schedulerModule; this.converter = converter; + + task = () -> { + for (Message message : messageOutQueue) { + getServer().getEventManager().fire(new MessageHandleEvent<>(message)); + } + messageOutQueue.clear(); + }; + new ServerEventListener() { @Override public void onEvent(RawPacketHandleEvent event) { - if (!event.isCancelled()) - getServer().getExecutorService().execute(() -> { - getServer().getEventManager().fire(new MessageHandleEvent<>(converter.toMessage(event.getPacket()))); - }); + if (event.isCancelled()) + return; + + + getServer().getExecutorService().execute(() -> { + getServer().getEventManager().fire(new MessageHandleEvent<>(converter.toMessage(event.getPacket()))); + }); } }.post().priority(Priority.MONITOR).register(RawPacketHandleEvent.class, getServer()); } + @Override + public void queueInboundPackets(RawPacket... packets) { + super.queueInboundPackets(packets); + } + public void queueInboundMessages(Message... messages) { - getServer().getExecutorService().execute(() -> { - for (Message message : messages) { - queueInboundPackets(converter.toPacket(message)); - } - }); + Collections.addAll(messageInQueue, messages); } public void queueOutboundMessages(Message... messages) { - getServer().getExecutorService().execute(() -> { - for (Message message : messages) { - queueOutboundPackets(converter.toPacket(message)); - } - }); + Collections.addAll(messageOutQueue, messages); + } + + + @Override + public void onEnable() { + schedulerModule.registerTask(task, 1.0, Integer.MAX_VALUE); + super.onEnable(); + } + + @Override + public void onDisable() { + schedulerModule.cancelTask(task); + super.onDisable(); + } + + + public Collection getMessageInQueue() { + return new HashSet<>(messageOutQueue); + } + + public Collection getMessageOutQueue() { + return new HashSet<>(messageInQueue); } } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java index 5e0bf0b..d08776d 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java @@ -20,17 +20,10 @@ import org.blockserver.core.events.RawPacketHandleEvent; import org.blockserver.core.module.Module; -import java.util.Collection; -import java.util.HashSet; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; - /** * Written by Exerosis! */ public class NetworkProvider extends Module { - private final BlockingQueue packetOutQueue = new LinkedBlockingQueue<>(); - private final BlockingQueue packetInQueue = new LinkedBlockingQueue<>(); public NetworkProvider(Server server) { super(server); @@ -38,39 +31,13 @@ public NetworkProvider(Server server) { public void queueOutboundPackets(RawPacket... packets) { for (RawPacket packet : packets) { - getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { - if (!event.isCancelled()) - packetOutQueue.add(event.getPacket()); - }); + getServer().getEventManager().fire(new RawPacketHandleEvent(packet)); } } public void queueInboundPackets(RawPacket... packets) { for (RawPacket packet : packets) { - getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { - if (!event.isCancelled()) - packetInQueue.add(event.getPacket()); - }); + getServer().getEventManager().fire(new RawPacketHandleEvent(packet)); } } - - public Collection receiveInboundPackets() { - Collection messages = new HashSet<>(); - packetInQueue.drainTo(messages); - return messages; - } - - public Collection receiveOutboundPackets() { - Collection packets = new HashSet<>(); - packetOutQueue.drainTo(packets); - return packets; - } - - public Collection getPacketInQueue() { - return new HashSet<>(packetInQueue); - } - - public Collection getPacketOutQueue() { - return new HashSet<>(packetOutQueue); - } } \ No newline at end of file From a1e7181b9d517ad4896fb12117488b790790b37f Mon Sep 17 00:00:00 2001 From: Exerosis Date: Fri, 15 Jan 2016 10:28:52 -0500 Subject: [PATCH 08/12] ~A working attempt at networking, but I'm still not really happy with it, please help me out guys!!! --- .../core/module/loaders/CoreModuleLoader.java | 1 - .../core/modules/message/Message.java | 7 ++ .../core/modules/message/MessageModule.java | 3 - .../core/modules/network/MessageProvider.java | 70 ++++++++--------- .../core/modules/network/NetworkModule.java | 76 ------------------- .../core/modules/network/NetworkProvider.java | 43 ----------- .../core/modules/network/PacketProvider.java | 58 ++++++++++++++ .../core/modules/player/Player.java | 3 - .../core/modules/player/PlayerModule.java | 1 - .../modules/serverlist/ServerListModule.java | 1 - 10 files changed, 97 insertions(+), 166 deletions(-) delete mode 100644 src/main/java/org/blockserver/core/modules/network/NetworkModule.java delete mode 100644 src/main/java/org/blockserver/core/modules/network/NetworkProvider.java create mode 100644 src/main/java/org/blockserver/core/modules/network/PacketProvider.java diff --git a/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java b/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java index a5450c1..2a73bee 100644 --- a/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java +++ b/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java @@ -21,7 +21,6 @@ import org.blockserver.core.module.ModuleLoader; import org.blockserver.core.modules.logging.LoggingModule; import org.blockserver.core.modules.message.MessageModule; -import org.blockserver.core.modules.network.NetworkModule; import org.blockserver.core.modules.player.PlayerModule; import org.blockserver.core.modules.scheduler.SchedulerModule; diff --git a/src/main/java/org/blockserver/core/modules/message/Message.java b/src/main/java/org/blockserver/core/modules/message/Message.java index 4c29287..4a86642 100644 --- a/src/main/java/org/blockserver/core/modules/message/Message.java +++ b/src/main/java/org/blockserver/core/modules/message/Message.java @@ -24,9 +24,16 @@ * Written by Exerosis! */ public class Message { + @Getter final private boolean async; @Getter @Setter private Player player; public Message(Player player) { this.player = player; + async = false; + } + + public Message(Player player, boolean async) { + this.player = player; + this.async = async; } } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/message/MessageModule.java b/src/main/java/org/blockserver/core/modules/message/MessageModule.java index 1d7363e..98d8c87 100644 --- a/src/main/java/org/blockserver/core/modules/message/MessageModule.java +++ b/src/main/java/org/blockserver/core/modules/message/MessageModule.java @@ -19,9 +19,6 @@ import org.blockserver.core.Server; import org.blockserver.core.events.MessageHandleEvent; import org.blockserver.core.events.RawPacketHandleEvent; -import org.blockserver.core.modules.network.NetworkConverter; -import org.blockserver.core.modules.network.NetworkModule; -import org.blockserver.core.modules.network.NetworkProvider; import org.blockserver.core.modules.player.Player; import org.blockserver.core.modules.player.PlayerModule; import org.blockserver.core.modules.scheduler.SchedulerModule; diff --git a/src/main/java/org/blockserver/core/modules/network/MessageProvider.java b/src/main/java/org/blockserver/core/modules/network/MessageProvider.java index 3d76b05..e8f6ab2 100644 --- a/src/main/java/org/blockserver/core/modules/network/MessageProvider.java +++ b/src/main/java/org/blockserver/core/modules/network/MessageProvider.java @@ -17,15 +17,12 @@ package org.blockserver.core.modules.network; import org.blockserver.core.Server; -import org.blockserver.core.event.Priority; -import org.blockserver.core.event.ServerEventListener; import org.blockserver.core.events.MessageHandleEvent; import org.blockserver.core.events.RawPacketHandleEvent; import org.blockserver.core.modules.message.Message; import org.blockserver.core.modules.scheduler.SchedulerModule; import java.util.Collection; -import java.util.Collections; import java.util.HashSet; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -33,53 +30,55 @@ /** * Written by Exerosis! */ -public class MessageProvider extends NetworkProvider { - private final BlockingQueue messageOutQueue = new LinkedBlockingQueue<>(); +public class MessageProvider extends PacketProvider { private final BlockingQueue messageInQueue = new LinkedBlockingQueue<>(); - private final SchedulerModule schedulerModule; + private final BlockingQueue messageOutQueue = new LinkedBlockingQueue<>(); private final NetworkConverter converter; private final Runnable task; + private SchedulerModule schedulerModule; - public MessageProvider(Server server, SchedulerModule schedulerModule, NetworkConverter converter) { + public MessageProvider(Server server, NetworkConverter converter, SchedulerModule schedulerModule) { super(server); - this.schedulerModule = schedulerModule; this.converter = converter; - + this.schedulerModule = schedulerModule; task = () -> { - for (Message message : messageOutQueue) { + for (Message message : messageOutQueue) + getServer().getEventManager().fire(new MessageHandleEvent<>(message), event -> { + if (!event.isCancelled()) + getServer().getExecutorService().execute(() -> queueOutboundPacket(converter.toPacket(event.getMessage()))); + }); + + for (Message message : messageInQueue) getServer().getEventManager().fire(new MessageHandleEvent<>(message)); - } - messageOutQueue.clear(); + messageInQueue.clear(); }; - - new ServerEventListener() { - @Override - public void onEvent(RawPacketHandleEvent event) { - if (event.isCancelled()) - return; - - - getServer().getExecutorService().execute(() -> { - getServer().getEventManager().fire(new MessageHandleEvent<>(converter.toMessage(event.getPacket()))); - }); - } - }.post().priority(Priority.MONITOR).register(RawPacketHandleEvent.class, getServer()); } - @Override - public void queueInboundPackets(RawPacket... packets) { - super.queueInboundPackets(packets); + public void queueOutboundMessage(Message message) { + if (message.isAsync()) { + getServer().getEventManager().fire(new MessageHandleEvent<>(message), event -> { + if (!event.isCancelled()) + getServer().getExecutorService().execute(() -> queueOutboundPacket(converter.toPacket(event.getMessage()))); + }); + } else + messageOutQueue.add(message); } - public void queueInboundMessages(Message... messages) { - Collections.addAll(messageInQueue, messages); + public void queueInboundMessage(Message message) { + if (message.isAsync()) + getServer().getEventManager().fire(new MessageHandleEvent<>(message)); + else + messageInQueue.add(message); } - public void queueOutboundMessages(Message... messages) { - Collections.addAll(messageOutQueue, messages); + @Override + public void queueInboundPacket(RawPacket packet) { + getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { + if (!event.isCancelled()) + getServer().getExecutorService().execute(() -> queueInboundMessage(converter.toMessage(packet))); + }); } - @Override public void onEnable() { schedulerModule.registerTask(task, 1.0, Integer.MAX_VALUE); @@ -92,12 +91,7 @@ public void onDisable() { super.onDisable(); } - public Collection getMessageInQueue() { - return new HashSet<>(messageOutQueue); - } - - public Collection getMessageOutQueue() { return new HashSet<>(messageInQueue); } } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkModule.java b/src/main/java/org/blockserver/core/modules/network/NetworkModule.java deleted file mode 100644 index 882a8ce..0000000 --- a/src/main/java/org/blockserver/core/modules/network/NetworkModule.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of BlockServer. - * - * BlockServer is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * BlockServer 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with BlockServer. If not, see . - */ -package org.blockserver.core.modules.network; - -import lombok.Getter; -import org.blockserver.core.Server; -import org.blockserver.core.events.RawPacketHandleEvent; -import org.blockserver.core.module.Module; -import org.blockserver.core.modules.scheduler.SchedulerModule; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -/** - * Written by Exerosis! - */ -public class NetworkModule extends Module { - private final SchedulerModule schedulerModule; - private final Set providers = Collections.synchronizedSet(new HashSet<>()); - @Getter protected Runnable task; - - public NetworkModule(Server server, SchedulerModule schedulerModule) { - super(server); - this.schedulerModule = schedulerModule; - task = () -> { - for (NetworkProvider provider : providers) { - provider.receiveInboundPackets().forEach(p -> getServer().getEventManager().fire(new RawPacketHandleEvent(p))); - } - }; - } - - public void broadcastPackets(RawPacket... packets) { - for (NetworkProvider provider : providers) { - provider.queueOutboundPackets(packets); - } - } - - public void sendPackets(NetworkProvider provider, RawPacket... packets) { - provider.queueOutboundPackets(packets); - } - - public void registerProvider(NetworkProvider provider) { - providers.add(provider); - } - - @Override - public void onEnable() { - schedulerModule.registerTask(task, 1.0, Integer.MAX_VALUE); - super.onEnable(); - } - - @Override - public void onDisable() { - schedulerModule.cancelTask(task); - super.onDisable(); - } - - public Set getProviders() { - return Collections.unmodifiableSet(providers); - } -} \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java deleted file mode 100644 index d08776d..0000000 --- a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is part of BlockServer. - * - * BlockServer is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * BlockServer 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with BlockServer. If not, see . - */ -package org.blockserver.core.modules.network; - -import org.blockserver.core.Server; -import org.blockserver.core.events.RawPacketHandleEvent; -import org.blockserver.core.module.Module; - -/** - * Written by Exerosis! - */ -public class NetworkProvider extends Module { - - public NetworkProvider(Server server) { - super(server); - } - - public void queueOutboundPackets(RawPacket... packets) { - for (RawPacket packet : packets) { - getServer().getEventManager().fire(new RawPacketHandleEvent(packet)); - } - } - - public void queueInboundPackets(RawPacket... packets) { - for (RawPacket packet : packets) { - getServer().getEventManager().fire(new RawPacketHandleEvent(packet)); - } - } -} \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/PacketProvider.java b/src/main/java/org/blockserver/core/modules/network/PacketProvider.java new file mode 100644 index 0000000..c2ac6b6 --- /dev/null +++ b/src/main/java/org/blockserver/core/modules/network/PacketProvider.java @@ -0,0 +1,58 @@ +/* + * This file is part of BlockServer. + * + * BlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BlockServer 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with BlockServer. If not, see . + */ +package org.blockserver.core.modules.network; + +import org.blockserver.core.Server; +import org.blockserver.core.events.RawPacketHandleEvent; +import org.blockserver.core.module.Module; + +import java.util.Collection; +import java.util.HashSet; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * Written by Exerosis! + */ +public class PacketProvider extends Module { + private final BlockingQueue packetOutQueue = new LinkedBlockingQueue<>(); + + public PacketProvider(Server server) { + super(server); + } + + public void queueOutboundPacket(RawPacket packet) { + getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { + if (!event.isCancelled()) + packetOutQueue.add(event.getPacket()); + }); + } + + public void queueInboundPacket(RawPacket packet) { + getServer().getEventManager().fire(new RawPacketHandleEvent(packet)); + } + + public Collection receiveOutboundPackets() { + Collection packets = new HashSet<>(); + packetOutQueue.drainTo(packets); + return packets; + } + + public Collection getMessageOutQueue() { + return new HashSet<>(packetOutQueue); + } +} diff --git a/src/main/java/org/blockserver/core/modules/player/Player.java b/src/main/java/org/blockserver/core/modules/player/Player.java index ce3dc3a..44a1445 100644 --- a/src/main/java/org/blockserver/core/modules/player/Player.java +++ b/src/main/java/org/blockserver/core/modules/player/Player.java @@ -22,9 +22,6 @@ import org.blockserver.core.events.MessageHandleEvent; import org.blockserver.core.modules.message.Message; import org.blockserver.core.modules.message.PlayerLoginMessage; -import org.blockserver.core.modules.message.block.MessageOutBlockChange; -import org.blockserver.core.modules.network.NetworkModule; -import org.blockserver.core.modules.network.NetworkProvider; import org.blockserver.core.modules.world.positions.Location; import org.blockserver.core.utilities.Skin; diff --git a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java index 5578d57..ef43ab8 100644 --- a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java +++ b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java @@ -19,7 +19,6 @@ import org.blockserver.core.Server; import org.blockserver.core.module.Module; import org.blockserver.core.modules.logging.LoggingModule; -import org.blockserver.core.modules.network.NetworkProvider; import java.net.InetSocketAddress; import java.util.Collections; diff --git a/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java b/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java index 42faf2b..2ecb12b 100644 --- a/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java +++ b/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java @@ -21,7 +21,6 @@ import org.blockserver.core.event.EventListener; import org.blockserver.core.events.RawPacketHandleEvent; import org.blockserver.core.module.Module; -import org.blockserver.core.modules.network.NetworkModule; import org.blockserver.core.modules.scheduler.SchedulerModule; /** From ce3d5a5537b021dbbc13bee3a29a3e9224faa075 Mon Sep 17 00:00:00 2001 From: butcher211 Date: Sun, 17 Jan 2016 11:47:04 +0100 Subject: [PATCH 09/12] added javadocs, implemented setBlockMaterial in WorldModule --- .../java/org/blockserver/core/module/Module.java | 3 ++- .../core/modules/logging/LoggingModule.java | 1 + .../org/blockserver/core/modules/world/Block.java | 13 +++++++++++++ .../org/blockserver/core/modules/world/Chunk.java | 2 ++ .../core/modules/world/ChunkProvider.java | 2 ++ .../blockserver/core/modules/world/Material.java | 3 +++ .../org/blockserver/core/modules/world/World.java | 4 ++-- .../blockserver/core/modules/world/WorldModule.java | 9 +++++++-- 8 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/blockserver/core/module/Module.java b/src/main/java/org/blockserver/core/module/Module.java index ec6a7e0..59b9d6f 100644 --- a/src/main/java/org/blockserver/core/module/Module.java +++ b/src/main/java/org/blockserver/core/module/Module.java @@ -20,9 +20,10 @@ import org.blockserver.core.Server; /** - * Base class for all modules. + * Base class for all modules. New modules should implement this class. * * @author BlockServer Team + * @see org.blockserver.core.modules */ public class Module implements EnableableImplementation { @Getter private final Server server; diff --git a/src/main/java/org/blockserver/core/modules/logging/LoggingModule.java b/src/main/java/org/blockserver/core/modules/logging/LoggingModule.java index 7f771f9..159cce0 100644 --- a/src/main/java/org/blockserver/core/modules/logging/LoggingModule.java +++ b/src/main/java/org/blockserver/core/modules/logging/LoggingModule.java @@ -20,6 +20,7 @@ import org.blockserver.core.module.Module; /** + * Logging Module with different log levels. (debug, info, warn, error) * TODO: Implement SLF4j and/or log4j2 * * @author BlockServer Team diff --git a/src/main/java/org/blockserver/core/modules/world/Block.java b/src/main/java/org/blockserver/core/modules/world/Block.java index 915498d..49db34d 100644 --- a/src/main/java/org/blockserver/core/modules/world/Block.java +++ b/src/main/java/org/blockserver/core/modules/world/Block.java @@ -23,6 +23,8 @@ /** * Written by Exerosis! + * + * @see World */ public class Block { @Getter private World world; @@ -30,10 +32,21 @@ public class Block { @Getter private byte lightLevel; @Getter private Vector vector; + /** + * Sets lightlevel between 0 and 15. + * + * @param lightLevel block lightlevel + */ public void setLightLevel(byte lightLevel) { this.lightLevel = lightLevel; } + /** + * Sets block material. + * + * @param material block material + * @see Material + */ public void setMaterial(Material material) { this.material = material; for (Player player : world.getPlayers()) { diff --git a/src/main/java/org/blockserver/core/modules/world/Chunk.java b/src/main/java/org/blockserver/core/modules/world/Chunk.java index f66c5aa..6e59d6a 100644 --- a/src/main/java/org/blockserver/core/modules/world/Chunk.java +++ b/src/main/java/org/blockserver/core/modules/world/Chunk.java @@ -18,6 +18,8 @@ /** * Written by Exerosis! + * + * @see World */ public class Chunk { public Block getBlockAt(int x, int y, int z) { diff --git a/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java b/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java index 50e341f..7e1fe82 100644 --- a/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java +++ b/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java @@ -18,6 +18,8 @@ /** * Written by Exerosis! + * + * @see World */ public interface ChunkProvider { Chunk loadChunkAt(int x, int y); diff --git a/src/main/java/org/blockserver/core/modules/world/Material.java b/src/main/java/org/blockserver/core/modules/world/Material.java index e6b7a93..40fd831 100644 --- a/src/main/java/org/blockserver/core/modules/world/Material.java +++ b/src/main/java/org/blockserver/core/modules/world/Material.java @@ -18,6 +18,9 @@ /** * Written by Exerosis! + * + * @see World + * @see Block */ public enum Material { } diff --git a/src/main/java/org/blockserver/core/modules/world/World.java b/src/main/java/org/blockserver/core/modules/world/World.java index d47550a..aa7dafe 100644 --- a/src/main/java/org/blockserver/core/modules/world/World.java +++ b/src/main/java/org/blockserver/core/modules/world/World.java @@ -25,6 +25,8 @@ /** * Written by Exerosis! + * + * @see World */ public class World { @Getter private Server server; @@ -34,6 +36,4 @@ public class World { public World(Server server) { this.server = server; } - - } diff --git a/src/main/java/org/blockserver/core/modules/world/WorldModule.java b/src/main/java/org/blockserver/core/modules/world/WorldModule.java index 4b1facd..6ce5738 100644 --- a/src/main/java/org/blockserver/core/modules/world/WorldModule.java +++ b/src/main/java/org/blockserver/core/modules/world/WorldModule.java @@ -27,8 +27,13 @@ public WorldModule(Server server) { super(server); } - + /** + * Setter method for block material. + * + * @param block Block which's material will be set. + * @param material material of the block + */ public void setBlockMaterial(Block block, Material material) { - + block.setMaterial(material); } } \ No newline at end of file From f8b19f2e9a96f7303504c6961bffcccdc9a5ebbf Mon Sep 17 00:00:00 2001 From: butcher211 Date: Sun, 17 Jan 2016 12:11:25 +0100 Subject: [PATCH 10/12] added some basic javadocs to make it easier later --- src/main/java/org/blockserver/core/module/Enableable.java | 2 ++ .../blockserver/core/module/EnableableImplementation.java | 4 ++++ src/main/java/org/blockserver/core/module/Module.java | 1 + src/main/java/org/blockserver/core/module/ModuleLoader.java | 4 ++++ .../blockserver/core/module/loaders/CoreModuleLoader.java | 4 ++++ .../org/blockserver/core/module/loaders/JarModuleLoader.java | 3 +++ .../java/org/blockserver/core/modules/entity/Entity.java | 2 ++ .../org/blockserver/core/modules/logging/LoggingModule.java | 1 + .../java/org/blockserver/core/modules/player/Player.java | 1 + .../org/blockserver/core/modules/player/PlayerModule.java | 3 +++ .../blockserver/core/modules/scheduler/SchedulerModule.java | 3 +++ .../org/blockserver/core/modules/scheduler/TaskData.java | 3 +++ .../core/modules/serverlist/ServerListModule.java | 3 +++ src/main/java/org/blockserver/core/modules/world/Block.java | 3 ++- src/main/java/org/blockserver/core/modules/world/Chunk.java | 3 ++- .../org/blockserver/core/modules/world/ChunkProvider.java | 3 ++- .../java/org/blockserver/core/modules/world/Material.java | 4 ++-- src/main/java/org/blockserver/core/modules/world/World.java | 3 ++- .../java/org/blockserver/core/modules/world/WorldModule.java | 5 +++++ .../blockserver/core/modules/world/positions/Location.java | 4 ++++ .../org/blockserver/core/modules/world/positions/Vector.java | 3 +++ 21 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/blockserver/core/module/Enableable.java b/src/main/java/org/blockserver/core/module/Enableable.java index 0f0df91..e36ae74 100644 --- a/src/main/java/org/blockserver/core/module/Enableable.java +++ b/src/main/java/org/blockserver/core/module/Enableable.java @@ -18,6 +18,8 @@ /** * Written by Exerosis! + * + * @author BlockServer Team */ public interface Enableable { void onEnable(); diff --git a/src/main/java/org/blockserver/core/module/EnableableImplementation.java b/src/main/java/org/blockserver/core/module/EnableableImplementation.java index 1d5c9e8..ada3d8a 100644 --- a/src/main/java/org/blockserver/core/module/EnableableImplementation.java +++ b/src/main/java/org/blockserver/core/module/EnableableImplementation.java @@ -19,6 +19,10 @@ import java.util.Map; import java.util.WeakHashMap; +/** + * @author BlockServer Team + * @see org.blockserver.core.module.Enableable + */ public interface EnableableImplementation extends Enableable { Map instances = new WeakHashMap<>(); diff --git a/src/main/java/org/blockserver/core/module/Module.java b/src/main/java/org/blockserver/core/module/Module.java index 59b9d6f..15d0f6a 100644 --- a/src/main/java/org/blockserver/core/module/Module.java +++ b/src/main/java/org/blockserver/core/module/Module.java @@ -24,6 +24,7 @@ * * @author BlockServer Team * @see org.blockserver.core.modules + * @see org.blockserver.core.module.EnableableImplementation */ public class Module implements EnableableImplementation { @Getter private final Server server; diff --git a/src/main/java/org/blockserver/core/module/ModuleLoader.java b/src/main/java/org/blockserver/core/module/ModuleLoader.java index 9abd781..d9fad96 100644 --- a/src/main/java/org/blockserver/core/module/ModuleLoader.java +++ b/src/main/java/org/blockserver/core/module/ModuleLoader.java @@ -20,6 +20,10 @@ import java.util.Collection; +/** + * @author BlockServer Team + * @see org.blockserver.core.module.loaders + */ public interface ModuleLoader { Collection setModules(Collection currentModules, Server server); } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java b/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java index 2a73bee..aec50ae 100644 --- a/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java +++ b/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java @@ -26,6 +26,10 @@ import java.util.Collection; +/** + * @author BlockServer Team + * @see org.blockserver.core.module.ModuleLoader + */ public class CoreModuleLoader implements ModuleLoader { @Override diff --git a/src/main/java/org/blockserver/core/module/loaders/JarModuleLoader.java b/src/main/java/org/blockserver/core/module/loaders/JarModuleLoader.java index e884ea7..7ae140f 100644 --- a/src/main/java/org/blockserver/core/module/loaders/JarModuleLoader.java +++ b/src/main/java/org/blockserver/core/module/loaders/JarModuleLoader.java @@ -33,6 +33,9 @@ /** * Module Loader that can load modules from JARs + * + * @author BlockServer Team + * @see org.blockserver.core.module.ModuleLoader */ public class JarModuleLoader implements ModuleLoader { @Override diff --git a/src/main/java/org/blockserver/core/modules/entity/Entity.java b/src/main/java/org/blockserver/core/modules/entity/Entity.java index 958b5a9..78eadd0 100644 --- a/src/main/java/org/blockserver/core/modules/entity/Entity.java +++ b/src/main/java/org/blockserver/core/modules/entity/Entity.java @@ -20,6 +20,8 @@ /** * Written by Exerosis! + * + * @author BlockServer Team */ public class Entity { private float x; diff --git a/src/main/java/org/blockserver/core/modules/logging/LoggingModule.java b/src/main/java/org/blockserver/core/modules/logging/LoggingModule.java index 159cce0..cfe58be 100644 --- a/src/main/java/org/blockserver/core/modules/logging/LoggingModule.java +++ b/src/main/java/org/blockserver/core/modules/logging/LoggingModule.java @@ -24,6 +24,7 @@ * TODO: Implement SLF4j and/or log4j2 * * @author BlockServer Team + * @see org.blockserver.core.module.Module */ public class LoggingModule extends Module { diff --git a/src/main/java/org/blockserver/core/modules/player/Player.java b/src/main/java/org/blockserver/core/modules/player/Player.java index 44a1445..76eefea 100644 --- a/src/main/java/org/blockserver/core/modules/player/Player.java +++ b/src/main/java/org/blockserver/core/modules/player/Player.java @@ -32,6 +32,7 @@ * Represents a Player on the server. * * @author BlockServer Team + * @see PlayerModule */ public class Player { @Getter private final Server server; diff --git a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java index ef43ab8..81b3cfc 100644 --- a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java +++ b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java @@ -28,6 +28,9 @@ /** * Module that handles players. + * + * @author BlockServer Team + * @see org.blockserver.core.module.Module */ public class PlayerModule extends Module { private final Set players = Collections.synchronizedSet(new HashSet<>()); diff --git a/src/main/java/org/blockserver/core/modules/scheduler/SchedulerModule.java b/src/main/java/org/blockserver/core/modules/scheduler/SchedulerModule.java index 9618082..6604800 100644 --- a/src/main/java/org/blockserver/core/modules/scheduler/SchedulerModule.java +++ b/src/main/java/org/blockserver/core/modules/scheduler/SchedulerModule.java @@ -25,6 +25,9 @@ /** * Written by Exerosis! + * + * @author BlockServer Team + * @see org.blockserver.core.module.Module */ public class SchedulerModule extends Module { @Getter private final Map tasks = new HashMap<>(); diff --git a/src/main/java/org/blockserver/core/modules/scheduler/TaskData.java b/src/main/java/org/blockserver/core/modules/scheduler/TaskData.java index 64cb663..55e20ff 100644 --- a/src/main/java/org/blockserver/core/modules/scheduler/TaskData.java +++ b/src/main/java/org/blockserver/core/modules/scheduler/TaskData.java @@ -21,6 +21,9 @@ /** * Written by Exerosis! + * + * @author BlockServer Team + * @see SchedulerModule */ public class TaskData { @Getter @Setter protected long lastTickTime; diff --git a/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java b/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java index 2ecb12b..cad327f 100644 --- a/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java +++ b/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java @@ -25,6 +25,9 @@ /** * Written by Exerosis! + * + * @author BlockServer Team + * @see org.blockserver.core.module.Module */ public class ServerListModule extends Module { private final SchedulerModule schedulerModule; diff --git a/src/main/java/org/blockserver/core/modules/world/Block.java b/src/main/java/org/blockserver/core/modules/world/Block.java index 49db34d..6d5d2d6 100644 --- a/src/main/java/org/blockserver/core/modules/world/Block.java +++ b/src/main/java/org/blockserver/core/modules/world/Block.java @@ -24,7 +24,8 @@ /** * Written by Exerosis! * - * @see World + * @author BlockServer Team + * @see WorldModule */ public class Block { @Getter private World world; diff --git a/src/main/java/org/blockserver/core/modules/world/Chunk.java b/src/main/java/org/blockserver/core/modules/world/Chunk.java index 6e59d6a..b2d1043 100644 --- a/src/main/java/org/blockserver/core/modules/world/Chunk.java +++ b/src/main/java/org/blockserver/core/modules/world/Chunk.java @@ -19,7 +19,8 @@ /** * Written by Exerosis! * - * @see World + * @author BlockServer Team + * @see WorldModule */ public class Chunk { public Block getBlockAt(int x, int y, int z) { diff --git a/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java b/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java index 7e1fe82..80f8cc3 100644 --- a/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java +++ b/src/main/java/org/blockserver/core/modules/world/ChunkProvider.java @@ -19,7 +19,8 @@ /** * Written by Exerosis! * - * @see World + * @author BlockServer Team + * @see WorldModule */ public interface ChunkProvider { Chunk loadChunkAt(int x, int y); diff --git a/src/main/java/org/blockserver/core/modules/world/Material.java b/src/main/java/org/blockserver/core/modules/world/Material.java index 40fd831..86138bf 100644 --- a/src/main/java/org/blockserver/core/modules/world/Material.java +++ b/src/main/java/org/blockserver/core/modules/world/Material.java @@ -19,8 +19,8 @@ /** * Written by Exerosis! * - * @see World - * @see Block + * @author BlockServer Team + * @see WorldModule */ public enum Material { } diff --git a/src/main/java/org/blockserver/core/modules/world/World.java b/src/main/java/org/blockserver/core/modules/world/World.java index aa7dafe..a9935d4 100644 --- a/src/main/java/org/blockserver/core/modules/world/World.java +++ b/src/main/java/org/blockserver/core/modules/world/World.java @@ -26,7 +26,8 @@ /** * Written by Exerosis! * - * @see World + * @author BlockServer Team + * @see WorldModule */ public class World { @Getter private Server server; diff --git a/src/main/java/org/blockserver/core/modules/world/WorldModule.java b/src/main/java/org/blockserver/core/modules/world/WorldModule.java index 6ce5738..c2ca445 100644 --- a/src/main/java/org/blockserver/core/modules/world/WorldModule.java +++ b/src/main/java/org/blockserver/core/modules/world/WorldModule.java @@ -21,6 +21,9 @@ /** * Written by Exerosis! + * + * @author BlockServer Team + * @see org.blockserver.core.module.Module */ public class WorldModule extends Module { public WorldModule(Server server) { @@ -36,4 +39,6 @@ public WorldModule(Server server) { public void setBlockMaterial(Block block, Material material) { block.setMaterial(material); } + + } \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/world/positions/Location.java b/src/main/java/org/blockserver/core/modules/world/positions/Location.java index 009222e..42a8551 100644 --- a/src/main/java/org/blockserver/core/modules/world/positions/Location.java +++ b/src/main/java/org/blockserver/core/modules/world/positions/Location.java @@ -20,6 +20,10 @@ /** * Written by Exerosis! + * + * @author BlockServer Team + * @see org.blockserver.core.modules.world.positions.Vector + * @see org.blockserver.core.modules.world.WorldModule */ public class Location extends Vector { @Getter long yaw; diff --git a/src/main/java/org/blockserver/core/modules/world/positions/Vector.java b/src/main/java/org/blockserver/core/modules/world/positions/Vector.java index 93819cc..d668fad 100644 --- a/src/main/java/org/blockserver/core/modules/world/positions/Vector.java +++ b/src/main/java/org/blockserver/core/modules/world/positions/Vector.java @@ -20,6 +20,9 @@ /** * Written by Exerosis! + * + * @author BlockServer Team + * @see org.blockserver.core.modules.world.WorldModule */ public class Vector { @Getter float x; From b07c1b696a86a354a1dd94e9f46a2edc08ddfd89 Mon Sep 17 00:00:00 2001 From: jython234 Date: Mon, 25 Jan 2016 16:47:03 -0600 Subject: [PATCH 11/12] Set the base for the network rewrite. --- .../core/module/loaders/CoreModuleLoader.java | 4 +- .../core/modules/message/MessageModule.java | 60 ------------ .../core/modules/network/MessageProvider.java | 97 ------------------- .../core/modules/network/NetworkModule.java | 42 ++++++++ ...orkConverter.java => NetworkProvider.java} | 13 +-- .../core/modules/network/PacketProvider.java | 58 ----------- .../core/modules/player/Player.java | 4 +- .../core/modules/player/PlayerModule.java | 1 + .../modules/serverlist/ServerListModule.java | 65 ------------- .../org/blockserver/core/utilities/Skin.java | 16 +++ 10 files changed, 67 insertions(+), 293 deletions(-) delete mode 100644 src/main/java/org/blockserver/core/modules/message/MessageModule.java delete mode 100644 src/main/java/org/blockserver/core/modules/network/MessageProvider.java create mode 100644 src/main/java/org/blockserver/core/modules/network/NetworkModule.java rename src/main/java/org/blockserver/core/modules/network/{NetworkConverter.java => NetworkProvider.java} (67%) delete mode 100644 src/main/java/org/blockserver/core/modules/network/PacketProvider.java delete mode 100644 src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java diff --git a/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java b/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java index aec50ae..b7ff540 100644 --- a/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java +++ b/src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java @@ -20,7 +20,7 @@ import org.blockserver.core.module.Module; import org.blockserver.core.module.ModuleLoader; import org.blockserver.core.modules.logging.LoggingModule; -import org.blockserver.core.modules.message.MessageModule; +import org.blockserver.core.modules.network.NetworkModule; import org.blockserver.core.modules.player.PlayerModule; import org.blockserver.core.modules.scheduler.SchedulerModule; @@ -37,7 +37,7 @@ public Collection setModules(Collection currentModules, Server s LoggingModule loggingModule = new LoggingModule(server); SchedulerModule schedulerModule = new SchedulerModule(server); PlayerModule playerModule = new PlayerModule(server); - NetworkModule networkModule = new MessageModule(server, schedulerModule); + NetworkModule networkModule = new NetworkModule(server, schedulerModule); currentModules.add(loggingModule); currentModules.add(schedulerModule); diff --git a/src/main/java/org/blockserver/core/modules/message/MessageModule.java b/src/main/java/org/blockserver/core/modules/message/MessageModule.java deleted file mode 100644 index 98d8c87..0000000 --- a/src/main/java/org/blockserver/core/modules/message/MessageModule.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of BlockServer. - * - * BlockServer is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * BlockServer 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with BlockServer. If not, see . - */ -package org.blockserver.core.modules.message; - -import org.blockserver.core.Server; -import org.blockserver.core.events.MessageHandleEvent; -import org.blockserver.core.events.RawPacketHandleEvent; -import org.blockserver.core.modules.player.Player; -import org.blockserver.core.modules.player.PlayerModule; -import org.blockserver.core.modules.scheduler.SchedulerModule; - -/** - * Written by Exerosis! - */ -public class MessageModule extends NetworkModule { - - //TODO figure out a way to make the converter part async. - public MessageModule(Server server, SchedulerModule schedulerModule) { - super(server, schedulerModule); - task = () -> { - for (NetworkProvider provider : getProviders()) { - provider.receiveInboundPackets().forEach(packet -> { - getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { - if (!event.isCancelled()) { - Player player = getServer().getModule(PlayerModule.class).getPlayer(event.getPacket().getAddress()); - if(player != null) { - getServer().getEventManager().fire(new MessageHandleEvent<>(provider.getConverter().toMessage(event.getPacket(), player))); - } - } - }); - }); - } - }; - } - - - /* - public void sendMessage(Message message) { - getServer().getExecutorService().execute(() -> { - for (NetworkProvider provider : getProviders()) { - provider.queueOutboundPackets(networkConverter.toPacket(message)); - } - }); - } - */ -} diff --git a/src/main/java/org/blockserver/core/modules/network/MessageProvider.java b/src/main/java/org/blockserver/core/modules/network/MessageProvider.java deleted file mode 100644 index e8f6ab2..0000000 --- a/src/main/java/org/blockserver/core/modules/network/MessageProvider.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * This file is part of BlockServer. - * - * BlockServer is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * BlockServer 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with BlockServer. If not, see . - */ -package org.blockserver.core.modules.network; - -import org.blockserver.core.Server; -import org.blockserver.core.events.MessageHandleEvent; -import org.blockserver.core.events.RawPacketHandleEvent; -import org.blockserver.core.modules.message.Message; -import org.blockserver.core.modules.scheduler.SchedulerModule; - -import java.util.Collection; -import java.util.HashSet; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; - -/** - * Written by Exerosis! - */ -public class MessageProvider extends PacketProvider { - private final BlockingQueue messageInQueue = new LinkedBlockingQueue<>(); - private final BlockingQueue messageOutQueue = new LinkedBlockingQueue<>(); - private final NetworkConverter converter; - private final Runnable task; - private SchedulerModule schedulerModule; - - public MessageProvider(Server server, NetworkConverter converter, SchedulerModule schedulerModule) { - super(server); - this.converter = converter; - this.schedulerModule = schedulerModule; - task = () -> { - for (Message message : messageOutQueue) - getServer().getEventManager().fire(new MessageHandleEvent<>(message), event -> { - if (!event.isCancelled()) - getServer().getExecutorService().execute(() -> queueOutboundPacket(converter.toPacket(event.getMessage()))); - }); - - for (Message message : messageInQueue) - getServer().getEventManager().fire(new MessageHandleEvent<>(message)); - messageInQueue.clear(); - }; - } - - public void queueOutboundMessage(Message message) { - if (message.isAsync()) { - getServer().getEventManager().fire(new MessageHandleEvent<>(message), event -> { - if (!event.isCancelled()) - getServer().getExecutorService().execute(() -> queueOutboundPacket(converter.toPacket(event.getMessage()))); - }); - } else - messageOutQueue.add(message); - } - - public void queueInboundMessage(Message message) { - if (message.isAsync()) - getServer().getEventManager().fire(new MessageHandleEvent<>(message)); - else - messageInQueue.add(message); - } - - @Override - public void queueInboundPacket(RawPacket packet) { - getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { - if (!event.isCancelled()) - getServer().getExecutorService().execute(() -> queueInboundMessage(converter.toMessage(packet))); - }); - } - - @Override - public void onEnable() { - schedulerModule.registerTask(task, 1.0, Integer.MAX_VALUE); - super.onEnable(); - } - - @Override - public void onDisable() { - schedulerModule.cancelTask(task); - super.onDisable(); - } - - public Collection getMessageInQueue() { - return new HashSet<>(messageInQueue); - } -} \ No newline at end of file diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkModule.java b/src/main/java/org/blockserver/core/modules/network/NetworkModule.java new file mode 100644 index 0000000..d3d85dc --- /dev/null +++ b/src/main/java/org/blockserver/core/modules/network/NetworkModule.java @@ -0,0 +1,42 @@ +/* + * This file is part of BlockServer. + * + * BlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BlockServer 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with BlockServer. If not, see . + */ +package org.blockserver.core.modules.network; + +import org.blockserver.core.Server; +import org.blockserver.core.module.Module; +import org.blockserver.core.modules.message.Message; +import org.blockserver.core.modules.scheduler.SchedulerModule; + +/** + * Created by atzei on 1/25/2016. + */ +public class NetworkModule extends Module{ + private SchedulerModule scheduler; + + public NetworkModule(Server server, SchedulerModule scheduler) { + super(server); + this.scheduler = scheduler; + } + + public void sendPackets(NetworkProvider provider, RawPacket... packets) { + + } + + public void sendMessages(NetworkProvider provider, Message... messages) { + + } +} diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java similarity index 67% rename from src/main/java/org/blockserver/core/modules/network/NetworkConverter.java rename to src/main/java/org/blockserver/core/modules/network/NetworkProvider.java index ef13002..ecefcba 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java @@ -16,15 +16,8 @@ */ package org.blockserver.core.modules.network; - -import org.blockserver.core.modules.message.Message; - /** - * Written by Exerosis! + * Created by atzei on 1/25/2016. */ -public interface NetworkConverter { - RawPacket toPacket(Message message); - - //As much as the player part might be helpful, I looked into it more and it will never actually be needed, also it makes for some huge problems. Sorry Jython buddy x) - Message toMessage(RawPacket packet); -} \ No newline at end of file +public abstract class NetworkProvider { +} diff --git a/src/main/java/org/blockserver/core/modules/network/PacketProvider.java b/src/main/java/org/blockserver/core/modules/network/PacketProvider.java deleted file mode 100644 index c2ac6b6..0000000 --- a/src/main/java/org/blockserver/core/modules/network/PacketProvider.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of BlockServer. - * - * BlockServer is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * BlockServer 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with BlockServer. If not, see . - */ -package org.blockserver.core.modules.network; - -import org.blockserver.core.Server; -import org.blockserver.core.events.RawPacketHandleEvent; -import org.blockserver.core.module.Module; - -import java.util.Collection; -import java.util.HashSet; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; - -/** - * Written by Exerosis! - */ -public class PacketProvider extends Module { - private final BlockingQueue packetOutQueue = new LinkedBlockingQueue<>(); - - public PacketProvider(Server server) { - super(server); - } - - public void queueOutboundPacket(RawPacket packet) { - getServer().getEventManager().fire(new RawPacketHandleEvent(packet), event -> { - if (!event.isCancelled()) - packetOutQueue.add(event.getPacket()); - }); - } - - public void queueInboundPacket(RawPacket packet) { - getServer().getEventManager().fire(new RawPacketHandleEvent(packet)); - } - - public Collection receiveOutboundPackets() { - Collection packets = new HashSet<>(); - packetOutQueue.drainTo(packets); - return packets; - } - - public Collection getMessageOutQueue() { - return new HashSet<>(packetOutQueue); - } -} diff --git a/src/main/java/org/blockserver/core/modules/player/Player.java b/src/main/java/org/blockserver/core/modules/player/Player.java index 76eefea..6194156 100644 --- a/src/main/java/org/blockserver/core/modules/player/Player.java +++ b/src/main/java/org/blockserver/core/modules/player/Player.java @@ -22,6 +22,8 @@ import org.blockserver.core.events.MessageHandleEvent; import org.blockserver.core.modules.message.Message; import org.blockserver.core.modules.message.PlayerLoginMessage; +import org.blockserver.core.modules.network.NetworkModule; +import org.blockserver.core.modules.network.NetworkProvider; import org.blockserver.core.modules.world.positions.Location; import org.blockserver.core.utilities.Skin; @@ -63,7 +65,7 @@ public Location getLocation() { } public void sendMessage(Message message) { - server.getModule(NetworkModule.class).sendPackets(provider, provider.getConverter().toPacket(message)); + server.getModule(NetworkModule.class).sendMessages(provider, message); } public void handleLogin(PlayerLoginMessage message) { diff --git a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java index 81b3cfc..ff9535d 100644 --- a/src/main/java/org/blockserver/core/modules/player/PlayerModule.java +++ b/src/main/java/org/blockserver/core/modules/player/PlayerModule.java @@ -19,6 +19,7 @@ import org.blockserver.core.Server; import org.blockserver.core.module.Module; import org.blockserver.core.modules.logging.LoggingModule; +import org.blockserver.core.modules.network.NetworkProvider; import java.net.InetSocketAddress; import java.util.Collections; diff --git a/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java b/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java deleted file mode 100644 index cad327f..0000000 --- a/src/main/java/org/blockserver/core/modules/serverlist/ServerListModule.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is part of BlockServer. - * - * BlockServer is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * BlockServer 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with BlockServer. If not, see . - */ -package org.blockserver.core.modules.serverlist; - -import lombok.Getter; -import org.blockserver.core.Server; -import org.blockserver.core.event.EventListener; -import org.blockserver.core.events.RawPacketHandleEvent; -import org.blockserver.core.module.Module; -import org.blockserver.core.modules.scheduler.SchedulerModule; - -/** - * Written by Exerosis! - * - * @author BlockServer Team - * @see org.blockserver.core.module.Module - */ -public class ServerListModule extends Module { - private final SchedulerModule schedulerModule; - private final NetworkModule networkModule; - @Getter private final Runnable task; - - public ServerListModule(Server server, SchedulerModule schedulerModule, NetworkModule networkModule) { - super(server); - this.schedulerModule = schedulerModule; - this.networkModule = networkModule; - task = () -> { - //networkModule.sendPackets(); - //send things - }; - new EventListener() { - @Override - public void onEvent(RawPacketHandleEvent event) { - //receive pings - //send pongs - } - }.register(RawPacketHandleEvent.class, getServer().getEventManager()); - } - - @Override - public void onEnable() { - schedulerModule.registerTask(task, 1.0, Integer.MAX_VALUE); - super.onEnable(); - } - - @Override - public void onDisable() { - schedulerModule.cancelTask(task); - super.onDisable(); - } -} diff --git a/src/main/java/org/blockserver/core/utilities/Skin.java b/src/main/java/org/blockserver/core/utilities/Skin.java index bda766c..fb443b7 100644 --- a/src/main/java/org/blockserver/core/utilities/Skin.java +++ b/src/main/java/org/blockserver/core/utilities/Skin.java @@ -1,3 +1,19 @@ +/* + * This file is part of BlockServer. + * + * BlockServer is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BlockServer 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with BlockServer. If not, see . + */ package org.blockserver.core.utilities; /** From 00aa9a3bd2f5dff4a2c24b6f8831fce89d978115 Mon Sep 17 00:00:00 2001 From: jython234 Date: Mon, 25 Jan 2016 20:24:43 -0600 Subject: [PATCH 12/12] Some basic networking finished. --- .../modules/network/NetworkConverter.java | 30 ++++++++++ .../core/modules/network/NetworkModule.java | 47 ++++++++++++++- .../core/modules/network/NetworkProvider.java | 60 ++++++++++++++++++- 3 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/blockserver/core/modules/network/NetworkConverter.java diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java new file mode 100644 index 0000000..786b0a7 --- /dev/null +++ b/src/main/java/org/blockserver/core/modules/network/NetworkConverter.java @@ -0,0 +1,30 @@ +package org.blockserver.core.modules.network; + +import org.blockserver.core.modules.message.Message; + +/** + * A NetworkConverter converts {@linkplain RawPacket}s to {@linkplain Message}s and + * in reverse. + * + * @author BlockServer Team + * @see RawPacket + * @see Message + */ +public interface NetworkConverter { + + /** + * Converts a {@linkplain Message} to a {@linkplain RawPacket} + * + * @param packet The {@linkplain RawPacket} to be converted. + * @return The converted {@linkplain Message}, if converted, null if not. + */ + Message convertPacket(RawPacket packet); + + /** + * Converts a {@linkplain RawPacket} to a {@linkplain Message} + * + * @param message The {@linkplain Message} to be converted. + * @return The converted {@linkplain RawPacket}, if converted, null if not. + */ + RawPacket convertMessage(Message message); +} diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkModule.java b/src/main/java/org/blockserver/core/modules/network/NetworkModule.java index d3d85dc..c19f9d7 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkModule.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkModule.java @@ -17,26 +17,71 @@ package org.blockserver.core.modules.network; import org.blockserver.core.Server; +import org.blockserver.core.events.RawPacketHandleEvent; import org.blockserver.core.module.Module; import org.blockserver.core.modules.message.Message; +import org.blockserver.core.modules.player.Player; +import org.blockserver.core.modules.player.PlayerModule; import org.blockserver.core.modules.scheduler.SchedulerModule; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + /** - * Created by atzei on 1/25/2016. + * The NetworkModule manages the various {@linkplain NetworkProvider}s and + * handles the conversions of packets to messages. It also handles sending packets. + * + * @author BlockServer Team + * @see NetworkProvider */ public class NetworkModule extends Module{ private SchedulerModule scheduler; + private Thread processorThread; + //private ExecutorService networkOperationsPool = Executors.newFixedThreadPool(4); //TODO: set in config + private List registeredProviders = new ArrayList<>(); public NetworkModule(Server server, SchedulerModule scheduler) { super(server); this.scheduler = scheduler; + + processorThread = new Thread(() -> { + Thread.currentThread().setName("NetworkProcessor"); + registeredProviders.forEach(provider -> { + RawPacket packet; + int max = 250; + while(((packet = provider.getNextPacket()) != null) && max-- > 0) { //while the provider has packets in the queue AND number of packets processed is less than 250 + getServer().getEventManager().fire(new RawPacketHandleEvent(packet)); //TODO: not sure what I'm doing here - jython234 + } + }); + }); + processorThread.start(); } + /** + * Sends the specified {@linkplain RawPacket}s through the specified provider. + * @param provider The {@linkplain NetworkProvider} to send the packets. + * @param packets The {@linkplain RawPacket}s to be sent. + */ public void sendPackets(NetworkProvider provider, RawPacket... packets) { } + /** + * Sends the specified {@linkplain Message}s through the specified provider. + * @param provider The {@linkplain NetworkProvider} to send the packets. + * @param messages The {@linkplain Message}s to be sent. + */ public void sendMessages(NetworkProvider provider, Message... messages) { } + + public void registerProvider(NetworkProvider provider) { + if(!registeredProviders.contains(provider)) { + registeredProviders.add(provider); + return; + } + throw new IllegalArgumentException("NetworkProvider is already registered!"); + } } diff --git a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java index ecefcba..912c928 100644 --- a/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java +++ b/src/main/java/org/blockserver/core/modules/network/NetworkProvider.java @@ -16,8 +16,66 @@ */ package org.blockserver.core.modules.network; +import lombok.Getter; +import org.blockserver.core.Server; + +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; + /** - * Created by atzei on 1/25/2016. + * A Network Provider is an interface capable of sending and receiving packets. + * Each Protocol has it's own NetworkProvider. + * + * @author BlockServer Team + * @see NetworkModule */ public abstract class NetworkProvider { + + @Getter private Server server; + @Getter private NetworkConverter converter; + + private Queue inQueue = new ConcurrentLinkedQueue<>(); + private Queue outQueue = new ConcurrentLinkedQueue<>(); + + public NetworkProvider(Server server, NetworkConverter converter) { + this.server = server; + this.converter = converter; + } + + /** + * This method is used by the {@linkplain NetworkProvider} superclass to send a packet + * through the underlying layer. + * + * @param packet The packet to be sent. + * @return If the packet has been sent successfully. + */ + protected abstract boolean _sendPacket(RawPacket packet); + + /** + * Sends a {@linkplain RawPacket}. This places it in the packet out queue. + * If isImmediate, the packet will skip the packet out queue. + * + * @param packet The packet to be sent. + * @param isImmediate If the packet should be sent immediately, thus skipping queues. + * @return If the packet was sent successfully. + */ + public final boolean sendPacket(RawPacket packet, boolean isImmediate) { + if(isImmediate) { + if(!_sendPacket(packet)) { + return false; + } + } else outQueue.add(packet); + return true; + } + + /** + * Used by the NetworkModule to get the latest packet received. + * If no packet is in the queue, returns null. + * + * @return The latest packet received, null if the queue is empty. + */ + protected RawPacket getNextPacket() { + if(inQueue.isEmpty()) return null; + return inQueue.remove(); + } }