myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
53 страниц V  « < 20 21 22 23 24 > »   
Ответить в данную темуНачать новую тему

> Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы)

vicious
сообщение 11.5.2009, 20:09
Сообщение #421


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Всем добрый вечер! Следущий вопрос... Как лучше всего собирать логи чата в файл? посмотрел несколько скриптов где пишутся логи, но не уверен что там самый лучший способ.
Смотрел их мельком но судя по всему, там пишутся логи при каждом сообщении (либо срабатывании проверки на сообщение, если это антимат к примеру). В другом вроде как сохраняются в память в таблицу до определенного числа, и потом с каждым последущим все это пишется (только опять же каждое новое сообщение).

Мне кажется что лучше собирать в таблицу сообщения до тех пор пока их не станет там N (к примеру 100), как только набирается - сохранять таблицу в файл и обнулять в памяти, не так ли? Если есть у кого скрипт (или код) собирающий логи оптимальным путем - дайте плиз глянуть!
Go to the top of the page
+Quote Post
Nickolya
сообщение 11.5.2009, 20:25
Сообщение #422


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Самым оптимальным путем будет думаю мгновенное занесение записи в базу данных, что избавит от всех морок. Следующим по оптимальности путем вижу открытие файла для записи (хендлер глобальный) и запись как в базу, не закрывая файл, лишь сохраняя в нем изменения (write, flush), файл закрываем по ошибке или выключению скрипта.
Go to the top of the page
+Quote Post
vicious
сообщение 11.5.2009, 20:40
Сообщение #423


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Пока что скрипщу без баз данных. confuse.gif Т.е. открываю файл на "дозапись в конец файла" в OnStartup, потом в ChatArrival логирую в конец файла сообщение, а закрываю в OnError или OnExit? хм...а если ребут компа или глюканет сама птока???
Go to the top of the page
+Quote Post
district
сообщение 11.5.2009, 20:49
Сообщение #424


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Вот вопрос назрел..
Есть у меня таблица, например такая: (ники юзеров с субтаблицами всяких данных)
Код
tWorkUsers[sNick] = {
["time"] = os.time(os.date("*t")),
["bans"] = #frmHub:GetPermBanList(),
["tempbans"] = #frmHub:GetTempBanList(),
["releases"] = 0 ,
["daily"] = tScore["Daily"],
["total"] = tScore["Total"],}


При внесении изменений в таблицу, будет ли метод
Код
rawset(tWorkUsers,sNick,{ ["time"] = ..., ["bans"] = ..., ["tempbans"] = ..., ["releases"] = ... , ["daily"] = ..., ["total"] = ...,} )

рациональнее чем
Код
tWorkUsers[sNick] = { ["time"] = ..., ["bans"] = ..., ["tempbans"] = ..., ["releases"] = ... , ["daily"] = ..., ["total"] = ...,}


и почему ?
Go to the top of the page
+Quote Post
Setuper
сообщение 11.5.2009, 20:54
Сообщение #425


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Данные способы равносильны, так как в данных случаях отсутствуют метатаблицы.
Поэтому незачем вызывать функцию rawset
Go to the top of the page
+Quote Post
vicious
сообщение 11.5.2009, 20:55
Сообщение #426


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




хотя поидее при ребуте или глюке сохранения в файле ведь останутся да?
Go to the top of the page
+Quote Post
Setuper
сообщение 11.5.2009, 21:01
Сообщение #427


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Останутся, но возможно будет утечка в памяти из-за незакрытого файла.
Go to the top of the page
+Quote Post
district
сообщение 11.5.2009, 21:37
Сообщение #428


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Цитата
Данные способы равносильны, так как в данных случаях отсутствуют метатаблицы.

Ясно, а можно на пальцах объяснить, что подразумевает понятие "метатаблица" ?
Go to the top of the page
+Quote Post
Setuper
сообщение 11.5.2009, 21:53
Сообщение #429


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Метатаблица - это таблица, которая присоединяется к таблице big_smile.gif
С помощью метатаблиц можно перегружать операторы и переопределять значения таблицы.
Если значение таблицы не определено, то значение ищется в метатаблице.

