+  HandyCache форум
|-+  Главная категория» Общие вопросы» Расширения на языке Lua в HandyCache
Имя пользователя:
Пароль:
Страниц: 1 ... 8 9 [10] 11 12 ... 29   Вниз
  Отправить эту тему    Печать  
Автор Тема: Расширения на языке Lua в HandyCache  (Прочитано 437535 раз)
0 Пользователей и 1 Гость смотрят эту тему.
k_ok_o_s
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 19


« Ответ #180 : 10 января 2010, 01:12:20 »

DenZzz Спасибо за ответ!
Цитировать
Если лень вчитываться,
А вот слона-то я и не приметил... Смущен
Кажется, я понял Ваши слова про пересмотр концепции Улыбка
Сообщить модератору   Записан
MetersBonwe
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #181 : 10 января 2010, 04:26:41 »

Это давно есть в штатных настройках HC: "Общие => Дозвон => Внешний прокси для этого подключения".

Вы меня не поняли) если там убрать галку, то она слетает и на закладке "Внешние прокси" - я про это и писал, что все время приходится ее дергать туда-сюда. Внешний прокси у меня используется только при выходе через локалку, при дозвоне он не нужен. Я хотел спросить, можно ли это как-то автоматизировать, чтобы HC при дозвоне использовал свои настройки для дозвона, а не глобальные настройки безусловного внешнего прокси для HC? Например, с помощью расширения.
Я пытался сделать это через условные прокси, но там не нашел необходимого параметра, который нужно прописать ((
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #182 : 10 января 2010, 12:29:33 »

Я хотел спросить, можно ли это как-то автоматизировать, чтобы HC при дозвоне использовал свои настройки для дозвона, а не глобальные настройки безусловного внешнего прокси для HC? Например, с помощью расширения.

Из расширения можно менять внешние прокси, но нет возможности определить способ соединения с Инет.

Сообщить модератору   Записан
k_ok_o_s
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 19


« Ответ #183 : 12 января 2010, 00:18:19 »

MetersBonwe

Цитировать
нет возможности определить способ соединения с Инет
я рекомендовал бы посмотреть в сторону AutoIt для ответа на этот вопрос. Может быть, там можно это узнать. И ещё - в AutoIt прекрасная русская справка.
Сообщить модератору   Записан
MetersBonwe
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #184 : 13 января 2010, 05:41:03 »

я рекомендовал бы посмотреть в сторону AutoIt для ответа на этот вопрос.

Спасибо, про него-то я совсем забыл)))
Сообщить модератору   Записан
k_ok_o_s
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 19


« Ответ #185 : 16 января 2010, 23:31:22 »

DenZzz Надеюсь на Вашу помощь!
Вроде пересмотрел концепцию, LuaTest.exe не ругается, но и килобайты не считает, а HC виснет :-(

Код:
--[[ <HCExtension>
@name          Сторож сетевой активности клиентов
@author        k_ok_o_s
@version       1.0
@description   Автоматическое изменения скорости работы FDM в зависимости от сетевой активности:
               1)клиентов HC (на локальном ПК)
   2)пользователя из локальной сети, совместно с кот. используется интернет-канал
@event    Init/Init
@event         BeforeAnswerBodySend/BeforeAnswerBodySend
</HCExtension> ]]

function Init()
   dir="C:\\Soft\\AU3_Client-Server_speed\\"              --папка со скриптами:
   
   n=3                                                    --если за n сек. траффик >a Кб. , то скорость FDM снижается
   a=10
   m=60                                                   --если за m сек. траффик <b Кб. , то скорость FDM повышается
   b=300
   
   last_traffic=0
   hc.set_global('current_traffic', 0)
   
   while 1 do
      repeat
         hc.sleep(n*1000)       
         traffic=hc.get_global('current_traffic')
         delta_traffic=traffic-last_traffic
         last_traffic=traffic
         hc.put_msg(2, "За последние "..n.." сек. траффик составил "..(delta_traffic/1024).." Кб.")
      until delta_traffic>(a*1024)
     
      --hc.shell_execute(dir..'FdmSpeedToMin.exe', nil, nil, 'SW_HIDE')
      hc.put_msg(2, 'Скорость FDM снижена')
   
      repeat
         hc.sleep(m*1000)
         traffic=hc.get_global('current_traffic')
         delta_traffic=traffic-last_traffic
         last_traffic=traffic
         hc.put_msg(2, "За последние "..m.." сек. траффик составил "..(delta_traffic/1024).." Кб.")
      until delta_traffic<(b*1024)
   
      ClientLowState = io.open(dir.."SpeedOfClientIsLow.tmp")     --Эта функция открывает файл в режиме, указанном в строке mode. Возвращает хендлер файла, или, в случае ошибок, nil и сообщение об ошибке.
      if not ClientLowState then
         --hc.shell_execute(dir..'FdmSpeedToMax.exe', nil, nil, 'SW_HIDE')
         hc.put_msg(2, 'Скорость FDM повышена')
      end
   end
