Автор | Сообщение |
|
| |
Пост N: 2728
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 11:27. Заголовок: Leto DB Server (продолжение 10) (продолжение)
Продолжаем тут
|
|
|
Ответов - 191
, стр:
1
2
3
4
5
6
7
8
9
10
All
[только новые]
|
|
|
| |
Пост N: 7
Зарегистрирован: 06.12.14
|
|
Отправлено: 06.04.15 11:02. Заголовок: alkresin пишет: Ест..
alkresin пишет: цитата: | Есть ли возможность биндить сервер к одному конкретному адресу Поясните, что именно вы имеете ввиду. |
| Сейчас сервер стартует без указания IP адреса, т.е. использует все доступные IP адреса с указанным портом. Хотелось бы иметь возможность, чтобы сервер слушал запросы только на ОДНОМ IP адресе, например 127.0.0.1 или любой другой ОДИН адрес который можно было бы указать. Думаю это было бы более разумно для различных условий использования Leto DB. alkresin пишет: цитата: | Возможно ли добавить в Leto DB функцию эквивалентную FCREATE? Leto_FileWrite() создает новый файл с указанным именем, если он не существует и поэтому может служить заменой FCreate(). Отличается ли работа Leto_FileWrite от FWRITE? И да, и нет. FWrite(), как вы знаете, записывает буфер в предварительно открытый файл, начиная с текущей позиции. Leto_FileWrite() открывает файл ( или создает, если его нет ), переходит на указанную позицию (fseek), записывает буфер и закрывает файл. |
| Теперь хоть ясно, а то было непонятно почему отсутствовала функция создания файла при наличии функции записи. Пара уточнений: 1. Как поведет себя Leto_FileWrite без указания позиции начала записи? запишет сначала? 2. Как обрезать файл до размера соответствующего объему записываемых данных? В случае fcreate + fwrite независимо от наличия файла создается новый файл с нужными правами доступа и в него записывается нужная порция информации. В случае летних функций я так понимаю это должно выглядеть Leto_Ferase Leto_FileWrite ? А в случае когда есть необходимость дописать в конец файла надо использовать Leto_FileSize чтобы узнать в какой позиции находится конец файла, ввиду отсутствия функции fseek? Несколько непривычно получается, но теперь по крайней мере механизм понятен. Еще вопрос, в пользовательских функциях есть возможность задать стартовую функцию типа RunOnStart которая будет автоматически запускаться разово после загрузки letoudf.hrb ? Ну и может быть заодно RunOnStop при выгрузке/перезагрузке letoudf.hrb. P.S. Уточню - меня больше интересует работа под *nix системами, так вот. Только что проверил работу Leto_FileWrite, файл создался с правами чтение/запись для всех. В случае использования стандартных файловых функций при создании устанавливаются такие атрибуты. /* File create flags */ FC_NORMAL - чтение/запись для всех FC_READONLY - только чтение для всех FC_HIDDEN - чтение/запись только для владельца FC_SYSTEM - чтение/исполнение для всех + запись для владельца P.P.S. Описание не совсем корректное? Leto_FileWrite( cFileName, nStart, cBuf ) --> lSuccess Записывает переменную <cBuf> в файл на сервере со смещения <nStart> размером <nLen> Кто такой <nLen> ? Насколько корректен возврат lSuccess при условиях не записалось все или не записалось часть, подозреваю в обоих будет .F., а правильнее было бы наверное <nLen>.
|
|
|
|
| moderator
|
Пост N: 899
Зарегистрирован: 06.07.06
|
|
Отправлено: 06.04.15 11:48. Заголовок: finder пишет: Хотел..
finder пишет: цитата: | Хотелось бы иметь возможность, чтобы сервер слушал запросы только на ОДНОМ IP |
|
Я посмотрю, что можно сделать. цитата: | 1. Как поведет себя Leto_FileWrite без указания позиции начала записи? запишет сначала? |
|
Да. Но лучше указать 0 ( сейчас в LETO_FILEWRITE() стоит hb_parnl(2) без проверки типа передаваемого значения ). цитата: | 2. Как обрезать файл до размера соответствующего объему записываемых данных? |
| Вы сами и ответили на этот вопрос. цитата: | Несколько непривычно получается, но теперь по крайней мере механизм понятен. |
| LetoDb создавался, в общем-то, для лругих целей. Эти функции были добавлены позже по запросам пользователей и были сделаны с учетом уже сложившейся реализации программы. цитата: | Еще вопрос, в пользовательских функциях есть возможность задать стартовую функцию... |
|
Это к Павлу, я сам эту часть кода еще не смотрел. цитата: | В случае использования стандартных файловых функций при создании устанавливаются такие атрибуты. |
| Соответствующая функция LetoDb не устанавливает права - просто вызывается стандартная ф-я Harbour hb_fsOpen(). Я вижу, 2-го апреля Павел добавил ф-ю leto_FileAttr() - сее поощью, наверное, можно установить нужные атрибуты.
|
|
|
|
| Администратор
|
Пост N: 3254
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.04.15 14:01. Заголовок: Если в модуле letoud..
Если в модуле letoudf присутствует функция с именем udf_init, она будет запущена после загрузки модуля.
|
|
|
|
| moderator
|
Пост N: 900
Зарегистрирован: 06.07.06
|
|
Отправлено: 06.04.15 17:06. Заголовок: alkresin пишет: ци..
alkresin пишет: цитата: | цитата: Хотелось бы иметь возможность, чтобы сервер слушал запросы только на ОДНОМ IP Я посмотрю, что можно сделать. |
| Добавил новый параметр в ini-файл: ip, где можно указать этот единственный ip.
|
|
|
|
| |
Пост N: 8
Зарегистрирован: 06.12.14
|
|
Отправлено: 07.04.15 00:04. Заголовок: Pasha пишет: Если в..
Pasha пишет: цитата: | Если в модуле letoudf присутствует функция с именем udf_init, она будет запущена после загрузки модуля. |
|
ТОЧНО ) Прошу прощения - провтыкал... alkresin пишет: цитата: | цитата: Хотелось бы иметь возможность, чтобы сервер слушал запросы только на ОДНОМ IP Я посмотрю, что можно сделать. Добавил новый параметр в ini-файл: ip, где можно указать этот единственный ip. |
| Проверил, вроде работает ) Спасибо. Имя параметра в letodb.ini окончательное, меняться не будет?
|
|
|
|
| |
Пост N: 9
Зарегистрирован: 06.12.14
|
|
Отправлено: 07.04.15 00:21. Заголовок: Пользовательские переменные
Какие ограничения есть на имена пользовательских групп и переменных? Длина, набор символов, количество, etc...? Доступна ли работа с ними из пользовательских функций? Возможно ли удалить группу? В этих переменных можно хранить только CNL типы?
|
|
|
|
| moderator
|
Пост N: 901
Зарегистрирован: 06.07.06
|
|
Отправлено: 07.04.15 09:44. Заголовок: finder пишет: Имя п..
finder пишет: цитата: | Имя параметра в letodb.ini окончательное, меняться не будет? |
| Окончательное. цитата: | Какие ограничения есть на имена пользовательских групп и переменных? Длина, набор символов, количество, etc...? |
| Нет ограничений. цитата: | Доступна ли работа с ними из пользовательских функций? |
| leto_var...(), или вы о чем-то другом ? цитата: | Возможно ли удалить группу? |
| Попробуйте leto_vardel( cGroupName, "" ) цитата: | В этих переменных можно хранить только CNL типы? |
| Да.
|
|
|
|
| |
Пост N: 10
Зарегистрирован: 06.12.14
|
|
Отправлено: 07.04.15 10:30. Заголовок: alkresin пишет: До..
alkresin пишет: цитата: | Возможно ли удалить группу? Попробуйте leto_vardel( cGroupName, "" ) |
| С пустой строкой в имени переменной помогло, до этого пробовал указывать только имя группы alkresin пишет: цитата: | Доступна ли работа с ними из пользовательских функций? leto_var...(), или вы о чем-то другом ? |
| letoudf.prg цитата: | #include "rddleto.ch" Function UDF_Init LETO_VARSET( 'GroupNameTest', 'VarNameTest', 'VarContent', LETO_VCREAT ) Return NIL |
| hbmk2 letoudf.prg -gh letodb stop letodb start letodb.log цитата: | 04/07/15 10:20:25: Leto DB Server has been started. Leto DB Server v.2.15 ! INIT: DataPath=/path/data, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10 04/07/15 10:20:25: Error BASE/6101 Unknown or unregistered symbol: LETO_VARSET ERROR! SETHRBERROR - pUStru not found!!!!!!!!!!!!!!!!!!!! |
| Возможно я делаю что-то не так? С пользовательскими переменными можно работать только с клиента?
|
|
|
|
| постоянный участник
|
Пост N: 554
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.04.15 11:36. Заголовок: finder readme_rus.t..
finder readme_rus.txt в конце цитата: | Функции letoUseArea, letoOrdListAdd, letoOrdCreate, letoCloseArea, leto_RecLock, leto_RecLock предназначены для использования в udf-функциях вместо rdd функций: dbUseArea, OrdListAdd, OrdCreate, dbCloseArea, RLock, dbUnlock LETO_VARSET( nUserStru, cGroupName, cVarName, xValue[, nFlags ) --> lSuccess LETO_VARGET( nUserStru, cGroupName, cVarName ) --> xValue LETO_VARINCR( nUserStru, cGroupName, cVarName ) --> nValue LETO_VARDECR( nUserStru, cGroupName, cVarName ) --> nValue LETO_VARDEL( nUserStru, cGroupName, cVarName ) --> lSuccess LETO_VARGETLIST( nUserStru, [cGroupName, [lValue]] ) --> aList |
|
|
|
|
|
| постоянный участник
|
Пост N: 555
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.04.15 11:42. Заголовок: PS. в пред.версии le..
PS. в пред.версии letodb (двухпоточной): leto_varSet( NIL, cGru, cNam, cVal, LETO_VCREAT ) ... cVal := leto_varGet( NIL, cGru, cNam ) в этой версии еще не пробовал
|
|
|
|
| постоянный участник
|
Пост N: 556
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.04.15 11:47. Заголовок: finder пишет:04/07/1..
finder пишет: цитата: | 04/07/15 10:20:25: Error BASE/6101 Unknown or unregistered symbol: LETO_VARSET |
| добавьте: #include "rddleto.ch"
|
|
|
|
|
| moderator
|
Пост N: 902
Зарегистрирован: 06.07.06
|
|
Отправлено: 07.04.15 11:58. Заголовок: finder пишет: С пол..
finder пишет: цитата: | С пользовательскими переменными можно работать только с клиента? |
| Leto_var... функции определены и в серверной части. Я сейчас добавил в server.prg REQUEST для них, теперь не должен ругаться. Правда, при вызове из udf_init() выскакивает ошибка - возможно, на этот момент что-то недоинициализировано, надо проверить.
|
|
|
|
| постоянный участник
|
Пост N: 557
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.04.15 13:49. Заголовок: SergKis пишет:добавь..
SergKis пишет: цитата: | добавьте: #include "rddleto.ch" |
| правильнее будет для работы с leto_var...: #define LETO_VCREAT 1 #define LETO_VOWN 2 #define LETO_VDENYWR 4 #define LETO_VDENYRD 8 #define LETO_VPREVIOUS 1 т.к. #include "rddleto.ch" содержит: #define LETO_NTX 1 #define LETO_CDX 2 что повторяется с server.prg (line 64) или убрать в server.prg (line 64, 65) и использовать #include "rddleto.ch" что лучше - это к alkresin и Pasha
|
|
|
|
| moderator
|
Пост N: 903
Зарегистрирован: 06.07.06
|
|
Отправлено: 08.04.15 09:33. Заголовок: или убрать в server...
цитата: | или убрать в server.prg (line 64, 65) и использовать #include "rddleto.ch" |
| Убрал, добавил. alkresin пишет: цитата: | Правда, при вызове из udf_init() выскакивает ошибка - возможно, на этот момент что-то недоинициализировано, надо проверить. |
| Просмотрел код. Функции leto_..., вызываемые из udf, должны в качестве первого параметра передавать nUserStru - параметр, который получает udf ф-я, это идентификатор клиента, который выполняет udf ф-ю. Поскольку udf_init() выполняется автоматически при старте и ни одного пользователя к этому моменту не определено, то leto_... функции не могут вызываться из нее.
|
|
|
|
| |
Пост N: 11
Зарегистрирован: 06.12.14
|
|
Отправлено: 08.04.15 10:36. Заголовок: alkresin пишет: Про..
alkresin пишет: цитата: | Просмотрел код. Функции leto_..., вызываемые из udf, должны в качестве первого параметра передавать nUserStru - параметр, который получает udf ф-я, это идентификатор клиента, который выполняет udf ф-ю. Поскольку udf_init() выполняется автоматически при старте и ни одного пользователя к этому моменту не определено, то leto_... функции не могут вызываться из нее. |
| Спасибо, понял, буду использовать внешний инициализатор. Может стоит в readme что-то сделать с этим описанием, а то получается что суть <nLen> не раскрыта? Возможно стоит добавить так же, что при отсутствии файла он создается. цитата: | Leto_FileWrite( cFileName, nStart, cBuf ) --> lSuccess Write <cBuf> character string to a file at the server from <nStart> offset and <nLen> length |
|
|
|
|
|
| постоянный участник
|
Пост N: 560
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.04.15 10:41. Заголовок: alkresin пишет: ни о..
alkresin пишет: цитата: | ни одного пользователя к этому моменту не определено, то leto_... функции не могут вызываться из нее. |
| в пред.версии letodb (двухпоточной) Pasha специально делал для функций leto_var..., с nUserStru := NIL - работа с общими переменными: leto_varSet( NIL, cGru, cNam, cVal, LETO_VCREAT ) cVal := leto_varGet( NIL, cGru, cNam )
|
|
|
|
| |
Пост N: 12
Зарегистрирован: 06.12.14
|
|
Отправлено: 08.04.15 10:44. Заголовок: SergKis пишет: в пр..
SergKis пишет: цитата: | в пред.версии letodb (двухпоточной) Pasha специально делал для функций leto_var..., с nUserStru := NIL - работа с общими переменными: leto_varSet( NIL, cGru, cNam, cVal, LETO_VCREAT ) cVal := leto_varGet( NIL, cGru, cNam ) |
| Я проверил после обновления, на имя функции ругаться перестало, но валится если их вызывать из udf_init() Кстати это первый раз когда у меня получилось уронить letodb letodb_crash.log цитата: | Breakdown at: 2015.04.08 10:46:06 Unrecoverable error 6005: Exception %s at address %s SIGSEGV 0x17 ------------------------------------------------------------------------ User: 127.0.0.1 (null) (null) Command: udf_rel |
| Код такой letoudf.prg цитата: | #include "rddleto.ch" Function UDF_Init LETO_VARSET( NIL, 'GroupNameTest', 'VarNameTest', 'VarContent', LETO_VCREAT ) Return NIL |
|
|
|
|
|
| постоянный участник
|
Пост N: 561
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.04.15 10:51. Заголовок: finder пишет:но вали..
finder пишет: цитата: | но валится если их вызывать из udf_init() |
| буду знать. я ф-ии использовал в триггере, поэтому было все ok.
|
|
|
|
| moderator
|
Пост N: 904
Зарегистрирован: 06.07.06
|
|
Отправлено: 08.04.15 10:53. Заголовок: finder пишет: Может..
finder пишет: цитата: | Может стоит в readme что-то сделать с этим описанием, а то получается что суть <nLen> не раскрыта? |
| Да, никакого nLen нет в этой функции, используется длина cBuf. Исправлю.
|
|
|
|
| |
Пост N: 18
Зарегистрирован: 06.05.14
|
|
Отправлено: 08.04.15 19:46. Заголовок: дебуг
Есть ли где описание команды в дебуг режиме? цитата: | close;16; unlock;14;02; unlock;15;02; goto;15;1695;par_naz;A; rcou;15; skip;15;-1;1695;par_naz;A; rcou;15; rcou;15; rcou;15; skip;15;1;1695;par_naz;A; rcou;15; rcou;15; rcou;15; |
|
|
|
|
Ответов - 191
, стр:
1
2
3
4
5
6
7
8
9
10
All
[только новые]
|
|