По большому счёту, именно понятие класса определяется и строится на метатаблицах.
Для того, чтобы узнать как именно перегружаются операторы и строятся классы смотри тему http://mydc.ru/topic1429.html (в данной теме посмотри пример: "Ещё одна реализация ООП на примере вектора, как метатаблицы.")

Вот кратко объяснил что это такое, однако не думаю что всё понятно. На словах сложно сказать. Нужно учиться на примерах.
Go to the top of the page
+Quote Post
alex82
сообщение 11.5.2009, 22:11
Сообщение #430


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата
а закрываю в OnError или OnExit? хм...а если ребут компа или глюканет сама птока???

Так нельзя. Файл может быть закрыт в любой момент сборщиком мусора.
Go to the top of the page
+Quote Post
Setuper
сообщение 11.5.2009, 22:14
Сообщение #431


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Файл не закроется сборщиком мусора, если хендлер не будет им убран (например, в случае его глобальности, о чём тут и говорится).
Go to the top of the page
+Quote Post
vicious
сообщение 13.5.2009, 22:33
Сообщение #432


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Цитата(alex82 @ 4.5.2009, 18:02) *
Код
tTimers = {}
function OnStartup()
    TmrMan.AddTimer(60000*5,"MainTimer")
end

function UserConnected(user)
    local tmr = TmrMan.AddTimer(1000*10,"MainTimer")
    tTimers[tmr] = user.sNick
end

function UserDisconnected(user)
    for tmr in pairs(tTimers) do
        if tTimers[tmr] == user.sNick then
            tTimers[tmr] = nil
            break
        end
    end
end

function MainTimer(tmr)
    local msg = "blablabla"
    if tmr and tTimers[tmr] then
        local user = Core.GetUser(tTimers[tmr])
        if user then
            Core.SendToUser(user,msg)
        end
        TmrMan.RemoveTimer(tmr)
        tTimers[tmr] = nil
    else
        Core.SendToAll(msg)
    end
end


Чет гдет не работает так как надо, в какой то момент получается так, что каждые 10 секунд начинается отсылаться msg всем...пока не ребутнуть скрипт. Я так понимаю в каком то случае не срабатывает
Код
if tmr and tTimers[tmr] then


Подскажите...когда может такое получаться...хм..и как это исправить...чет я не догоню никак...
Go to the top of the page
+Quote Post
Setuper
сообщение 13.5.2009, 23:12
Сообщение #433


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




хехе. А это для чего:
Код
function OnStartup()
    TmrMan.AddTimer(60000*5,"MainTimer")
end


Возможно в этом и проблема. Таймер регистрируется, но не заносится в таблицу tTimers, поэтому не выполняется условие и выполняется то, что после else


Или попробуй поменять последовательность действий:
Код
tTimers[tmr] = nil
TmrMan.RemoveTimer(tmr)


Также можно отловить ошибку, если после else написать код:
Код
if not tmr then
  Core.SendToAll"not tmr"
elseif not tTimers[tmr] then
  Core.SendToAll"not tTimers[tmr]"
end


Вообще говоря, работать с идентификаторами таймеров не очень хорошо, так как велика вероятность в ошибке или сбое.
Go to the top of the page
+Quote Post
vicious
сообщение 14.5.2009, 0:00
Сообщение #434


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