end

function BeforeAnswerBodySend()
   hc.set_global('current_traffic', (hc.user_to_internet+hc.user_from_cache+hc.user_from_internet))
end
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #186 : 17 января 2010, 00:02:19 »

HC виснет
Видимо, потому что расширение так и не может завершить инициализацию. Хорошо бы обработчик события Init завершать сразу, не создавая бесконечный цикл.
Всю работу я бы возложил на обработчики событий AnswerHeaderReceived и BeforeAnswerBodySend.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #187 : 17 января 2010, 11:58:34 »

Вроде пересмотрел концепцию, LuaTest.exe не ругается, но и килобайты не считает, а HC виснет :-(

Как уже сказал Михаил, Init нельзя бесконечно зацикливать.

Но есть и другая проблема - она в использовании функции hc.sleep(). Пока выполняется эта функция, HC приостанавливает обработку текущего потока до ее завершения, поэтому hc.sleep() нежелательно использовать в твоем случае, иначе клиенты HC долго не дождутся своих данных.

Для отсчета секунд рекомендую использовать функцию os.clock() и событие Timer1s.
От циклов while и repeat лучше отказаться совсем.

Сценарий примерно такой:
Раз в секунду твое расширение обрабатывает событие Timer1s. Оно запрашивает из глобальные переменных сохраненные там счетчики трафика и времени, и в случае срабатывания твоих условий (если за n сек. траффик >a Кб или если за m сек. траффик <b Кб) запускает нужные команды для внешних программ.

Счетчики трафика и метки времени пишет в глобальные переменные обработчик события RequestHeaderReceived.
Исходные настройки (dir, n, a, m, b) задаются в событии Init через таблицу hc_static.
Сообщить модератору   Записан
k_ok_o_s
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 19


« Ответ #188 : 18 января 2010, 03:38:59 »

Михаил, DenZzz спасибо за советы. Переделал расширение - HC уже не виснет, но и ничего вообще не происходит. Ткните, пожалуйста, где я ошибся.

Код:
--[[ <HCExtension>
@name          Сторож сетевой активности клиентов
@author        k_ok_o_s
@version       1.0
@description   Автоматическое изменения скорости работы FDM в зависимости от сетевой активности:
               1)клиентов HC (на локальном ПК)
   2)пользователя из локальной сети, совместно с кот. используется интернет-канал
@event    Init/Init
@event         Timer1s/Timer1s
@event         RequestHeaderReceived/RequestHeaderReceived
</HCExtension> ]]

function Init()
   dir="C:\\Soft\\AU3_Client-Server_speed\\"              --папка со скриптами:
   n=3                                                    --если за n сек. траффик >a Кб. , то скорость FDM снижается
   a=10
   m=60                                                   --если за m сек. траффик <b Кб. , то скорость FDM повышается
   b=300
   hc.set_global('last_traffic', 0)
   hc.set_global('current_traffic', 0)
   hc.set_global('time_counter', 0)
   hc.set_global('job_switch', 'wait_for_high_traffic')
   end

function Timer1s()
hc.set_global('time_counter', (hc.get_global('time_counter')+1))
   if job_switch=="wait_for_high_traffic" and hc.get_global('time_counter')==n then
      hc.put_msg(2, "За последние "..n.." сек. траффик составил "..((hc.get_global('current_traffic')-hc.get_global('last_traffic'))/1024).." Кб.")
  if (hc.get_global('current_traffic')-hc.get_global('last_traffic'))>(a*1024) then
     --hc.shell_execute(dir..'FdmSpeedToMin.exe', nil, nil, 'SW_HIDE')
         hc.put_msg(2, 'Скорость FDM снижена')
hc.set_global('job_switch', 'wait_for_low_traffic')
  end
  hc.set_global('last_traffic', hc.get_global('current_traffic'))
 
   elseif job_switch=="wait_for_low_traffic" and hc.get_global('time_counter')==m then
      hc.put_msg(2, "За последние "..m.." сек. траффик составил "..((hc.get_global('current_traffic')-hc.get_global('last_traffic'))/1024).." Кб.")
  if ((hc.get_global('current_traffic')-hc.get_global('last_traffic'))<(b*1024)) and not io.open(dir.."SpeedOfClientIsLow.tmp") then
     --hc.shell_execute(dir..'FdmSpeedToMax.exe', nil, nil, 'SW_HIDE')
         hc.put_msg(2, 'Скорость FDM повышена')
