Глава XIII - Скрипты



 1 - Как это работает


Скрипты могут использоваться для реагирования на события и команды, доступные серверу.
Поддерживаемые скриптовые языки - VBScript, JScript.
Чтобы использовать скрипт, его необходимо поместить в каталог <установочный путь>/scripts/.

 2 - Доступные ресурсы


Здесь приведён список вызываемых функций.

onSiteXXXXX , где XXXXX - это ваша команда SITE
Эта команда имеет место, когда пользователь вводит команду SITE (например, "SITE BLA test test2" вызовет функцию onSiteBla("test test2"))
Как производить анализ параметров, решаете вы.

Следующие функции вызываются без параметров :

OnClientConnected : клиент, только что подключённый к домену
OnClientDisconnected : клиент, отсоединившийся от домена
OnClientBanned : клиент пытался подключиться, но он заблокирован в домене
OnClientHammering : клиент превысил макc.число разрешенных соединений (hammer), заблокирован и отключён
OnSameIPConnect : клиент отключён, т.к. слишком много соединений с одного IP
OnTooManyClient : клиент отключён, т.к. слишком много соединений

OnClientTimeOut : клиент отключён по таймауту
OnClientLoggedIn : клиент только что авторизовался
OnDomainClosed : домен перешёл в режим автономной работы
OnDomainOpened : домен перешёл в режим работы в сети : домен прослушивает входящие подключения
OnDomainStarted : был создан домен
OnDomainStopped : был удалён домен
OnEveryDay, OnEveryHour : только вызов скриптов домена
OnDirCreated : был создан каталог
OnDirDeleted : был удалён каталог
OnFileBanned : клиент попытался закачать заблокированный файл
OnFileDeleted : клиент удалил файл
OnFileDownloaded : клиент закончил загрузку файла
OnFileRenamed : клиент успешно переименовал файл/каталог
OnFileUploaded : клиент закончил закачку файла
OnFileUploadFailed : клиент прервал операцию или при закачке произошла ошибка сокета
OnIPChanged : IP-адрес домена изменился
OnQuotaExceeded : клиент превысил квоту

Примечание:
Для каждого клиента создаётся экземпляр скрипта, поэтому 2 скрипта могут исполняться одновременно, затем файл может быть заблокирован другим скриптом, который открыл его.

Объекты, доступные в скриптах :

:-------------------------------------------------------------

Object Server

string CertificatePath : Возвращает путь к хранилищу сертификатов
string LogPath : Возвращает путь к хранилищу файлов журнала
string ScriptPath : Возвращает путь к хранилищу скриптов
string ServerPath : Возвращает путь к приложению

:-------------------------------------------------------------

Object Domain

int Bandwidth : Возвращает текущее использование полосы пропускания в байтах/с
int ClientCount : Возвращает число клиентов, подсоединённых к домену
string Name : Возвращает имя домена
date StartTime : Возвращает дату и время запуска домена

void WriteToLog(String log) : Если включено ведение журнала, пишет параметр в журнал

:-------------------------------------------------------------

Object Client

date ConnectedSince : Возвращает дату подключения
string HostName : Возвращает имя узла клиента (если включена опция ResolveIP)
string ID : Возвращает уникальный ID клиента
string PeerAddr : Возвращает одноранговый адрес клиента
int PeerPort : Возвращает одноранговый порт клиента

string LocalAddr : Возвращает локальный адрес клиента
int LocalPort : Возвращает локальный порт клиента
string Keyword : Возвращает текущую команду клавиатуры
string Directory : Возвращает текущий виртуальный каталог клиента
string DirectoryReal : Возвращает текущий путь клиента
boolean Logged : Возвращает true, если клиент вошёл на сервер
int RestartPos : Возвращает маркер позиции перезапуска
string Username : Возвращает имя клиента
string Filename : Возвращает текущее виртуальное имя (например, "/temp/file.txt")
string FilenameReal : Возвращает текущее имя файла (например, "C:\temp\file.txt")
int FileSize : Возвращает размер последнего переданного файла
int FilePosition
int TransferTimeSeconds : Возвращает время передачи в секундах
string TransferTime : Возвращает время передачи в виде "00:00:00"
int TransferSpeedBps : Возвращает скорость передачи в байтах/с
string TransferSpeed : Возвращает скорость передачи в КБайтах/с в виде "128 КБайт/с"

void ConvertToReal(string path) : Преобразовать виртуальный путь (например, /temp) в реальный (например, C:\Temp)
void Send(string Message) : Послать строку клиенту void send(string Message, int Code) : Послать FTP-форматированную строку клиенту, например, 200 ok

 3 - Пример


'СКРИПТ: Log downloads.vbs
'АВТОР: Gene6
'ДАТА: 2002/10/04
'ОПИСАНИЕ: Записать каждую загрузку в файл журнала
' Каждая запись имеет следующий формат - "date time#username#filename#filenamereal#from#to#time#speed


'Константы
Delimiter = "#"
ForAppending = 8


'Создать путь к файлу
strYear = Year(Date)

strMonth = Month(Date)
' добавить лидирующий ноль if (strMonth < 10) Then
strMonth = "0" & strMonth
end if

strDay = Day(Date)
' добавить лидирующий ноль
if (strDay < 10) Then
strDay = "0" & strDay
end if

LogFilename = Server.LogPath & Domain.Name & "-" & strYear & "-" & strMonth & "-" & strDay & "-downloads.log"


sub OnFileDownloaded()
Set fso = CreateObject("Scripting.fileSystemObject")
Set LogObj = fso.OpenTextFile(LogFilename, ForAppending, true)

Line = FormatDateTime(Now) & Delimiter & Client.Username & Delimiter & Client.Filename & Delimiter & Client.FilenameReal & Delimiter & Client.RestartPos & Delimiter & Client.FilePosition & Delimiter & Client.TransferTime & Delimiter & Client.TransferSpeed

LogObj.WriteLine(Line)
LogObj.Close
end sub