Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Lineage II (https://forum.zone-game.info/forumdisplay.php?f=34)
-   -   Скрипты (https://forum.zone-game.info/showthread.php?t=2814)

VISTALL 29.01.2009 16:15

Скрипты
 
Я переделываю сервак Rb под Gracia 2 и под pSQL. уже много сделал. много чёго написано и переписано, очень много полезного. мне нужны все скрипти под Ребу ССР Дрим, тоисть квесты, евенты и так далее на яве конечно. ну что б не сомневались на те мой Гео сервер.
настройки сервера:
-- log.ini
лучше туда не лезьть там настройки на отдельный лог сервак но я его не выложыл.
-- telnet.ini
О. телнет для гео но с минимальным функционалом только
---- restart
---- shutdown
--log_console.ini
лучше туда не лезьть
--server.ini
там настройки на хост порт и + автоматический рестарт(О.о.)
http://rapidshare.com/files/191094808/geo.rar.html

Можите скрипты в етой теме без хайда. Когдато я выложу сервак.(Когда доделаю)

KilRoy 29.01.2009 16:34

Ответ: Скрипты
 
Вот непойму, почему все гонятся за обновлениями то?!
По теме, пСКЛ это замечательно, но МС былоб лучше :)
А в чём проблема со скриптами?На просторах всё есть и без хайда ;)
Ну если что, пиши в аську ( есть в профиле ) помогу чем смогу :)

Aquanox 29.01.2009 17:22

Ответ: Скрипты
 
Цитата:

Сообщение от VISTALL (Сообщение 26923)
Я переделываю сервак Rb под Gracia 2 и под pSQL. уже много сделал. много чёго написано и переписано, очень много полезного. мне нужны все скрипти под Ребу ССР Дрим, тоисть квесты, евенты и так далее на яве конечно. ну что б не сомневались на те мой Гео сервер.
настройки сервера:
-- log.ini
лучше туда не лезьть там настройки на отдельный лог сервак но я его не выложыл.
-- telnet.ini
О. телнет для гео но с минимальным функционалом только
---- restart
---- shutdown
--log_console.ini
лучше туда не лезьть
--server.ini
там настройки на хост порт и + автоматический рестарт(О.о.)
http://rapidshare.com/files/191094808/geo.rar.html

Можите скрипты в етой теме без хайда. Когдато я выложу сервак.(Когда доделаю)

лучшеб интегрировал какойто фреймворк для работы с СУБД:

ORM/DAO слой с помощью фреймворков Hibernate + Spring (на jfree loginserver, но немного надо подкорректировать) Однако эту систему критикуют
либо собственный генератор запросов СУБД в зависимости от текущего драйвера СУБД (наброски этой системы были в l2j но в дальнейшем убрали - смотри L2DatabaseFactory, но можно и собственную разработку). http://superquail.sourceforge.net/index.html
Немного приходится парится с кодом, но затем можно использовать любую СУБД изменив пару строк

VISTALL 29.01.2009 20:23

Ответ: Скрипты
 
интересно:) Согласен. ну то что поднапрячся с кодом. Мне не страшно я уже поигрался с переходом на постгрес. ThreadConnection и L2DatabaseFactory у ребы другие... Хоча можно перейди с c3p0 библиотекы конекта и так далее . Вопрос стоит ли?

Добавлено через 5 минут
ребелионовська L2DatabaseConnection
Код:

package l2r.database;

import java.sql.SQLException;
import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;

import l2r.Config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;

/**
 * <p>При работе с пулами коннектов иногда возникает ситуация - когда выбираешь весь пул до предела и
 * при этом коннекты не закрываются а требуется получить еще один коннект. В этом случае программа
 * зависает. Так бывает если в процессе выполнения одного запроса при переборке результатов вызывается
 * другая функция, которая также берет коннект из базы данных. Таких вложений может быть много. И коннекты
 * не отпускаются, пока не выполнятся самые глубокие запросы. DBCP и C3P0 висли при этом - опробовано на
 * практике.
 * </p>
 * <p>Для того чтобы избежать этой коллизии пишется оболочка для коннекта, которой коннект
 * делегирует все свои методы. Эта оболочка хранится в локальном пуле коннектов и если коннект запрашивается
 * в потоке - для которого был уже открыт коннект и еще не закрыт, то возвращаем его.
 * </p>
 * Эту возможность можно отключить выставив в настройках сервера UseDatabaseLayer = false;
 */