1) Это для того чтобы Новости хаба выводились всем с заданным интервалом. А не только через 10 секунд после подключения.
Т.е. каждый пол часа всем выводятся новости, и независимо от этого они выводятся юзеру через 10 сек после его подключения. Но проблема вряд ли в этом таймере...у него интервал 30 минут...а когда происходт сбой новости начинают выводиться каждый 10 сек, т.е. при подключении юзера не срабатывает условия наличия tmr и tTimers[tmr] и они начинают всем выводиться каждые 10 сек
2)По поводу этого... проверю, но только как это может повлиять?
3) Да можно, только если и то и то = nil то я ее так не отловлю...надо ловить опять по всюду причем записывать логи входов выходов, чтобы понять в какой момент вышел сбой...боюсь запутаться...
Go to the top of the page
+Quote Post
Setuper
сообщение 14.5.2009, 0:31
Сообщение #435


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




2) при удалении таймера удаляется его идентификатор, поэтому tmr = nil, а следовательно будет выполняться tTimers[nil] = nil

3) тогда так:
Код
if not tmr then
  Core.SendToAll"not tmr"
elseif not tTimers[tmr] then
  Core.SendToAll"not tTimers[tmr]"
else
  Core.SendToAll"not tmr and not tTimers[tmr]"
end
Go to the top of the page
+Quote Post
vicious
сообщение 14.5.2009, 12:26
Сообщение #436


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




поправил...жду...пока х.з. ничо нету!
2) понял, но тогда должно получаться что будет заполняться таблица и все....а очищаться не будет! Но как это могло повлиять на то что сообщение начинает слаться каждые 10 сек, не пойму...индификаторы то у таймеров разные все время...т.е. и поля таблицы всегда разные.....как какое-то неубранное поле таблицы могло повлиять на новый таймер?

Кстати есть какие нить дебаггеры для ентого дела?

Цитата
2) при удалении таймера удаляется его идентификатор, поэтому tmr = nil, а следовательно будет выполняться tTimers[nil] = nil


Кстати...индификатор то удаляется...но переменная tmr не удаляется...т.е. второе условие получается не tTimers[nil] = nil а tTimers[tmr] = nil

Я пробовал между TmrMan.RemoveTimer(tmr) и tTimers[tmr] = nil вставлять Core.SendToAll(""..tmr.."") и индификатор отсылался....
Go to the top of the page
+Quote Post
Setuper
сообщение 14.5.2009, 14:27
Сообщение #437


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Ну да. Идентификатор запоминается в переменную, поэтому и не обнуляется, это я с тобой согласен. Тогда хз в чём дело, однако, я повторяю, что работать с идентификаторами таймеров не совсем корректно!
Go to the top of the page
+Quote Post
vicious
сообщение 14.5.2009, 15:39
Сообщение #438


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Хе! Ну если ты не понимаешь...то я уж тем более не вкуриваю!))) Ну вообщем потестю седня еще погляжу че к чему...

кстати вот еще что мне интересно...я написал вот так:
Код
   if tmr and tTimers[tmr] then
        local user = Core.GetUser(tTimers[tmr])
        if user then
            Core.SendToUser(user,msg)
        end
        TmrMan.RemoveTimer(tmr)
        tTimers[tmr] = nil
        WriteTable(tTimers, "tTimers", sFileUI)
    else
        Core.SendToAll(msg)
        if not tmr then
            Core.SendToAll("not tmr")
            elseif not tTimers[tmr] then
            Core.SendToAll("not tTimers[tmr]")
            Core.SendToAll(""..tmr.."")
            else
            Core.SendToAll("not tmr and not tTimers[tmr]")
        end
    end


И каждые пол часа (в моем случае) отсылаются общие новости и в общий чат отсылается тоже индификатор, строка:
Код
Core.SendToAll(""..tmr.."")


Откуда он? tmr ведь объявляется только при 10 секундном таймере, откуда оно берется при отсылки общих новостей ведь там просто:
Код
TmrMan.AddTimer(60000*30,"News")
Go to the top of the page
+Quote Post
Setuper
сообщение 14.5.2009, 16:07
Сообщение #439


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Нееее, тут всё верно. Он берётся из аргумента выполняемой таймером функции. При регистрации любого таймера создаётся идентификатор, который передаётся в выполняемую функцию в качестве аргумента