hc.set_global('job_switch', 'wait_for_high_traffic')
  end
  hc.set_global('last_traffic', hc.get_global('current_traffic'))
   end  
end

function RequestHeaderReceived()
   hc.set_global('current_traffic', (hc.user_to_internet+hc.user_from_cache+hc.user_from_internet))
end
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #189 : 18 января 2010, 04:50:10 »

Навскидку вижу три момента:
- переменные dir,a,b,n,m используются только в Timer1s, поэтому там и должны объявляться/инициализироваться;
- т.к. имеем дело с глобальной переменной, то " if job_switch" недопустимо. Надо " if hc.get_global('job_switch')";
- глобальная переменная time_counter достигнет значения n или m и вызовет срабатывание определенных действий один раз. Далее эта переменная уходит в бесконечность, и последующих срабатываний не будет.
Сообщить модератору   Записан
k_ok_o_s
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 19


« Ответ #190 : 18 января 2010, 05:26:49 »

Михаил Спасибо! нашёл и другие ошибки. Главное - уже что-то работает!!! :-) Но пора спать. :-)
Цитировать
переменные dir,a,b,n,m используются только в Timer1s, поэтому там и должны объявляться/инициализироваться
это я просто "не въехал" в то, что посоветовал DenZzz
Цитировать
Исходные настройки (dir, n, a, m, b) задаются в событии Init через таблицу hc_static.
подумал, что достаточно присвоить значения переменным, и они попадут в таблицу hc_static :-)

   
Сообщить модератору   Записан
k_ok_o_s
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 19


« Ответ #191 : 24 января 2010, 21:00:46 »

Скажите, пожалйуста, вроде как нет простого пути чтобы в расширении заполучить дату и время создания к.-л. файла ?
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #192 : 24 января 2010, 22:26:07 »

Сейчас такой встроенной возможности, действительно, нет. Но можно поискать стороннюю lua-библиотеку для работы с файловой системой, например, здесь http://luaforge.net/
В следующей весии НС будет добавлена функция hc.file_last_modified_time(fn).
Сообщить модератору   Записан
k_ok_o_s
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 19


« Ответ #193 : 25 января 2010, 07:49:35 »

mai62
Цитировать
будет добавлена функция hc.file_last_modified_time(fn)
ЗдОрово! И она сможет возвращать табличку, как os.date ?
Цитировать
если format равен "*t", то date возвращает таблицу со следующими полями: year (год, четыре цифры), month (месяц, 1 – 12), day (день, 1 – 31), hour (час, 0 – 23), min (минуты, 0 – 59), sec (секунды, 0 – 61), wday (день недели, воскресенью соответствует 1), yday (день года)
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #194 : 25 января 2010, 10:46:26 »

Сейчас эта функция выдает время в числовом представлении (время в секундах, прошедшее после 0 часов 0 минут 1 января 1970 года). Когда значение времени в таком виде, его легко сравнивать с другим значением, например, с временем выдаваемым функцией os.time(). Легко, например, получить возраст файла в днях (hc.file_last_modified_time(fn)-os.time())/(24*60*60) или в минутах (hc.file_last_modified_time(fn)-os.time())/60.
Также легко получить время в строковом виде hc.systime_to_str(hc.file_last_modified_time(fn)).
А тебе нужна именно таблица?
Сообщить модератору   Записан
k_ok_o_s
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 19


« Ответ #195 : 25 января 2010, 20:32:26 »

Цитировать
А тебе нужна именно таблица?
Нет, как раз время в числовом представлении существенно упрощает алгоритм моей идеи Улыбка  Отлично!
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #196 : 31 января 2010, 13:53:14 »

Вроде везде посмотрел, но не нашёл.
Возможно ли с помощью расширения узнавать о разрыве соединения с сервером?
Если да, то как?
Сообщить модератору   Записан
Zoynels
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 42


« Ответ #197 : 15 апреля 2010, 04:53:45 »

 Здравствуйте, можно ли как-то с помощью скриптов сохранять и передавать cookie. Просто работяю на разных браузерах, точнее Opera и Offline Explorer. И если в Опере регистрирушься, то пропадает регистрация в OE. И наоборот.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #198 : 15 апреля 2010, 09:17:20 »

Здравствуйте, можно ли как-то с помощью скриптов сохранять и передавать cookie.

Теоретически, да.
Сообщить модератору   Записан
Zoynels
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 42


« Ответ #199 : 16 апреля 2010, 05:25:02 »

Теоретически, да.
А практически? Если можно то с небольшим примером, пожайлуста.
Сообщить модератору   Записан
Страниц: 1 ... 8 9 [10] 11 12 ... 29   Вверх
  Отправить эту тему    Печать  

 
Перейти в: