Глава I. ЗЗЗ сървър

ЗЗЗ сървър е socket и http многопотребителски сървър реализиран за различни операционни системи Windows, Mac OS X, Linux (включително за Raspberry PI). Той може да бъде достъпван чрез браузър или от други приложения написани на различни програмни езици. Има варианти, които поддържат TLS криптирани връзки, които няма да се разглеждат в настоящото издание на книгата.

Системни изисквания:

Самостоятелно приложение - не изисква инсталиране на допълнителен софтуер.

Команден ред

Примерен команден ред:

За Windows

ZZZServer.exe -p 80 -s 100

ZZZServer.exe - стартиращ файл

За Linux или за Mac OS X

./ZZZServer -p 80 -s 100

ZZZServer - стартиращ файл

-p 80 – 80 е номерът на порта, на който слуша сървъра.

-s 100 – 100 е максималният брой програмни стъпки, които да бъдат изпълнени от сървъра за активния клиент преди да премине към следващия.

Описание на други параметри задавани чрез командния ред при стартиране на ЗЗЗ сървър:

-p - задава номера на порта, на който слуша сървъра по подразбиране е 3333;

-d - задава директрорията за документи за сървъра по подразбиране е www;

-c - максимален брой на едновременно обработваните клиенти от сървъра по подразбиране 100;

-s - максимален брой програмни стъпки, които изпълнява сървъра за активния клиент преди да премине към следващия по подразбиране 30;

-h - извежда помощна информация;

-l - задава началото на имената на лог файлове, може да включва и име на папка, но ако папката не съществува не я създава. По подразбиране не прави лог файлове;

-lf - задава формат на времето към името на лог файловете. По подразбиране е -%Y-%m-%d-%H.log;

Възможните форматиращи кодове са:

-ban - забранява различни дейности:

-ban base create - забранява създаването на нови бази. Полезна е когато сървъра трябва да работи само с предварително създадени бази;

-ban base write - освен, че забранява създаването на нови бази, забранява и записа в съществуващите бази управлявани от сървъра. Позволява само четене от базите. Полезна при справочни системи или когато съдържанието на базите трябва да остане непроменено;

Следващите опции не се препоръчва да бъдат включвани за ЗЗЗ сървър, който е видим в Интернет.

-system - позволява изпълнение на системни команди по подразбиране е изключена;

-write - позволява командите за запис във файлове по подразбиране е изключена.

Избирането на папка, от която ЗЗЗ сървъра да чете става чрез конфигурационния файл zzzserver.cfg.

Той трябва да се намира в работната папка на сървъра и съдържа последователни редове с име на хост след него знака равно и име на папка.

Името на хост може да завършва с двоеточие и номер на порт.

За неописаните в конфигурационния файл хостове, които обслужва сървъра се използва папката по подразбиране www или указаната с опцията -d от командния ред.

По този начин един ЗЗЗ сървър може да обслужва множество хостове.

Един примерен zzzserver.cfg файл е следния:

kasovbon.zzz.bg=wwwkasovbon
www.kasovbon.zzz.bg=wwwkasovbon

Управляващ език

Управляващият език е реализация на езика TTM с вградени команди за управление на ЗЗЗ бази, за свързване с други сървъри и за работа с "живи" обекти.

Езикът TTM е рекурсивен функционален макро език (подобен на езика Lisp), който може да се използва в системи за изкуствен интелект.

Общи положения

Интерпретаторът на езика TTM обработва текстова последователност по следния простичък начин:
Следната програма на TTM извежда съобщението ‘Hello World from ZZZ Server!’

Командата cout извежда низ.

Команди

Синтаксисът на командите е:

#[команда;параметър1;параметър2;параметър3] - активна команда, т.е. резултатът се интерпретира отново

##[команда;параметър1;параметър2;параметър3] - пасивна команда, т.е. резултатът се връща без да се интерпретира

Броят на параметрите е неограничен, ако е необходимо в параметъра да има точка и запетая, тя трябва да бъде заградена в квадратни скоби.