Кстати, конкатенация тут Core.SendToAll(""..tmr.."") лишняя, так как на неё нужны затраты по уборке мусора. Лучше писать так:
Код
Core.SendToAll(tostring(tmr))
Go to the top of the page
+Quote Post
vicious
сообщение 14.5.2009, 16:07
Сообщение #440


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Воооо...кажется родил такой метод...опровергните его, или скажите его минусы (можно плюсы)

Код
tTimers = {}

function OnStartup()
TmrMan.AddTimer(1000*1,"ChekTimers")
end

function UserConnected(tUser)
    tTimers[os.time()] = tUser.sNick
end

function UserDisconnected(tUser)
    for i,v in pairs(tTimers) do
        if v == tUser.sNick then
            tTimers[i] = nil
        end
    end
end

function ChekTimers()
    msg = "blablabla"
    for i,v in pairs(tTimers) do
        if (os.time() - i) > 10 then
            Core.SendToNick(v,msg)
            tTimers[i] = nil
        end
    end
end
Go to the top of the page
+Quote Post

53 страниц V  « < 20 21 22 23 24 > » 
Ответить в данную темуНачать новую тему
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new ВАЖНО: Topic has attachmentsМодули для скриптов RusHub
26 Setuper 43 712 21.3.2017, 17:31 Посл. сообщение: Alexey
No new ВАЖНО: Topic has attachmentsВаши Вопросы И Предложения По Поводу Форума
447 Svyat 305 724 20.10.2015, 19:39 Посл. сообщение: Ksan
No New Posts От: Вопросы Разработчикам Скриптов
От темы с ID: 173
0 MIKHAIL 4 082 23.1.2015, 0:56 Посл. сообщение: MIKHAIL
No new Topic has attachmentsВопросы по протоколу NMDC
Делаю программу
26 Master255 27 810 12.1.2015, 0:38 Посл. сообщение: Master255
No New Posts Вопросы к Phazeus по Экзекутору
Мастер может забанить мастера, как решить в Экзекуторе?
1 AndreiDC 5 067 31.10.2014, 19:20 Посл. сообщение: Ksan
No New Posts От: Установка скриптов
От темы с ID: 5657
0 MIKHAIL 4 529 29.7.2014, 23:37 Посл. сообщение: MIKHAIL
No New Posts Установка скриптов
Нужна помощь по установке
2 _wRz_ 6 894 29.7.2014, 16:11 Посл. сообщение: Артём
No new От: Вопросы Разработчикам Скриптов
От темы с ID: 173
29 Wariner 24 719 28.1.2014, 13:11 Посл. сообщение: Alexey
No new Topic has attachmentsВопросы по RusHub
Технические вопросы
316 Jaska 254 014 19.12.2013, 13:59 Посл. сообщение: mod
No new Topic has attachmentsМелкие вопросы
44 Wariner 48 836 19.9.2013, 12:34 Посл. сообщение: Alexey
No New Posts От: Ваши Вопросы И Предложения По Поводу Форума
От темы с ID: 753
3 anila 8 633 28.3.2013, 16:02 Посл. сообщение: настя
No New Posts Единая платформа для скриптов
Обсуждения вопроса создания единой платформы скриптов
5 Enyby 8 521 18.1.2012, 20:15 Посл. сообщение: Setuper
No new Topic has attachmentsПеределка скриптов
Прошу помощи
47 Fe(one)X 39 136 26.12.2011, 15:04 Посл. сообщение: Ksan
No new Topic has attachmentsВопросы Разработчикам Скриптов с SQL
вопросы по скриптам (мелкие вопросы)
101 Wariner 57 918 6.12.2011, 0:34 Посл. сообщение: Enyby
No New Posts От: Вопросы по RusHub
От темы с ID: 2902
4 Otshelnik-Fm 8 021 19.10.2011, 9:23 Посл. сообщение: Mangust

 



RSS Сейчас: 6.5.2024, 18:35