<?xml version="1.0" encoding="windows-1251"?> <!-- --> <module name="IChat server configuration" description="IChat server configuration file"> <body> <!-- Базовые настройки. Создает экземпляр com.web_visage.ichatserv.admin.AdminConfig с пометкой, что данный экземпляр должен являться единственным в контейнере --> <bean id='configuration' class='com.web_visage.ichatserv.admin.AdminConfig' autowire="false" singleton='true'> <!-- Раскоментируйте строчку ниже если вам нужна "привязка" сервера к определенному IP-адресу (интерфейсу). По умолчанию сервер привязывается к "любому адресу" (0.0.0.0) --> <!--prop key='hostName' val='127.0.0.1'/--> <!-- Порт, на котором сервер будет ожидать соединения от клиентов --> <prop key='port' val='6666' /> <!-- Фабрика сообщений, используемая для создания сообщений ичата. Использование альтернативной фабрики необходимо в случае работы с видоизмененными клиентами, такими как "антихак" версия от John Do. --> <prop key='messageFactory' val='$MessageFactory' /> <!-- Хранилище клиентских соединений --> <prop key='clientRegistry' val='$ClientRegistry' /> <!-- Хранилище зарегестрированных (корректно подсоединившихся) клиентов --> <prop key='registeredClientsRegistry' val='$RegisteredClientsRegistry' /> <!-- Обработчик сообщений. Альтернативные обработчики могут использоваться для изменения поведения сервера (смотри реализацию мат-фильтра) --> <prop key='messageHandler' val='$MessageHandler' /> <!-- Максимальный размер пула рабочих потоков --> <prop key='maxThreadPoolSize' val='10' /> <!-- Минимальный размер активных рабочих потоков --> <prop key='coreThreadPoolSize' val='5' /> <!-- Время в секундах, через которое при осутствии активности в потоке дополнительный поток устраняется из пула --> <prop key='threadKeepAliveTime' val='60' /> <!-- Размер очереди, по пресыщении которой в пуле создается новый рабочий поток --> <prop key='threadPoolQueueCapacity' val='3000' /> <!-- Путь к файлу, содержащему список заблокированных IP адресов --> <prop key='bannedListPath' val='./banned.txt' /> <!-- Время в миллисекундах, через которое будут проверяться изменения в конфигурационных файлах. (при отсутствии изменений в файле файл НЕ ПЕРЕЧИТЫВАЕТСЯ )--> <prop key='fileMonitorRefreshTime' val='10000' /> <!-- Путь к файлу настроек логирования --> <prop key='logIniPath' val='./logging.ini' /> <!-- Настройки, специфичные для расширенной (администрируемой версии сервера) --> <!-- не используется --> <prop key='fakeAdminUserName' val='Admin' /> <!-- не используется --> <prop key='fakeAdminUserSender' val='xxxx/admin-hi/admin-lo' /> <!-- не используется --> <prop key='adminPassword' val='test' /> <!-- Путь к файлу с регулярными выражениями мат-фильтра --> <prop key='wordPatternFilePath' val='./wordpatterns.txt' /> <!-- Путь к файлу с исключениями из обработки мат-фильтра --> <prop key='wordExclusionsFilePath' val='./wordexclusions.txt' /> <!-- Компонент, следящий за изменениями списка паттернов мат-фильтра --> <prop key='wordPatternsList' val='$UpdatableCensorFilter' /> <!-- Компонент, следящий за изменениями списка исключений --> <prop key='wordExclusionsList' val='$UpdatableCensorFilter' /> </bean> <!-- Секция расширенной настройки --> <!-- Главный компонент сервера. Этот компонент следит за жизненным циклом и производит дополнительную настройку сервера --> <ctor id='ServerComponent' class='com.web_visage.ichatserv.admin.AdministratableIChatServer' initializer='init' starter='start' stopper='stop' disposer='dispose' singleton='true'> <arg ind='0' val='$configuration' /> </ctor> <!-- Компонент обновляемого списка паттернов --> <ctor id='WordPatternsList' class='com.web_visage.ichatserv.censor.WordPatternsList' singleton='true'> <arg ind='0' val='./wordpatterns.txt'/> </ctor> <!-- Используемая фабрика сообщений --> <method id='MessageFactory' class='com.web_visage.ichat.DefaultMessageFactory' name='getSingleton' /> <!-- Для версии от John Do эта строчка может выглядеть так (необходимо раскомментировать перед использованием): --> <!-- ctor id='MessageFactory' class='com.web_visage.ichat.JohnDoFactory' /--> <!-- Таблица связей для хранений клиентских соединений, должна быть подвидом Map<ClientDescriptor, ClientHandler> --> <ctor id='ClientRegistry' class='java.util.concurrent.ConcurrentHashMap' params='int,float,int'> <!-- начальная ёмкость таблицы --> <arg ind='0' val='50' /> <!-- коэффициент загрузки (по достижении которого в таблице резервируются новые ячейки) --> <arg ind='1' val='0.75' /> <!-- ожидаемоме количество использующих таблицу потоков, должно быть равным maxThreadPoolSize + 1 --> <arg ind='2' val='11' /> </ctor> <!-- Таблица связей для хранения зарегестрированных соединений, должна быть подвидом Map<IChatSender, ClientDescriptor> --> <ctor id='RegisteredClientsRegistry' class='java.util.concurrent.ConcurrentHashMap' params='int,float,int'> <!-- начальная ёмкость таблицы --> <arg ind='0' val='50' /> <!-- коэффициент загрузки (по достижении которого в таблице резервируются новые ячейки) --> <arg ind='1' val='0.75' /> <!-- ожидаемоме количество использующих таблицу потоков, должно быть равным maxThreadPoolSize + 1 --> <arg ind='2' val='11' /> </ctor> <!-- Обработчик входящих сообщений --> <ctor id='MessageHandler' class='com.web_visage.ichatserv.admin.RemoteAdminMessageHandler'> <arg ind='0' val='$configuration' /> <arg ind='1' val='$MessageFactory' /> <arg ind='2' val='$ClientRegistry' /> <arg ind='3' val='$RegisteredClientsRegistry' /> <arg ind='4' val='$SpecificationToActionMapper' /> </ctor> <!-- Компонент мат-фильтра. Получает из файла список паттернов нецензурной брани, в случае совпадения заменяет на указанную строку --> <ctor id='UpdatableCensorFilter' class='com.web_visage.ichatserv.censor.UpdatableCensorFilter' > <!-- Строка, на которую будет заменено нецензурное выражение --> <arg ind='0' val=':censored:' /> <!-- файл с паттернами нецензурной брани --> <arg ind='1' val='./wordpatterns.txt' /> </ctor> <!-- Карта соответствия спецификация->компонент. Описывает выполнение условий какой спецификации должно приводить к запуску которого компонента map( spec-> {action ( filter, filter, ..., filter ) , ..., action(..) }, spec-> { action(...), ... , action(...)} ) --> <sequence id='SpecificationToActionMapper'> <ctor var='Spec' class='com.web_visage.ichatserv.action.DummySpec' /> <ctor var='SpecMap' class='java.util.HashMap' params='' /> <array var='ActionArr' type='com.web_visage.ichatserv.action.MessageAction[]'> <ctor class='com.web_visage.ichatserv.action.FilterAction' > <arg ind='0' val='$UpdatableCensorFilter' /> </ctor> </array> <method name='put' args='$Spec,$ActionArr' component='SpecMap' /> <return val='$SpecMap' /> </sequence> </body> </module>