public class L2DatabaseFactory
{
        private static L2DatabaseFactory _instance;
        private ComboPooledDataSource _source;

        //список используемых на данный момент коннектов
        private final Hashtable<String, ThreadConnection> Connections = new Hashtable<String, ThreadConnection>();

        static Logger _log = Logger.getLogger(L2DatabaseFactory.class.getName());

        public L2DatabaseFactory() throws SQLException
        {
                _instance = this;
                try
                {
                        if(Config.DATABASE_MAX_CONNECTIONS < 2)
                        {
                                Config.DATABASE_MAX_CONNECTIONS = 2;
                                _log.warning("at least " + Config.DATABASE_MAX_CONNECTIONS + " db connections are required.");
                        }

                        Class.forName(Config.DATABASE_DRIVER).newInstance();

                        if(Config.DEBUG)
                                _log.fine("Database Connection Working");

                        _source = new ComboPooledDataSource();
                        _source.setDriverClass(Config.DATABASE_DRIVER); //loads the jdbc driver
                        _source.setJdbcUrl(Config.DATABASE_URL);
                        _source.setUser(Config.DATABASE_LOGIN);
                        _source.setPassword(Config.DATABASE_PASSWORD); // the settings below are optional -- c3p0 can work with defaults
                        _source.setAutoCommitOnClose(true);
                        _source.setInitialPoolSize(1);
                        _source.setMinPoolSize(1);
                        _source.setMaxPoolSize(Config.DATABASE_MAX_CONNECTIONS);
                        _source.setAcquireRetryAttempts(0);// try to obtain Connections indefinitely (0 = never quit)
                        _source.setAcquireRetryDelay(100);// 500 miliseconds wait before try to acquire connection again
                        _source.setCheckoutTimeout(0); // 0 = wait indefinitely for new connection
                        _source.setAcquireIncrement(5); // if pool is exhausted, get 5 more Connections at a time
                        _source.setMaxStatements(100);
                        _source.setIdleConnectionTestPeriod(60); // test idle connection every 1 minute
                        _source.setMaxIdleTime(600); // remove unused connection after 10 minutes
                        _source.setNumHelperThreads(5);
                        _source.setBreakAfterAcquireFailure(false);

                        /* Test the connection */
                        _source.getConnection().close();
                }
                catch(SQLException x)
                {
                        if(Config.DEBUG)
                                _log.fine("Database Connection FAILED");
                        // rethrow the exception
                        throw x;
                }
                catch(Exception e)
                {
                        if(Config.DEBUG)
                                _log.fine("Database Connection FAILED");
                        throw new SQLException("could not init DB connection:" + e);
                }
        }

        public static L2DatabaseFactory getInstance() throws SQLException
        {
                if(_instance == null)
                        new L2DatabaseFactory();
                return _instance;
        }

        public ThreadConnection getConnection() throws SQLException
        {
                ThreadConnection connection;
                if(Config.USE_DATABASE_LAYER)
                {
                        String key = generateKey();
                        //Пробуем получить коннект из списка уже используемых. Если для данного потока уже открыт
                        //коннект - не мучаем пул коннектов, а отдаем этот коннект.
                        connection = Connections.get(key);
                        if(connection == null)
                                try
                                {
                                        //не нашли - открываем новый
                                        connection = new ThreadConnection(_source.getConnection());
                                }
                                catch(SQLException e)
                                {
                                        _log.warning("Couldn't create connection. Cause: " + e.getMessage());
                                }
                        else
                                //нашли - увеличиваем счетчик использования
                                connection.updateCounter();

                        //добавляем коннект в список
                        if(connection != null)
                                synchronized (Connections)
                                {
                                        Connections.put(key, connection);
                                }
                }
                else
                        connection = new ThreadConnection(_source.getConnection());
                return connection;
        }

        public int getBusyConnectionCount() throws SQLException
        {
                return _source.getNumBusyConnectionsDefaultUser();
        }

        public int getIdleConnectionCount() throws SQLException
        {
                return _source.getNumIdleConnectionsDefaultUser();
        }

        public Hashtable<String, ThreadConnection> getConnections()
        {
                return Connections;
        }

        public void shutdown()
        {
                _source.close();
                Connections.clear();
                try
                {
                        DataSources.destroy(_source);
                }
                catch(SQLException e)
                {
                        _log.log(Level.INFO, "", e);
                }
        }

