2019-12-28 14:48:39 +01:00
|
|
|
package envoy.server;
|
|
|
|
|
2020-06-11 11:45:17 +02:00
|
|
|
import java.io.File;
|
2019-12-28 14:48:39 +01:00
|
|
|
import java.io.IOException;
|
2020-06-11 11:45:17 +02:00
|
|
|
import java.util.HashMap;
|
2019-12-30 14:53:40 +01:00
|
|
|
import java.util.Set;
|
2020-06-11 11:45:17 +02:00
|
|
|
import java.util.logging.Level;
|
2019-12-28 14:48:39 +01:00
|
|
|
|
|
|
|
import com.jenkov.nioserver.Server;
|
|
|
|
|
2020-06-11 11:45:17 +02:00
|
|
|
import envoy.data.Config;
|
|
|
|
import envoy.data.ConfigItem;
|
2020-02-15 22:43:20 +01:00
|
|
|
import envoy.server.data.PersistenceManager;
|
2020-02-12 22:01:32 +01:00
|
|
|
import envoy.server.net.ConnectionManager;
|
2020-01-03 15:40:43 +01:00
|
|
|
import envoy.server.net.ObjectMessageProcessor;
|
|
|
|
import envoy.server.net.ObjectMessageReader;
|
2020-07-05 16:53:27 +02:00
|
|
|
import envoy.server.processors.*;
|
2020-06-11 11:45:17 +02:00
|
|
|
import envoy.util.EnvoyLog;
|
2020-01-03 15:40:43 +01:00
|
|
|
|
2019-12-28 14:48:39 +01:00
|
|
|
/**
|
2019-12-30 15:15:25 +01:00
|
|
|
* Starts the server.<br>
|
|
|
|
* <br>
|
2019-12-28 14:48:39 +01:00
|
|
|
* Project: <strong>envoy-server-standalone</strong><br>
|
|
|
|
* File: <strong>Startup.java</strong><br>
|
|
|
|
* Created: <strong>24.12.2019</strong><br>
|
2019-12-30 15:15:25 +01:00
|
|
|
*
|
2019-12-28 14:48:39 +01:00
|
|
|
* @author Kai S. K. Engelbart
|
|
|
|
* @since Envoy Server Standalone v0.1-alpha
|
|
|
|
*/
|
|
|
|
public class Startup {
|
|
|
|
|
2020-06-11 11:45:17 +02:00
|
|
|
/**
|
|
|
|
* Initializes the logger with a new config instance.
|
2020-07-02 20:01:28 +02:00
|
|
|
*
|
2020-06-11 11:45:17 +02:00
|
|
|
* @since Envoy Server Standalone v0.1-beta
|
|
|
|
*/
|
|
|
|
private static void initLogging() {
|
|
|
|
final var items = new HashMap<String, ConfigItem<?>>();
|
|
|
|
items.put("homeDirectory",
|
|
|
|
new ConfigItem<>("homeDirectory", "h", File::new, new File(System.getProperty("user.home"), ".envoy-server"), true));
|
2020-06-14 16:30:46 +02:00
|
|
|
items.put("fileLevelBarrier", new ConfigItem<>("fileLevelBarrier", "fb", Level::parse, Level.WARNING, true));
|
2020-06-12 10:56:02 +02:00
|
|
|
items.put("consoleLevelBarrier", new ConfigItem<>("consoleLevelBarrier", "cb", Level::parse, Level.FINEST, true));
|
2020-06-11 11:45:17 +02:00
|
|
|
|
|
|
|
final var config = new Config();
|
|
|
|
config.load(items);
|
|
|
|
|
|
|
|
EnvoyLog.initialize(config);
|
2020-06-11 12:08:51 +02:00
|
|
|
EnvoyLog.attach("envoy");
|
2020-06-11 11:45:17 +02:00
|
|
|
}
|
|
|
|
|
2019-12-30 15:15:25 +01:00
|
|
|
/**
|
|
|
|
* Starts the server.
|
|
|
|
*
|
2020-07-02 20:01:28 +02:00
|
|
|
* @param args the run configuration. If it is "no-enter-to-stop" at position 0,
|
|
|
|
* no command to read in an enter press will be generated
|
2019-12-30 15:15:25 +01:00
|
|
|
* @throws IOException if the server crashes
|
|
|
|
* @since Envoy Server Standalone v0.1-alpha
|
|
|
|
*/
|
2019-12-28 14:48:39 +01:00
|
|
|
public static void main(String[] args) throws IOException {
|
2020-06-11 11:45:17 +02:00
|
|
|
initLogging();
|
|
|
|
|
2020-07-02 20:01:28 +02:00
|
|
|
final Server server = new Server(8080, ObjectMessageReader::new,
|
2020-06-12 10:56:02 +02:00
|
|
|
new ObjectMessageProcessor(Set.of(new LoginCredentialProcessor(),
|
|
|
|
new MessageProcessor(),
|
2020-06-12 23:53:40 +02:00
|
|
|
new GroupMessageProcessor(),
|
2020-06-12 10:56:02 +02:00
|
|
|
new GroupCreationProcessor(),
|
|
|
|
new MessageStatusChangeProcessor(),
|
2020-07-03 16:25:49 +02:00
|
|
|
new GroupMessageStatusChangeProcessor(),
|
2020-06-12 10:56:02 +02:00
|
|
|
new UserStatusChangeProcessor(),
|
|
|
|
new IDGeneratorRequestProcessor(),
|
2020-07-13 21:34:21 +02:00
|
|
|
new UserSearchProcessor(),
|
2020-06-12 10:56:02 +02:00
|
|
|
new ContactOperationProcessor())));
|
2020-01-18 09:55:12 +01:00
|
|
|
|
2020-04-06 22:55:27 +02:00
|
|
|
// Initialize the current message ID
|
2020-07-02 20:01:28 +02:00
|
|
|
final PersistenceManager persistenceManager = PersistenceManager.getInstance();
|
2020-04-06 22:55:27 +02:00
|
|
|
if (persistenceManager.getConfigItemByID("currentMessageId") == null)
|
2020-06-11 11:45:17 +02:00
|
|
|
persistenceManager.addConfigItem(new envoy.server.data.ConfigItem("currentMessageId", "0"));
|
2020-01-18 09:55:12 +01:00
|
|
|
|
2019-12-28 14:48:39 +01:00
|
|
|
server.start();
|
2020-01-03 17:11:38 +01:00
|
|
|
server.getSocketProcessor().registerSocketIdListener(ConnectionManager.getInstance());
|
2020-02-07 09:34:02 +01:00
|
|
|
|
2020-07-02 20:01:28 +02:00
|
|
|
if (args.length == 0 || !args[0].equalsIgnoreCase("no-enter-to-stop")) {
|
|
|
|
System.out.println("Press the return key to stop the server...");
|
|
|
|
System.in.read();
|
|
|
|
System.out.println("Stopped");
|
|
|
|
System.exit(0);
|
|
|
|
}
|
2019-12-28 14:48:39 +01:00
|
|
|
}
|
2020-03-23 22:12:27 +01:00
|
|
|
}
|