Описанието на командите е следното: име на командата, действие на командата, параметри, ако има, примерно използване в активен режим (аналогично е използването в пасивен режим, тогава пред командата има ##).

ВНИМАНИЕ:
Можете да изпълните командите като натиснете бутона [Изпълни] под примерния програмен код.

Основни команди

cout+

Включване на трасирането.

Няма параметри.

cout-

Изключване на трасирането.

Няма параметри.

=

Дефинира глобален низ.

Първият параметър е името на променливата, в която се помни низа, а вторият - самият низ.

.=

Дефинира низ за съответната област на видимост.

Първият параметър е името на променливата, в която се помни низа, а вторият - самият низ.
Препоръчва се използването на настоящата функция пред използването на = навсякъде където е възможно, особено при работа с класове!

.v

Задава нивото на видимост.

Първият параметър е нивото като число.

.^

Прочита нивото на видимост.

.+

Увеличава нивото на видимост с единица.

.-

Намалява нивото на видимост с единица.

cout

Разпечатва низ в конзолата и го извежда в резултатния буфер.

Функцията има един параметър - текстов низ, който трябва да бъде изведен.

out

Извежда низ в резултатния буфер без да го разпечатва в конзолата.

Функцията има един параметър - низът, който трябва да бъде изведен.
Тази функция е по-бърза от cout, защото не губи време за извеждане в конзолата!

+

Събира две числа с двойна точност.

Първият и вторият параметър са събираемите.
Третият незадължителен параметър е точността след десетичната запетая, която по подразбиране е 17.

-

Изважда две числа с двойна точност.

Първият параметър е умаляемото, вторият умалителят.
Третият незадължителен параметър е точността след десетичната запетая, която по подразбиране е 17.

*

Умножава две числа с двойна точност.

Първият и вторият параметър са множителите.
Третият незадължителен параметър е точността след десетичната запетая, която по подразбиране е 17.

/

Дели две числа с двойна точност.

Първият параметър е делимото, а вторият - делителят.
Третият незадължителен параметър е точността след десетичната запетая, която по подразбиране е 17.

==

Сравнява първите два параметъра като низове и ако са равни - изпълнява третия, ако са различни - четвъртия.

==n

Сравнява първите два параметъра като числа и ако са равни - изпълнява третия, ако са различни - четвъртия.

>=

Сравнява първите два параметъра като низове и ако първият е по - голям или равен на втория - изпълнява третия, в противен случай изпълнява четвъртия.

>=n

Сравнява първите два параметъра като числа и ако първия е по-голям или равен на втория - изпълнява третия, в противен случай изпълнява четвъртия.

=.

Сегментира низ

Използва се за сегментиране на низ дефиниран с командата = като замества текста в дефинирания низ със съответните параметри от командата и ги номерира според тяхната последователност.

#[...]

Изпълнява низ дефиниран с = като замества параметрите сегментирани със =.

##[...]

Връща низа дефиниран с =

is

Замества текста в първия параметър, който съответства на този от втория параметър, с текста от третия

ˆ.

Прочита поредния символ от дефиниран с = низ.

Първият параметър е името на дефинирания низ.
Вторият параметър е резултът при неуспех.

=x

Изтрива името на низ дефиниран с =

=x..

Изтрива всички имена на низовете дефинирани с =

x*v

Позиционира указателя към текущия символ в началото на сегмент с указано име

Първият параметър е името на низа съдържащ сегмента.
Вторият параметър е името на сегмента, след който трябва да позиционираме указателя към текущия символ.
Третият параметър е резулататът, ако няма повече сегменти.

*0

Позиционира указателя към текущия символ в началото на низа дефиниран с =

ta

Сравнява два UNICODE низа и определя дали първият е по-голям или равен на втория по азбучен ред

chr

Преобразува число към уникод

tcn

Преобразува уникод символ към шестнадесетично число

ˆ..

Прочита n символа от дефиниран с = низ или ако е достигнат края на низа връща последния параметър (#[ˆ..;name;n;{after end}])

ˆ(..*

Прочита дефиниран с = низ от началото му до указателя

ˆ*..)

Прочита дефиниран с = низ от указателя до края му

Прочита указателя на дефиниран с = низ

*v

Задава указателя на дефиниран с = низ

(..)

Връща дължината в символи на дефиниран с = низ

(.)

Връща дължината в символи на низ

trf

Заменя първия срещнат подниз с втория

ts

Копира сегмент между два низа от низ дефиниран с =

tt

Тест за наличие на текст в дефиниран с = низ

ttc

Тест за наличие на текст в дефиниран с = низ, без значение на главни и малки букви

|

Извършва ИЛИ между две цели числа

&

Извършва И между две цели числа

~

Изпълнява изключващо ИЛИ над аргумента си

ln

Извежда списък на дефинираните с = имена разделени с указания параметър (list named)

existsf

Проверява за наличието на дефинирано име

df

Изтрива файл (delete file)

Работи само, ако е включена опцията -write от командния ред на ЗЗЗ сървъра!
Първият параметър е името на файла.
Вторият параметър е резултатът при неуспех.

oi

Отваря файл за четене (open input)

Първият параметър е описател на файла.
Вторият параметър е името на файла.
Третият параметър е резултатът при неуспех.

oo

Отваря файл за запис (open output)

Работи само, ако е включена опцията -write от командния ред на ЗЗЗ сървъра!
Първият параметър е описател на файла.
Вторият параметър е името на файла.
Третият параметър е резултатът при неуспех.

oa

Отваря файл за добавяне (open append)

Работи само, ако е включена опцията -write от командния ред на ЗЗЗ сървъра!
Първият параметър е описател на файла.
Вторият параметър е името на файла.
Третият параметър е резултатът при неуспех.

cf

Затваря файл (close file)

Първият параметър е описателят на файла.

frs

Прочита низ от файл до подразбиращ се мета символ (file read string)

frc

Прочита символ от файл (file read char)

fcm

Променя подразбиращия се мета символ (file change meta)

fps

Записва низ във файл (file print string)

load

Зарежда файл като при активно извикване го интерпретира

Първият параметър е името на файла.
Вторият параметър е резултатът при неуспех.

system

Изпълнява команда от операционната система

Работи само, ако е включена опцията -system от командния ред на ЗЗЗ сървъра!
Първият параметър е командата заедно с нейните параметри.

s2us

Преобразува низ към низ с уникод кодове (string to unicode string)

#

Използва се за вмъкване на коментари (null command)

exit

Спира интерпретирането

Допълнителни полезни функции

fmtl

Форматира дълго, цяло число като използва форматиращ низ стандартен за командата sprintf от C/C++

Първият параметър е форматиращият низ.
Вторият параметър е числото, което трябва да бъде форматирано.

refmtl

Преформатира дълго, цяло число като използва форматиращ низ стандартен за командата sprintf от C/C++.

С тази команда примерно може бързо да бъде преобразувано едно число от 16-тично към 10-тично.
Първите два параметъра са форматиращи низове.
Третият параметър е числото, което трябва да бъде преформатирано.

fmtd

Форматира реално, цяло число с двойна точност като използва форматиращ низ стандартен за командата sprintf от C/C++

Първият параметър е форматиращият низ.
Вторият параметър е числото, което трябва да бъде форматирано.

getTime

Връща броят на милисекундите от 1-ви януари, 1970 г., 00:00:00 GMT

fmtTime

Форматира време

Първият параметър е форматиращият низ.
Вторият параметър е времето в милисекунди.

getFileTime

Връща времето от последната промяна на файл, в милисекунди

Първият параметър е пътят до файла.

getFileSize

Връща размера на файла

Първият параметър е пътят до файла.

outLoadBinary

Извежда файл в двоичен формат

Първият параметър е пътят до файла.
Вторият параметър е резултатът, който връща в случай на грешка.

base64LoadBinary

Кодира файл в base64

Първият параметър е пътят до файла.
Вторият параметър е резултатът, който връща в случай на грешка.

base64SaveBinary

Записва двоичен файл, като го декодира от base64

Работи само, ако е включена опцията -write от командния ред на ЗЗЗ сървъра!
Първият параметър е пътят до файла.
Вторият параметър е съдържанието кодирано в base64.

^UID

Връща уникален идентификатор

BuffersGetState

Връща информация за буферирането на файлове от сървъра

RegEx

Прилага регулярен израз към низ

Първият параметър е регулярният израз.
Вторият параметър е низа, към който да бъде приложен.
Третият незадължителен параметър е IGNORE_CASE, при всяка друга стойност прави разлика межди малки и главни букви.
Четвъртият незадължителен параметър е началото на дефинирано име, в което да помни намерените съвпадения.
Петият незадължителен параметър е максималният брой съвпадения.

Връща число по-голямо от 0 при успех.
Връща дефинирани имена с откритите съвпадения започващи с указаното име от четвъртия параметър и завършващи с индекс от 0 до броя на откритите съвпадения, не по-голям от петия параметър.

MD5

Изчислява контролна сума MD5

Първият параметър е низа, за който се изчислява контролната сума.

Връща изчислената контролна сума.

SHA1

Изчислява контролна сума SHA1

Първият параметър е низа, за който се изчислява контролната сума.

Връща изчислената контролна сума.

SHA256

Изчислява контролна сума SHA256

Първият параметър е низа, за който се изчислява контролната сума.

Връща изчислената контролна сума.

outBase64Decode

Добавя в изходния буфер резултата от декодирането от base64 на първия параметър

Първият параметър е низа кодиран в base64, който да се декодира.

При успех връща дължината на резулатата от декодирането.

rand

Генерира случайно чсло в зададен интервал и начална стойност

Първият параметър е интервала - цяло число.
Вторият параметър е началната стойност.

append

Добавя низ към дефиниран низ

Първият параметър е името на дефинирания низ.
Вторият параметър е добавяният низ

lShiftBits

Премества битовете на зададеното число наляво

Първият параметър е числото.
Вторият параметър е отместването в интервала от 0 до 63.

rShiftBits

Премества битовете на зададеното число надясно

Първият параметър е числото.
Вторият параметър е отместването в интервала от 0 до 63.
  • countBits - 82
  • countBits

    Определя броя на вдигнатите битове в число

    Първият параметър е числото.