        /**
        * Генерация ключа для хранения коннекта
        *
        * Ключ равен хэш-коду текущего потока
        *
        * @return сгенерированный ключ.
        */
        public String generateKey()
        {
                return String.valueOf(Thread.currentThread().hashCode());
        }
}

Цитата:

Вот непойму, почему все гонятся за обновлениями то?!
По теме, пСКЛ это замечательно, но МС былоб лучше
А в чём проблема со скриптами?На просторах всё есть и без хайда
Ну если что, пиши в аську ( есть в профиле ) помогу чем смогу
я не гонюсь :) просто полезные функции.
НУу ч то с Лог сервером то ищо долго даже хоть до бета реализа.
Хочу сделать норм серв под х1 рейты гдето:)

Добавлено через 10 минут
Aquanox

Hibernate Core
An excellent Java framework, the Hibernate project provides nearly transparent persistence for Java classes. It supports association, inheritance, polymorphism, composition, and the standard Java collection classes. Instead of invasive inheritance, manual interface implementation, code generation, or post-processing, Hibernate uses run-time reflection at system initialization to generate SQL and proxy implementations.

The API and query language (HQL) have the object-oriented feel of Versant, yet Hibernate supports blazing fast access to MySQL Server, PostgreSQL, Oracle, DB2, and many other relational databases. Hibernate works well both inside and outside of application servers. Many programmers are beginning to consider Hibernate as a preferred alternative to CMP in J2EE environments.

Spring Framework
The Spring project provides a layered Java/J2EE application framework based on code published in Expert One-on-One J2EE Design and Development by Rod Johnson (Wrox, 2002). The Spring Framework includes:

A complete lightweight container, providing centralized, automated, and transparent configuration and wiring of your application objects.

A common abstraction layer for transaction management, allowing for pluggable transaction managers, and making it easy to demarcate transactions without dealing with low-level issues. In contrast to plain JTA or EJB CMT, Spring's transaction support is not tied to any J2EE environment.

A JDBC abstraction layer that simplifies error handling and greatly reduces the amount of code you need to write.

Integration with Toplink, Hibernate, JDO, and iBATIS SQL Maps.

First-class Hibernate support with lots of IoC convenience features, addressing many typical Hibernate integration issues.

Fully integrated AOP functionality meaning you can AOP-enable any object managed by Spring. For example, you can have declarative transaction management without EJB, even without JTA, if you're using a single database in Tomcat or another web container without JTA support.

A flexible MVC web application framework. This framework is highly configurable via strategy interfaces, and accommodates multiple view technologies like JSP, Velocity, Tiles, iText, and POI.

The ability to combine a Spring middle tier with any other web MVC framework, like Struts, WebWork, or Tapestry.

A layered architecture so that each piece of functionality builds on lower levels. So you can use the JavaBeans configuration management without using the MVC framework or AOP support. But if you use the MVC framework, because it builds on the configuration framework, you can apply knowledge about configuration management to the MVC framework immediately.

Use Spring's functionality in any J2EE server, and most of it also in non-managed environments. A central focus of Spring is to allow for reusable business and data access objects that are not tied to specific J2EE services. Such objects can be reused across J2EE environments (web or EJB), standalone applications, test environments and the like without any hassle.

Мне уже нравится:).можно посмотреть:)

Aquanox 29.01.2009 22:44

Ответ: Скрипты
 
Я ведь написал что сфовский L2DatabaseFactory а не ребовский\ссровский.
Идея такова = есть маркер, отвечающий за текущий тип СУБД, все запросы идут в класс-генератор и в зависимости от маркера генерируют верный запрос.

VISTALL 30.01.2009 10:38

Ответ: Скрипты
 
тоисть сделать универсальный сервак:)

Aquanox 30.01.2009 13:48

Ответ: Скрипты
 
Цитата:

Сообщение от VISTALL (Сообщение 26967)
тоисть сделать универсальный сервак:)

лучшеб занялся оптимизацией запросов а не адаптацией к новой субд.

VISTALL 30.01.2009 14:10

Ответ: Скрипты
 
адаптация почти закончена:). MySQL не знаю мне не по душе.я уже все перевёл на postgreSQL.
Оптимизация запрос итак идет потому-что все однно их переписываю:)


Текущее время: 18:05. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot