diff --git a/.env b/.env new file mode 100644 index 0000000..60f84bf --- /dev/null +++ b/.env @@ -0,0 +1,13 @@ +DB_HOST=localhost # Имя базы данных +DB_PORT=5432 # Порт для подключения к базе данных +DB_USER=your_user # Имя пользователя базы данных +DB_PASSWORD=your_password # Пароль для доступа к базе данных +DB_NAME=your_database # Имя базы данных + +PORT=3000 # Порт, на котором будет работать сервер + +# Список серверов CDN и SDU. Разделяются запятой если их несколько +# Без пробелов +CDN_SERVERS=http://10.211.55.2:7789 +#SDU - Server Delivery Updates +SDU_SERVERS=http://10.211.55.2:7777 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0705691..443d950 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,6 @@ target .project .classpath +build/.env +build/.env* + diff --git a/build/docker-compose.prod.yml b/build/docker-compose.prod.yml deleted file mode 100644 index 4966d7b..0000000 --- a/build/docker-compose.prod.yml +++ /dev/null @@ -1,23 +0,0 @@ -version: '3.8' - -services: - app: - build: - context: . - dockerfile: Dockerfile - container_name: rosetta-server - ports: - - "${PORT:-3000}:${PORT:-3000}" - environment: - - PORT=${PORT:-3000} # Устанавливаем порт по умолчанию 3000, может быть переопределён через переменную окружения - depends_on: - - db - - db: - image: postgres:latest - environment: - POSTGRES_DB: your_database - POSTGRES_USER: your_user - POSTGRES_PASSWORD: your_password - ports: - - "5432:5432" \ No newline at end of file diff --git a/build/docker-compose.yml b/build/docker-compose.yml new file mode 100644 index 0000000..b1a7831 --- /dev/null +++ b/build/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3.8' + +services: + app: + build: + context: . + dockerfile: Dockerfile + container_name: rosetta-server + ports: + - "${PORT:-3000}:${PORT:-3000}" + env_file: + - .env + depends_on: + - db + + db: + image: postgres:latest + environment: + POSTGRES_DB: ${DB_NAME:-rosetta} + POSTGRES_USER: ${DB_USER:-rosetta} + POSTGRES_PASSWORD: ${DB_PASSWORD:-password} + ports: + - "5432:5432" + volumes: + - db_data:/var/lib/postgresql/data + +volumes: + db_data: \ No newline at end of file diff --git a/build/docker-compose.dev.yml b/docker-compose.yml similarity index 63% rename from build/docker-compose.dev.yml rename to docker-compose.yml index d40619c..2996f24 100644 --- a/build/docker-compose.dev.yml +++ b/docker-compose.yml @@ -1,3 +1,6 @@ +#Это docker compose файл для разработки +#Он запускает базу и Adminer для управления базой данных + version: '3.8' services: diff --git a/pom.xml b/pom.xml index eee9f12..447d2b3 100644 --- a/pom.xml +++ b/pom.xml @@ -40,13 +40,6 @@ jakarta.persistence-api 3.1.0 - - - - org.yaml - snakeyaml - 2.5 - diff --git a/server.yml b/server.yml deleted file mode 100644 index ebed09a..0000000 --- a/server.yml +++ /dev/null @@ -1,12 +0,0 @@ -#Подключение к БД -database: - host: db - user: your_user - password: your_password - db: your_database -#CDN (транспортные) серверы -transport_servers: - - http://10.211.55.2:7789 -#Серверы доставки обновлений (SDU Servers Delivery Updates) -update_servers: - - http://10.211.55.2:7777 diff --git a/src/main/java/com/rosetta/im/Boot.java b/src/main/java/com/rosetta/im/Boot.java index c1c7220..bc8e289 100644 --- a/src/main/java/com/rosetta/im/Boot.java +++ b/src/main/java/com/rosetta/im/Boot.java @@ -2,8 +2,6 @@ package com.rosetta.im; import com.rosetta.im.client.ClientManager; import com.rosetta.im.client.OnlineManager; -import com.rosetta.im.config.Configuration; -import com.rosetta.im.config.ServerConfiguration; import com.rosetta.im.event.EventManager; import com.rosetta.im.executors.Executor0Handshake; import com.rosetta.im.executors.Executor10RequestUpdate; @@ -73,8 +71,6 @@ public class Boot { private ServerAdapter serverAdapter; private ClientManager clientManager; private OnlineManager onlineManager; - private Configuration configuration; - private ServerConfiguration serverConfiguration; /** * Конструктор по умолчанию, использует порт 3000 для сервера @@ -98,7 +94,6 @@ public class Boot { 30 ), packetManager, this.serverAdapter); this.clientManager = new ClientManager(server); - this.configuration = new Configuration("server.yml"); } /** @@ -139,7 +134,6 @@ public class Boot { */ public Boot bootstrap() { try{ - this.serverConfiguration = this.configuration.loadConfiguration(); this.server.start(); this.registerAllPackets(); this.registerAllExecutors(); @@ -196,9 +190,9 @@ public class Boot { this.packetManager.registerExecutor(4, new Executor4OnlineState(this.onlineManager, this.clientManager)); this.packetManager.registerExecutor(6, new Executor6Message(this.clientManager, this.packetManager)); this.packetManager.registerExecutor(7, new Executor7Read(this.clientManager, this.packetManager)); - this.packetManager.registerExecutor(10, new Executor10RequestUpdate(this.serverConfiguration)); + this.packetManager.registerExecutor(10, new Executor10RequestUpdate()); this.packetManager.registerExecutor(11, new Executor11Typeing(this.clientManager, this.packetManager)); - this.packetManager.registerExecutor(15, new Executor15RequestTransport(this.serverConfiguration)); + this.packetManager.registerExecutor(15, new Executor15RequestTransport()); this.packetManager.registerExecutor(16, new Executor16PushNotification()); this.packetManager.registerExecutor(17, new Executor17GroupCreate()); this.packetManager.registerExecutor(18, new Executor18GroupInfo()); diff --git a/src/main/java/com/rosetta/im/config/Configuration.java b/src/main/java/com/rosetta/im/config/Configuration.java deleted file mode 100644 index 2d5ae4b..0000000 --- a/src/main/java/com/rosetta/im/config/Configuration.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.rosetta.im.config; - -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Paths; - -import org.yaml.snakeyaml.LoaderOptions; -import org.yaml.snakeyaml.Yaml; - -import com.rosetta.im.exception.ConfigurationException; - -public class Configuration { - - private String serverConfigName; - - public Configuration(String serverConfigName) { - this.serverConfigName = serverConfigName; - } - - public ServerConfiguration loadConfiguration() throws ConfigurationException, Exception { - if(!Files.exists(Paths.get(this.serverConfigName))){ - /** - * Файл конфигурации с переданным названием не найден - */ - throw new ConfigurationException(this.serverConfigName + " is missing"); - } - - LoaderOptions options = new LoaderOptions(); - Yaml yaml = new Yaml(options); - - InputStream inputStream = Files.newInputStream(Paths.get(this.serverConfigName)); - /** - * SnakeYAML автоматически загрузит обьект ServerConfiguration через рефлексию - * обратите внимание название полей в ServerConfiguration должны совпадать с названиями в - * server.yml - */ - ServerConfiguration serverConfiguration = yaml.loadAs(inputStream, ServerConfiguration.class); - return serverConfiguration; - } - -} diff --git a/src/main/java/com/rosetta/im/config/DatabaseConfiguration.java b/src/main/java/com/rosetta/im/config/DatabaseConfiguration.java deleted file mode 100644 index 558d403..0000000 --- a/src/main/java/com/rosetta/im/config/DatabaseConfiguration.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.rosetta.im.config; - -public class DatabaseConfiguration { - - public String host; - public String user; - public String password; - public String db; - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public String getUser() { - return user; - } - - public void setUser(String user) { - this.user = user; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getDb() { - return db; - } - - public void setDb(String db) { - this.db = db; - } - -} diff --git a/src/main/java/com/rosetta/im/config/ServerConfiguration.java b/src/main/java/com/rosetta/im/config/ServerConfiguration.java deleted file mode 100644 index d400017..0000000 --- a/src/main/java/com/rosetta/im/config/ServerConfiguration.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.rosetta.im.config; - -import java.util.List; - -/** - * Этот файл отвечает за конфигурацию которая хранится в файле server.yml - */ -public class ServerConfiguration { - - public DatabaseConfiguration database; - - public List transport_servers; - - public List update_servers; - - public List getUpdateServers() { - return update_servers; - } - - public void setUpdateServers(List update_servers) { - this.update_servers = update_servers; - } - - public DatabaseConfiguration getDatabase() { - return database; - } - - public void setDatabase(DatabaseConfiguration database) { - this.database = database; - } - - public List getTransportServers() { - return transport_servers; - } - - public void setTransportServers(List transport_servers) { - this.transport_servers = transport_servers; - } - - -} diff --git a/src/main/java/com/rosetta/im/database/HibernateUtil.java b/src/main/java/com/rosetta/im/database/HibernateUtil.java index a1596de..feb87ca 100644 --- a/src/main/java/com/rosetta/im/database/HibernateUtil.java +++ b/src/main/java/com/rosetta/im/database/HibernateUtil.java @@ -9,8 +9,21 @@ public class HibernateUtil { static { try { - sessionFactory = new Configuration().configure().buildSessionFactory(); + Configuration cfg = new Configuration().configure(); + + String host = System.getenv("DB_HOST"); + String port = System.getenv("DB_PORT"); + String user = System.getenv("DB_USER"); + String pass = System.getenv("DB_PASSWORD"); + String name = System.getenv("DB_NAME"); + String url = String.format("jdbc:postgresql://%s:%s/%s", host, port, name); + cfg.setProperty("hibernate.connection.url", url); + cfg.setProperty("hibernate.connection.username", user); + cfg.setProperty("hibernate.connection.password", pass); + + sessionFactory = cfg.buildSessionFactory(); } catch (Exception e) { + e.printStackTrace(); throw new ExceptionInInitializerError("Error initializing Hibernate: " + e.getMessage()); } } diff --git a/src/main/java/com/rosetta/im/executors/Executor10RequestUpdate.java b/src/main/java/com/rosetta/im/executors/Executor10RequestUpdate.java index e7e612c..d2c2dda 100644 --- a/src/main/java/com/rosetta/im/executors/Executor10RequestUpdate.java +++ b/src/main/java/com/rosetta/im/executors/Executor10RequestUpdate.java @@ -1,8 +1,8 @@ package com.rosetta.im.executors; +import java.util.Arrays; import java.util.List; -import com.rosetta.im.config.ServerConfiguration; import com.rosetta.im.packet.Packet10RequestUpdate; import com.rosetta.im.util.RandomUtil; @@ -17,12 +17,6 @@ import io.orprotocol.packet.PacketExecutor; */ public class Executor10RequestUpdate extends PacketExecutor { - private ServerConfiguration serverConfiguration; - - public Executor10RequestUpdate(ServerConfiguration serverConfiguration) { - this.serverConfiguration = serverConfiguration; - } - @Override public void onPacketReceived(Packet10RequestUpdate packet, Client client) throws Exception, ProtocolException { /** @@ -37,7 +31,7 @@ public class Executor10RequestUpdate extends PacketExecutor cdnServers = this.serverConfiguration.getUpdateServers(); + List cdnServers = Arrays.asList(System.getenv("SDU_SERVERS").split(",")); String selectedServer = cdnServers.get(RandomUtil.randomBetween(0, cdnServers.size() - 1)); packet.setServer(selectedServer); /** diff --git a/src/main/java/com/rosetta/im/executors/Executor15RequestTransport.java b/src/main/java/com/rosetta/im/executors/Executor15RequestTransport.java index d0ee7e6..249e490 100644 --- a/src/main/java/com/rosetta/im/executors/Executor15RequestTransport.java +++ b/src/main/java/com/rosetta/im/executors/Executor15RequestTransport.java @@ -1,10 +1,10 @@ package com.rosetta.im.executors; +import java.util.Arrays; import java.util.List; import com.rosetta.im.Failures; import com.rosetta.im.client.tags.ECIAuthentificate; -import com.rosetta.im.config.ServerConfiguration; import com.rosetta.im.packet.Packet15RequestTransport; import com.rosetta.im.util.RandomUtil; @@ -14,12 +14,6 @@ import io.orprotocol.packet.PacketExecutor; public class Executor15RequestTransport extends PacketExecutor { - private ServerConfiguration serverConfiguration; - - public Executor15RequestTransport(ServerConfiguration serverConfiguration){ - this.serverConfiguration = serverConfiguration; - } - @Override public void onPacketReceived(Packet15RequestTransport packet, Client client) throws Exception, ProtocolException { ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class); @@ -36,7 +30,7 @@ public class Executor15RequestTransport extends PacketExecutor cdnServers = this.serverConfiguration.getTransportServers(); + List cdnServers = Arrays.asList(System.getenv("CDN_SERVERS").split(",")); String selectedServer = cdnServers.get(RandomUtil.randomBetween(0, cdnServers.size() - 1)); packet.setServer(selectedServer); /** diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index edad6db..dcc88de 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -3,10 +3,6 @@ org.postgresql.Driver - jdbc:postgresql://localhost:5432/your_database - your_user - your_password - update