- Хроники
- Prelude
- Harbingers of War
- Age of Splendor
- Rise of Darkness
- Scions of Destiny
- Oath of Blood
- Interlude
- The 1st Throne: The Kamael
- The 1st Throne: Hellbound
- The 2nd Throne: Gracia
- The 2nd Throne: Freya
- Chaotic Throne: High Five
- Goddess of Destruction Awakening
- Goddess of Destruction Harmony
- Goddess of Destruction Tauti
- Goddess of Destruction Glory Days
- Goddess of Destruction Lindvior
- Valliance / Epeisodion / Raiders
- Ertheia / Dimensional Strangers
- Infinite Odyssey
- Helios
- Grand Cursade
- Salvation
- Fafurion
- Shadow of the Kamael
- Prelude Of War
- Homunculus
- Return Of The Queen Ant
- Master Class
- Сборка
- All
Этот модуль предоставляет унифицированный интерфейс для взаимодействия с различными сборками серверов Lineage 2.
Занимаюсь реализацией tg webapp под la2.
Посмотрел как реализовано в большинстве web (обвязок) глаза вывалились.
## Структура проекта
```
adapt/
├── acis/ # Адаптер для серверов ACIS
├── base/ # Базовая реализация адаптера и фабрики
├── lucera/ # Адаптер для серверов Lucera
├── pwsoft/ # Адаптер для серверов PWsoft
└── index.js # Основная точка входа
```
## Использование
```javascript
const { getAdapter } = require('./adapt');
// Получение адаптера для конкретного сервера
const adapter = await getAdapter(serverId);
// Получение списка персонажей
const characters = await adapter.getCharacters('pvp', 20, 0);
// Получение информации о клане
const clan = await adapter.getClanDetails(clanId);
```
## Основные возможности
- Унифицированный интерфейс для разных сборок серверов
- Кэширование адаптеров для оптимизации производительности
- Обработка ошибок и логирование
- Поддержка автоматического переподключения
- Определение типа сервера на основе конфигурации
## Поддерживаемые операции
### Работа с персонажами
- Получение списка персонажей с фильтрацией
- Поиск персонажей по имени
- Детальная информация о персонаже
- Управление инвентарем
- PvP/PK статистика
### Работа с кланами
- Получение списка кланов
- Поиск кланов по названию
- Детальная информация о клане
- Управление составом клана
### Мониторинг сервера
- Проверка статуса сервера
- Получение количества онлайн игроков
- Статистика активности
- Мониторинг системных ресурсов
## Примеры использования
### Получение статистики персонажа
```javascript
const pvpStats = await adapter.getCharacterPvPStats(charId);
console.log(`PvP убийства: ${pvpStats.pvp_kills}`);
console.log(`PK убийства: ${pvpStats.pk_kills}`);
```
### Работа с кланами
```javascript
// Получение списка кланов
const clans = await adapter.getClans('reputation', 10, 0);
// Получение членов клана
const members = await adapter.getClanMembers(clanId);
```
### Поиск персонажей
```javascript
// Поиск по имени
const results = await adapter.searchCharacters('Test');
// Получение детальной информации
const details = await adapter.getCharacterDetails(charId);
```
## Обработка ошибок
Все методы адаптера возвращают Promise и обрабатывают ошибки:
```javascript
try {
const adapter = await getAdapter(serverId);
const characters = await adapter.getCharacters();
} catch (error) {
console.error('Ошибка при получении персонажей:', error.message);
}
```
## Конфигурация
Настройки серверов находятся в файле `config/servers.js`:
- ID сервера
- Название
- IP адрес
- Порты (login, game)
- Настройки базы данных
- Тестовые аккаунты
## Расширение функционала
Для добавления поддержки новой сборки сервера:
1. Создайте новый каталог в `adapt/`
2. Реализуйте базовый интерфейс адаптера
3. Добавьте фабрику в `base/factory.js`
4. Обновите конфигурацию в `config/servers.js`
```
adapt/
├── acis/ # Адаптер для серверов ACIS
├── base/ # Базовая реализация адаптера и фабрики
├── lucera/ # Адаптер для серверов Lucera
├── pwsoft/ # Адаптер для серверов PWsoft
└── index.js # Основная точка входа
```
## Использование
```javascript
const { getAdapter } = require('./adapt');
// Получение адаптера для конкретного сервера
const adapter = await getAdapter(serverId);
// Получение списка персонажей
const characters = await adapter.getCharacters('pvp', 20, 0);
// Получение информации о клане
const clan = await adapter.getClanDetails(clanId);
```
## Основные возможности
- Унифицированный интерфейс для разных сборок серверов
- Кэширование адаптеров для оптимизации производительности
- Обработка ошибок и логирование
- Поддержка автоматического переподключения
- Определение типа сервера на основе конфигурации
## Поддерживаемые операции
### Работа с персонажами
- Получение списка персонажей с фильтрацией
- Поиск персонажей по имени
- Детальная информация о персонаже
- Управление инвентарем
- PvP/PK статистика
### Работа с кланами
- Получение списка кланов
- Поиск кланов по названию
- Детальная информация о клане
- Управление составом клана
### Мониторинг сервера
- Проверка статуса сервера
- Получение количества онлайн игроков
- Статистика активности
- Мониторинг системных ресурсов
## Примеры использования
### Получение статистики персонажа
```javascript
const pvpStats = await adapter.getCharacterPvPStats(charId);
console.log(`PvP убийства: ${pvpStats.pvp_kills}`);
console.log(`PK убийства: ${pvpStats.pk_kills}`);
```
### Работа с кланами
```javascript
// Получение списка кланов
const clans = await adapter.getClans('reputation', 10, 0);
// Получение членов клана
const members = await adapter.getClanMembers(clanId);
```
### Поиск персонажей
```javascript
// Поиск по имени
const results = await adapter.searchCharacters('Test');
// Получение детальной информации
const details = await adapter.getCharacterDetails(charId);
```
## Обработка ошибок
Все методы адаптера возвращают Promise и обрабатывают ошибки:
```javascript
try {
const adapter = await getAdapter(serverId);
const characters = await adapter.getCharacters();
} catch (error) {
console.error('Ошибка при получении персонажей:', error.message);
}
```
## Конфигурация
Настройки серверов находятся в файле `config/servers.js`:
- ID сервера
- Название
- IP адрес
- Порты (login, game)
- Настройки базы данных
- Тестовые аккаунты
## Расширение функционала
Для добавления поддержки новой сборки сервера:
1. Создайте новый каталог в `adapt/`
2. Реализуйте базовый интерфейс адаптера
3. Добавьте фабрику в `base/factory.js`
4. Обновите конфигурацию в `config/servers.js`
Занимаюсь реализацией tg webapp под la2.
Посмотрел как реализовано в большинстве web (обвязок) глаза вывалились.
Минусы реализации адаптеров в нынешних web:
- Сильная связанность классов - система построена на наследовании вместо композиции, что снижает гибкость. Постоянно что-то наследуется, что создает жесткую зависимость между адаптерами разных серверов.
- Избыточное дублирование кода - многие методы повторяются с минимальными изменениями в разных адаптерах, вместо повторного использования общей логики.
- Отсутствие единого интерфейса - хотя существуют интерфейсы IProxy, разные адаптеры имеют несогласованные методы и сигнатуры.
- Сложная иерархия наследования - трудно отследить, где реализована конкретная логика, из-за многоуровневого наследования и делегирования.
- Нет централизованной обработки ошибок - каждый адаптер обрабатывает ошибки по-своему, что затрудняет поддержку и отладку.
- Несогласованное именование - методы для одинаковых операций называются по-разному в разных адаптерах.
- Жесткая привязка к конкретным таблицам БД - адаптеры тесно связаны с конкретными названиями таблиц и полей, что затрудняет поддержку новых версий серверов.
- Четкая иерархия - все адаптеры наследуются от BaseAdapter, который определяет общий интерфейс.
- Фабричный метод - использование createAdapter в factory.js для динамического создания нужного адаптера.
- Единообразная обработка ошибок - более последовательный подход к обработке ошибок.
- Более чистый код - лучшая структура и меньше дублирования за счет наследования от базового класса.
- Четкое разделение ответственности - каждый адаптер отвечает только за специфику конкретного типа сервера.