Skip to content

Commit 00e2e83

Browse files
committed
~A mostly finished networking system.
~Lots of other changes that I forgot about because it was spread over a bunch of time x) ~Almost lost this version!
1 parent 05c1639 commit 00e2e83

38 files changed

+314
-422
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
BlockServer [![Build Status](https://travis-ci.org/BlockServerProject/BlockServer.svg?branch=master)](https://travis-ci.org/BlockServerProject/BlockServer)
22
===========
3+
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.
4+
5+
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.

src/main/java/org/blockserver/core/exceptions/BlockServerException.java

+16
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
/*
2+
* This file is part of BlockServer.
3+
*
4+
* BlockServer is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU Lesser General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* BlockServer is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU Lesser General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU Lesser General Public License
15+
* along with BlockServer. If not, see <http://www.gnu.org/licenses/>.
16+
*/
117
package org.blockserver.core.exceptions;
218

319
import org.blockserver.core.exceptions.node.ExceptionBuilder;

src/main/java/org/blockserver/core/exceptions/node/ExceptionBuilder.java

+16
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
/*
2+
* This file is part of BlockServer.
3+
*
4+
* BlockServer is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU Lesser General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* BlockServer is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU Lesser General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU Lesser General Public License
15+
* along with BlockServer. If not, see <http://www.gnu.org/licenses/>.
16+
*/
117
package org.blockserver.core.exceptions.node;
218

319
public class ExceptionBuilder {

src/main/java/org/blockserver/core/exceptions/node/ExceptionNode.java

+16
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
/*
2+
* This file is part of BlockServer.
3+
*
4+
* BlockServer is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU Lesser General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* BlockServer is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU Lesser General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU Lesser General Public License
15+
* along with BlockServer. If not, see <http://www.gnu.org/licenses/>.
16+
*/
117
package org.blockserver.core.exceptions.node;
218

319
public class ExceptionNode {

src/main/java/org/blockserver/core/module/Enableable.java

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
/**
2020
* Written by Exerosis!
21+
*
22+
* @author BlockServer Team
2123
*/
2224
public interface Enableable {
2325
void onEnable();

src/main/java/org/blockserver/core/module/EnableableImplementation.java

+4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
import java.util.Map;
2020
import java.util.WeakHashMap;
2121

22+
/**
23+
* @author BlockServer Team
24+
* @see org.blockserver.core.module.Enableable
25+
*/
2226
public interface EnableableImplementation extends Enableable {
2327
Map<EnableableImplementation, Boolean> instances = new WeakHashMap<>();
2428

src/main/java/org/blockserver/core/module/Module.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020
import org.blockserver.core.Server;
2121

2222
/**
23-
* Base class for all modules.
23+
* Base class for all modules. New modules should implement this class.
2424
*
2525
* @author BlockServer Team
26+
* @see org.blockserver.core.modules
27+
* @see org.blockserver.core.module.EnableableImplementation
2628
*/
2729
public class Module implements EnableableImplementation {
2830
@Getter private final Server server;

src/main/java/org/blockserver/core/module/ModuleLoader.java

+4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020

2121
import java.util.Collection;
2222

23+
/**
24+
* @author BlockServer Team
25+
* @see org.blockserver.core.module.loaders
26+
*/
2327
public interface ModuleLoader {
2428
Collection<Module> setModules(Collection<Module> currentModules, Server server);
2529
}

src/main/java/org/blockserver/core/module/loaders/CoreModuleLoader.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,24 @@
2020
import org.blockserver.core.module.Module;
2121
import org.blockserver.core.module.ModuleLoader;
2222
import org.blockserver.core.modules.logging.LoggingModule;
23-
import org.blockserver.core.modules.network.NetworkModule;
23+
import org.blockserver.core.modules.message.MessageModule;
2424
import org.blockserver.core.modules.player.PlayerModule;
2525
import org.blockserver.core.modules.scheduler.SchedulerModule;
2626

2727
import java.util.Collection;
2828

29+
/**
30+
* @author BlockServer Team
31+
* @see org.blockserver.core.module.ModuleLoader
32+
*/
2933
public class CoreModuleLoader implements ModuleLoader {
3034

3135
@Override
3236
public Collection<Module> setModules(Collection<Module> currentModules, Server server) {
3337
LoggingModule loggingModule = new LoggingModule(server);
3438
SchedulerModule schedulerModule = new SchedulerModule(server);
3539
PlayerModule playerModule = new PlayerModule(server);
36-
NetworkModule networkModule = new NetworkModule(server, schedulerModule);
40+
NetworkModule networkModule = new MessageModule(server, schedulerModule);
3741

3842
currentModules.add(loggingModule);
3943
currentModules.add(schedulerModule);

src/main/java/org/blockserver/core/module/loaders/JarModuleLoader.java

+3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333

3434
/**
3535
* Module Loader that can load modules from JARs
36+
*
37+
* @author BlockServer Team
38+
* @see org.blockserver.core.module.ModuleLoader
3639
*/
3740
public class JarModuleLoader implements ModuleLoader {
3841
@Override

src/main/java/org/blockserver/core/modules/entity/Entity.java

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
/**
2222
* Written by Exerosis!
23+
*
24+
* @author BlockServer Team
2325
*/
2426
public class Entity {
2527
private float x;

src/main/java/org/blockserver/core/modules/logging/LoggingModule.java

+2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020
import org.blockserver.core.module.Module;
2121

2222
/**
23+
* Logging Module with different log levels. (debug, info, warn, error)
2324
* TODO: Implement SLF4j and/or log4j2
2425
*
2526
* @author BlockServer Team
27+
* @see org.blockserver.core.module.Module
2628
*/
2729
public class LoggingModule extends Module {
2830

src/main/java/org/blockserver/core/modules/message/Message.java

+7
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,16 @@
2424
* Written by Exerosis!
2525
*/
2626
public class Message {
27+
@Getter final private boolean async;
2728
@Getter @Setter private Player player;
2829

2930
public Message(Player player) {
3031
this.player = player;
32+
async = false;
33+
}
34+
35+
public Message(Player player, boolean async) {
36+
this.player = player;
37+
this.async = async;
3138
}
3239
}

src/main/java/org/blockserver/core/modules/network/test/testtwo/ProviderP.java renamed to src/main/java/org/blockserver/core/modules/network/Dispatcher.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
* You should have received a copy of the GNU Lesser General Public License
1515
* along with BlockServer. If not, see <http://www.gnu.org/licenses/>.
1616
*/
17-
package org.blockserver.core.modules.network.test.testtwo;
17+
package org.blockserver.core.modules.network;
1818

1919
/**
2020
* Written by Exerosis!
2121
*/
22-
public class ProviderP {
23-
24-
}
22+
public interface Dispatcher {
23+
void dispatch(RawPacket packet);
24+
}

src/main/java/org/blockserver/core/modules/network/LinkedBlockingIOQueue.java

-54
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.blockserver.core.modules.network;
2+
3+
import org.blockserver.core.Server;
4+
import org.blockserver.core.event.Priority;
5+
import org.blockserver.core.event.ServerEventListener;
6+
import org.blockserver.core.events.messages.MessageReciveEvent;
7+
import org.blockserver.core.events.messages.MessageSendEvent;
8+
9+
public class MessageManager extends PacketProvider implements Dispatcher {
10+
private final ServerEventListener<MessageSendEvent> listener;
11+
private final NetworkConverter converter;
12+
13+
public MessageManager(Server server, NetworkConverter converter) {
14+
super(server);
15+
this.converter = converter;
16+
listener = new ServerEventListener<MessageSendEvent>() {
17+
@Override
18+
public void onEvent(MessageSendEvent event) {
19+
if (!event.isCancelled())
20+
queuePacket(converter.toPacket(event.getMessage()));
21+
}
22+
}.priority(Priority.INTERNAL).post();
23+
}
24+
25+
@Override
26+
public void onEnable() {
27+
listener.register(MessageSendEvent.class, getServer());
28+
super.onEnable();
29+
}
30+
31+
@Override
32+
public void onDisable() {
33+
listener.unregister(getServer());
34+
super.onDisable();
35+
}
36+
37+
@Override
38+
public void dispatch(RawPacket packet) {
39+
getServer().getExecutorService().execute(() -> getServer().getEventManager().fire(new MessageReciveEvent<>(converter.toMessage(packet))));
40+
}
41+
}

src/main/java/org/blockserver/core/modules/network/NetworkConverter.java

+1
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,6 @@
2525
public interface NetworkConverter {
2626
RawPacket toPacket(Message message);
2727

28+
//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)
2829
Message toMessage(RawPacket packet);
2930
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.blockserver.core.modules.network;
2+
3+
4+
import lombok.Getter;
5+
import org.blockserver.core.Server;
6+
import org.blockserver.core.module.Module;
7+
8+
import java.util.Collections;
9+
import java.util.HashSet;
10+
import java.util.Set;
11+
12+
public class NetworkHandler extends Module {
13+
@Getter private final Set<Provider> providers = Collections.synchronizedSet(new HashSet<>());
14+
@Getter private final Set<Dispatcher> dispatchers = Collections.synchronizedSet(new HashSet<>());
15+
16+
public NetworkHandler(Server server) {
17+
super(server);
18+
getServer().getExecutorService().execute(() -> {
19+
while (isEnabled()) {
20+
providers.stream().filter(p -> p.peek() != null).forEach(p -> {
21+
for (Dispatcher dispatcher : dispatchers)
22+
dispatcher.dispatch(p.poll());
23+
});
24+
}
25+
});
26+
}
27+
28+
public void unregisterProvider(Provider provider) {
29+
providers.remove(provider);
30+
}
31+
32+
public void unregisterDispatcher(Dispatcher dispatcher) {
33+
dispatchers.remove(dispatcher);
34+
}
35+
36+
public void registerProvider(Provider provider) {
37+
providers.add(provider);
38+
}
39+
40+
public void registerDispatcher(Dispatcher dispatcher) {
41+
dispatchers.add(dispatcher);
42+
}
43+
}

0 commit comments

Comments
 (0)