+  HandyCache форум
|-+  Главная категория» Общие вопросы» Расширения на языке Lua в HandyCache
Имя пользователя:
Пароль:
Страниц: 1 ... 19 20 [21] 22 23 ... 29   Вниз
  Отправить эту тему    Печать  
Автор Тема: Расширения на языке Lua в HandyCache  (Прочитано 438354 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #400 : 23 июля 2012, 23:24:51 »

Цитировать
Почему так?
Условие надо писать внутри обработчика:
Код:
function request()
  if keysPressed('VK_CONTROL VK_CAPITAL') then
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
  end
end
Сообщить модератору   Записан
HKLM
Старожил
****

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

Сообщений: 305


« Ответ #401 : 24 июля 2012, 00:40:28 »

Написал функцию в dll для запроса состояния клавиши. Пример использования в архиве.
Добавлено: 23 Июль 2012, 22:57:48

dll нужно положить в папку с НС и LuaTest, если он используется.
Добавлено: 23 Июль 2012, 22:58:42

Исходники dll на случай, если кто-то захочет свою dll написать.
Еще бы примеров реального использования. Кажется все варианты перепробовал. Как правильно собрать?
Код:
--[[ <HCExtension>
@name          0
@author        mai62
@version       0.01
@description   0
@rule          ^http://
@event         Init/init
@event         RequestHeaderReceived/request
</HCExtension> ]]

function init()
  if x=1 then Caps Lock (20) is On
  x=keyboard.GetKeyState(20)
    hc.put_to_log(x)
end

function request()
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
  end
end
« Последнее редактирование: 24 июля 2012, 00:49:09 от HKLM » Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #402 : 24 июля 2012, 00:50:44 »

Вы потеряли строку
require 'keyboard'

Зачем-то раскомментировали строку комментария. В lua все, что находится после символов --, является комментарием.
Сообщить модератору   Записан
HKLM
Старожил
****

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

Сообщений: 305


« Ответ #403 : 24 июля 2012, 08:02:15 »

Цитировать
Вы потеряли строку
require 'keyboard'
С ней тоже не работает.

Цитировать
Зачем-то раскомментировали строку комментария.
Это был только как вариант, поскольку все равно не работает.
Сообщить модератору   Записан
HKLM
Старожил
****

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

Сообщений: 305


« Ответ #404 : 07 августа 2012, 14:42:20 »

при включении Test.lua выдает в лог 1 или 0. Это нормально?
А если я пытаюсь заменить    hc.put_to_log(x) на другие строчки, то получаю разные ошибки.
Код:
require 'keyboard'

--[[ <HCExtension>
@name          test
@author        mai62
@version       0.01
@description   0
@rule          ^http://
@event         Init/init
@event         RequestHeaderReceived/request
</HCExtension> ]]

--  VK_CAPITAL = 20
--  VK_NUMLOCK = 144
--  VK_SCROLL = 145


function init()
-- If x=1 then Caps Lock (20) is On
  x=keyboard.GetKeyState(20)
end
   function request()
     if x=1 then
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
  end
end
Это выдает ошибку в лог
Код:
07.08.12 18:36:06,601 # test "init" ERROR:
[string "require 'keyboard'..."]:23: 'then' expected near '='
Если в строчке "if x=1 then" делаю "if x==1 then" то ничего нет в логе, но и не работает.

Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #405 : 07 августа 2012, 18:50:21 »

при включении Test.lua выдает в лог 1 или 0. Это нормально?

Я же писал в тестовом примере
-- If x=1 then Caps Lock (20) is On

По русски это значит: если x = 1, то Caps Lock включен.

Это комментарий, не надо убирать -- в начале строки. Эта строка предназначена только для пояснения работы, это не часть программы.
Сообщить модератору   Записан
HKLM
Старожил
****

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

Сообщений: 305


« Ответ #406 : 07 августа 2012, 19:13:14 »

Про комментарий я всегда знал, но тут много примеров расширений где используется похожая схема типа
function answer()
  x= GetContentLength(hc.answer_header)
  if x>999 then блаблабла end
end

А как правильно совместить эту dll с таким функционалом?
function request()
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
 end
Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #407 : 08 августа 2012, 00:37:59 »

Код:
function request()
  require 'keyboard'
  x=keyboard.GetKeyState(20)
  if x==1 then
    hc.action="only_from_cache"
    hc.monitor_string = hc.monitor_string..'R-Offline'
  end
end
Сообщить модератору   Записан
HKLM
Старожил
****

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

Сообщений: 305


« Ответ #408 : 09 августа 2012, 00:07:53 »

Спасибо! Тут еще какой-то конфликт, но разобрался уже. Если нажата клавиша врем. отключения черного списка, некоторые запросы проходят в инет. Те, где срабатывает расширение R-ext. В R-ext нужно либо снять галку слежение за черным и белым списками, либо назначить клавишу врем. отключения как в черном. (у меня win+shift)
Сообщить модератору   Записан
HKLM
Старожил
****

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

Сообщений: 305


« Ответ #409 : 09 августа 2012, 20:48:49 »

Все равно остались ложные не срабатывания. Например пропускает, когда срабатывает одновременно R-Offline R-ext и Б.18.  В Б.18 стоит галка Ч.Список.
Можно это как то поправить?
Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #410 : 09 августа 2012, 22:35:39 »

Добавьте в свое расширение вывод в лог отладочной информации
hc.put_to_log('Тут напишите что-то полезное, можно вывести значение какой-то переменной, например'..hc.url)
Сделайте это таким образом, что бы эта информация помогла Вам понять почему расширение работает именно так, а не иначе.
Сообщить модератору   Записан
ponand
Новичок
*

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

Сообщений: 15


« Ответ #411 : 27 августа 2012, 09:08:08 »

Подскажите пожалуста есть ли пример расширение для замены загружаемой из интернета страницы?

необходимо в место ссылки вида (.*showtopic=\d+)&view=getnewpost
загружать страницу \1&st=0 или просто \1
Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #412 : 27 августа 2012, 09:17:53 »

Есть расширение Content Master (по нему есть одельная тема на форуме). Это расширение "на лету" фильтрует содержимое загружаемых страниц на предмет удаления рекламы. Это расширение может также сделать замену одного текста на другой.
Сообщить модератору   Записан
ponand
Новичок
*

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

Сообщений: 15


« Ответ #413 : 27 августа 2012, 09:26:43 »

Мне нужно заменить саму загружаемую страницу Content Master поможет?
Сообщить модератору   Записан
mirny
Пользователь
**

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

Сообщений: 84


« Ответ #414 : 01 октября 2012, 17:20:23 »

Захотел узнать про list comprehensions в Луа — Гугл вывел на их аналог КофеСкрипта.
Кто-нибудь пользовался? Юзабельно? Есть смысл? Есть толк?
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #415 : 10 октября 2012, 00:08:16 »

Здравствуйте!
Помогите пожалуйста разобраться с расширением.
Есть два пользователя, и они поочерёдно могут использовать канал без ограничений.
При одновременном использовании, одному из них необходимо ограничить скорость.
Пытался наваять Смущен, но не работает, и не знаю как проверить его работу не "на глаз".

Код:
--[[ <HCExtension>
@name         Авторегулировка скорости для клиента "Idle"
@event        BeforeRequestHeaderSend/Request
@event        BeforeAnswerHeaderSend/Answer
</HCExtension> ]]

function Request()
        if hc.user_name ~= 'Idle' then
hc.set_user_speed('Idle', 2048)
end
end

function Answer()
local t = hc.get_users_stat('#active')
if t and t[hc.user_name] ~= 'Idle' then
hc.set_user_speed('Idle', 0)
end
end
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #416 : 10 октября 2012, 01:59:48 »

Может, как-нибудь так:
Код:
--[[ <HCExtension>
@name Авторегулировка скорости для клиента "Idle"
@event Timer1s
</HCExtension> ]]

function Timer1s()
local t = hc.get_users_stat('#active')
if not t or not t['Idle'] then return end
if next(t)~='Idle' or next(t, 'Idle') then
if t['Idle'].speed_limit==0 then hc.set_user_speed('Idle', 2048) end
elseif t['Idle'].speed_limit~=0 then hc.set_user_speed('Idle', 0)
end
end
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #417 : 10 октября 2012, 02:11:42 »

Спасибо, попробую.
Но хотелось бы без Timer1s - система и так еле ползает.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #418 : 10 октября 2012, 02:35:13 »

Цитировать
Но хотелось бы без Timer1s
Тогда Вам скорей всего придется пройти тернистый путь синхронизации потоков. Если даже это удастся сделать, не берусь сказать, сколько ресурсов будет поедать такая реализация.
Добавлено: 10 Октябрь 2012, 02:27:51

И работать она не будет, как я понимаю, при использовании пользователем не-HTTP протоколов (HTTPS, SOCKS).

Правада, в предложенном мной варианте один "подводный камень" тоже вижу.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #419 : 10 октября 2012, 19:12:46 »

И работать она не будет, как я понимаю, при использовании пользователем не-HTTP протоколов (HTTPS, SOCKS).

Правда, в предложенном мной варианте один "подводный камень" тоже вижу.

Действительно с этими протоколами не работает, а для меня это критично. Но Timer1s оказался совсем не тяжёлым, и не плохо работает такой вариант:

Код:
--[[ <HCExtension>
@name          Авторегулировка скорости для клиента "Idle"
@event         Timer1s
</HCExtension> ]]

function Timer1s()
local t = hc.get_users_stat('#active')
if not t['local'] then
hc.set_user_speed('Idle', 0)
else hc.set_user_speed('Idle', 2048)
end
end

Ещё раз спасибо!
И хотелось бы узнать что это за "подводный камень", и есть ли он в этом варианте?

Добавлено: 10 Октябрь 2012, 19:31:51
Заметил, что иногда срабатывает с большыми задержками Грустный
Попробую ещё покопаться, но и это лучше чем ничего.
« Последнее редактирование: 10 октября 2012, 19:33:51 от olDjeka » Сообщить модератору   Записан
Страниц: 1 ... 19 20 [21] 22 23 ... 29   Вверх
  Отправить эту тему    Печать  

 
Перейти в: