On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
администратор




Пост N: 2728
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 11:27. Заголовок: Leto DB Server (продолжение 10) (продолжение)


Продолжаем тут

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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>.


Спасибо: 0 
ПрофильЦитата Ответить
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() - сее поощью, наверное, можно установить нужные атрибуты.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3254
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.04.15 14:01. Заголовок: Если в модуле letoud..


Если в модуле letoudf присутствует функция с именем udf_init, она будет запущена после загрузки модуля.

Спасибо: 1 
ПрофильЦитата Ответить
moderator


Пост N: 900
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.04.15 17:06. Заголовок: alkresin пишет: ци..


alkresin пишет:

 цитата:
цитата:
Хотелось бы иметь возможность, чтобы сервер слушал запросы только на ОДНОМ IP

Я посмотрю, что можно сделать.



Добавил новый параметр в ini-файл:
ip, где можно указать этот единственный ip.


Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 8
Зарегистрирован: 06.12.14
ссылка на сообщение  Отправлено: 07.04.15 00:04. Заголовок: Pasha пишет: Если в..


Pasha пишет:

 цитата:
Если в модуле letoudf присутствует функция с именем udf_init, она будет запущена после загрузки модуля.

ТОЧНО ) Прошу прощения - провтыкал...




alkresin пишет:

 цитата:
цитата:
Хотелось бы иметь возможность, чтобы сервер слушал запросы только на ОДНОМ IP

Я посмотрю, что можно сделать.

Добавил новый параметр в ini-файл:
ip, где можно указать этот единственный ip.



Проверил, вроде работает )
Спасибо.

Имя параметра в letodb.ini окончательное, меняться не будет?


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 9
Зарегистрирован: 06.12.14
ссылка на сообщение  Отправлено: 07.04.15 00:21. Заголовок: Пользовательские переменные


Какие ограничения есть на имена пользовательских групп и переменных? Длина, набор символов, количество, etc...?
Доступна ли работа с ними из пользовательских функций? Возможно ли удалить группу?
В этих переменных можно хранить только CNL типы?



Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 901
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 07.04.15 09:44. Заголовок: finder пишет: Имя п..


finder пишет:

 цитата:
Имя параметра в letodb.ini окончательное, меняться не будет?


Окончательное.

 цитата:
Какие ограничения есть на имена пользовательских групп и переменных? Длина, набор символов, количество, etc...?


Нет ограничений.

 цитата:
Доступна ли работа с ними из пользовательских функций?


leto_var...(), или вы о чем-то другом ?


 цитата:
Возможно ли удалить группу?


Попробуйте leto_vardel( cGroupName, "" )


 цитата:
В этих переменных можно хранить только CNL типы?


Да.

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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!!!!!!!!!!!!!!!!!!!!



Возможно я делаю что-то не так?
С пользовательскими переменными можно работать только с клиента?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 )

в этой версии еще не пробовал





Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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"


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 902
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 07.04.15 11:58. Заголовок: finder пишет: С пол..


finder пишет:

 цитата:
С пользовательскими переменными можно работать только с клиента?


Leto_var... функции определены и в серверной части.
Я сейчас добавил в server.prg REQUEST для них, теперь не должен ругаться.
Правда, при вызове из udf_init() выскакивает ошибка - возможно, на этот момент что-то недоинициализировано, надо проверить.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
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_... функции не могут вызываться из нее.

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 )


Спасибо: 0 
ПрофильЦитата Ответить





Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 561
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.04.15 10:51. Заголовок: finder пишет:но вали..


finder пишет:
 цитата:
но валится если их вызывать из udf_init()


буду знать. я ф-ии использовал в триггере, поэтому было все ok.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 904
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 08.04.15 10:53. Заголовок: finder пишет: Может..


finder пишет:

 цитата:
Может стоит в readme что-то сделать с этим описанием, а то получается что суть <nLen> не раскрыта?


Да, никакого nLen нет в этой функции, используется длина cBuf.
Исправлю.

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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;



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 191 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 307
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет