[Урок] Чат между серверами (Ahk and Php)
|
|
CrowSky |
Дата: Среда, 17.01.2018, 19:26 | Сообщение # 1
|
Любитель
Сообщений: 36
Статус: Offline
|
Привет, юзер. Если ты посетил эту тему - значит тебя заинтересовал вопрос передачи данных на хост от AHK. Если ты хоть немного понимаешь в AHK - этот урок для тебя. Я все максимально подробно расписал. 1. Настраиваем хостинг Так как всем известный Hostinger перестал бесплатно раздавать хостинг - стало очень сложно заниматься подобным родом деятельности. Но все же выход есть. Пару часов я искал подходящий вариант и нашел. Переходим на хостинг ZZZ (не реклама) и регистрируем аккаунт. После регистрации заходим во вкладку "Профиль" и заполняем все поля со звездочкой. Жмем на кнопку "Сохранить" и в списке слева ищем вкладку "Домены". Регистрируем любой домен (*ваш субдомен*.zzz.com.ua - бесплатный) и переходим во вкладку "Аккаунты FTP", где мы устанавливаем пароль для аккаунта FTP. Готово. 2. Создание PHP и TXT файла Создаем на компе файлы "core.php" и "family.txt". Открываем любой текстовый редактор и в файл core.php вставляем код: Код <?php
$Text = $_GET['Text'];
$file = 'family.txt';
$current = file_get_contents($file); $current = "$Text\n";
file_put_contents($file, $current);
?> Файл family.txt оставляем пустым. 3. Заливаем оба файла на хостинг Качаем программу FileZilla Portable (скачать), устанавливаем и запускаем. После запуска программы вводим в соответствующие поля значения с вкладки "Аккаунты FTP" и коннектимся к серверу. Заходим в папку *ваш субдомен*.zzz.com.ua и закидываем туда наши 2 файла. 4. Пишем сам AHK Создаем новый AHK скрипт и вставляем в него SAMP-UDF от МурКотика и компании. Дальше пишем этот код:
Код #IfWinActive GTA:SA:MP
Developer := "http://xfamily.zzz.com.ua/family.txt" XChat = %A_Temp%\xchat.txt Family = Top Chat
Loop { URLDownloadToFile, %Developer%, %XChat% FileRead, LastString, %XChat% if (LastString != OldLastString) { AddChatMessageEx("ffffff", "{ffffff}" LastString) } OldLastString := LastString }
~Enter:: ~NumpadEnter:: if (isInChat()) { Sleep 200 AntiCrash() dwAddress := dwSAMP + 0x12D8F8 ChatInput := readString(hGTA, dwAddress, 256) if ChatInput contains /x { RegExMatch(ChatInput, "\/x\s(.*)", AddChat) if (AddChat1 != "") { phpserver := "http://xfamily.zzz.com.ua/awfjiafjiowjioafw.php" global direct = A_Temp global direct2 = A_ScriptDir Name := getUsername() PID := getId() ServerFull := getServerName() color := getPlayerColor(PID) Colorstr := ColorToStr(color) RegExMatch(ServerFull, "[A-Za-z ]\s\|\s(.*)", Server) if (colorstr = "{0}") { colorstr := "" } Final := "[" family "] [" Server1 "] " colorstr "" Name "{ffffff}: " AddChat1 URLDownloadToFile, %phpserver%?Text=%Final%, %a_temp%/r_status.php AddChat1 := "" } } Free: ProcessWriteMemory("" ,dwSAMP + 0x12D8F8, "gta_sa.exe", "Str", 126) } return Сохраняем скрипт 5. Тестим скрипт на работоспособность Скидываем AHK другу и просим запустить и запускаем его сами. Прописываем /x <любой текст> и, если вы все настроили правильно - у вас все заработает. По всем вопросам писать мне ВКонтакте
Сообщение отредактировал CrowSky - Среда, 17.01.2018, 19:29 |
|
|
|
Rinat_Namazov |
Дата: Среда, 17.01.2018, 21:21 | Сообщение # 2
|
Боец
Сообщений: 122
Статус: Offline
|
Какой-то уж очень упрощенный вариант скрипта от ZeusG, *ТыК*
|
|
|
|
CrowSky |
Дата: Среда, 17.01.2018, 22:03 | Сообщение # 3
|
Любитель
Сообщений: 36
Статус: Offline
|
Цитата Rinat_Namazov ( ) Какой-то уж очень упрощенный вариант скрипта от ZeusG, *ТыК*
Набивом постов не занимайся. У меня совсем другой алгоритм + ничего лишнего + этот туториал, а код зевса еще открыть надо
|
|
|
|
Joni228 |
Дата: Среда, 17.01.2018, 23:46 | Сообщение # 4
|
Бывалый
Сообщений: 314
Статус: Offline
|
Не легче считывать HTML код текстового документа с сайта, вместо скачивать файл постоянно? HTML код можно считать, до того как загрузится страница.
|
|
|
|
KaVaL98 |
Дата: Четверг, 18.01.2018, 00:41 | Сообщение # 5
|
Новичок
Сообщений: 11
Статус: Offline
|
Cтолкнулся вот с такой проблемкой.. hotkeys/hotstrings are not allowed inside functions горячие клавиши/горячие клавиши не допускаются внутри функций Вот собственно сам код.
Код Developer := "http://chatRP.zzz.com.ua/family.txt" XChat = %A_Temp%\xchat.txt Family = Top Chat Loop { URLDownloadToFile, %Developer%, %XChat% FileRead, LastString, %XChat% if (LastString != OldLastString) { AddChatMessageEx("ffffff", "{ffffff}" LastString) } OldLastString := LastString } ~Enter:: ~NumpadEnter:: if (isInChat()) { Sleep 200 AntiCrash() dwAddress := dwSAMP + 0x12D8F8 ChatInput := readString(hGTA, dwAddress, 256) if ChatInput contains /x { RegExMatch(ChatInput, "\/x\s(.*)", AddChat) if (AddChat1 != "") { phpserver := "http://chatRP.zzz.com.ua/core.php" global direct = A_Temp global direct2 = A_ScriptDir Name := getUsername() PID := getId() ServerFull := getServerName() color := getPlayerColor(PID) Colorstr := ColorToStr(color) RegExMatch(ServerFull, "[A-Za-z ]\s\|\s(.*)", Server) if (colorstr = "{0}") { colorstr := "" } Final := "[" family "] [" Server1 "] " colorstr "" Name "{ffffff}: " AddChat1 URLDownloadToFile, %phpserver%?Text=%Final%, %a_temp%/r_status.php AddChat1 := "" } } Free: ProcessWriteMemory("" ,dwSAMP + 0x12D8F8, "gta_sa.exe", "Str", 126) } return
UDF копировать сюда думаю не стоит. По инструкции выше всё выполнено.
Сообщение отредактировал KaVaL98 - Четверг, 18.01.2018, 00:46 |
|
|
|
Toopie |
Дата: Четверг, 18.01.2018, 01:34 | Сообщение # 6
|
Боец
Сообщений: 122
Статус: Offline
|
1) Потребление трафика будет огромнейшим 2) Не все компы могут справляться с такими пулами одновременно (ограничение по запросам) 3) Уязвимости в плане логина/id 4) Хостинг ляжет из-за слишком частых запросов 5) Лучше делать алгоритм LongPoll, нежели флудить каждую 0.001 секунду на сервер. 6) Лучше создать БД и хранить данные там 7) К БД лучше подключить Memcached 8) Файл family.txt будет успешно перегружен при длительном общении, что поведет за собой ошибку в виде 502, 400 (нехватка ресурсов, слишком долгая инициализация запроса, слишком большой файл, сервер переполнен запросами, у хостинга по дефолту их 20, 20 подключений в секунду максиму, у VDS же можно настроить 1000000+, и если PHP скрипты не закрылись после выдачи ответа - сервер опять ляжет) Да и в конце концов - зачем скачивать файл, инициировать передачу данных, когда можно просто отправить GET запрос через WinHttpRequest? И да, действительно, чем твой код отличается от ZeusGang'a? Точно такой же алгоритм, точно такой же PHP код.
лучший в мире самп сервер 185.159.129.71:7777 лидерки админки да
Сообщение отредактировал Toopie - Четверг, 18.01.2018, 06:22 |
|
|
|
CrowSky |
Дата: Четверг, 18.01.2018, 08:33 | Сообщение # 7
|
Любитель
Сообщений: 36
Статус: Offline
|
Цитата Joni228 ( ) Не легче считывать HTML код текстового документа с сайта, вместо скачивать файл постоянно? Я делаю так, как умеюДобавлено (18.01.2018, 08:31) ---------------------------------------------
Цитата Toopie ( ) 1) Потребление трафика будет огромнейшим У большинства безлимит
Цитата Toopie ( ) 2) Не все компы могут справляться с такими пулами одновременно (ограничение по запросам) Но все же достаточно людей сможет юзать
Цитата Toopie ( ) 3) Уязвимости в плане логина/id ID там нет + какая разница какой логин. Если левым людям не кидать - все нормально.
Цитата Toopie ( ) 4) Хостинг ляжет из-за слишком частых запросов Тот хостинг, который я предложил - вполне хорош
Цитата Toopie ( ) 5) Лучше делать алгоритм LongPoll, нежели флудить каждую 0.001 секунду на сервер. Делаю, как умею
Цитата Toopie ( ) 6) Лучше создать БД и хранить данные там Делаю, как умею + сайт вроде не дает БД
Цитата Toopie ( ) 7) К БД лучше подключить Memcached Не шарю
Цитата Toopie ( ) 8) Файл family.txt будет успешно перегружен при длительном общении Он очищается каждый раз, а не добавляются новые строки.
Итог: внимательно читай код и не умничай.Добавлено (18.01.2018, 08:33) ---------------------------------------------
Цитата KaVaL98 ( ) UDF копировать сюда думаю не стоит. По инструкции выше всё выполнено.
С ним лучше. У меня все работает.
|
|
|
|
Joni228 |
Дата: Четверг, 18.01.2018, 08:43 | Сообщение # 8
|
Бывалый
Сообщений: 314
Статус: Offline
|
Цитата CrowSky ( ) У большинства безлимит Если ты пишешь, и думаю толькл о людях с хорошим интернетом, это плохо. Если ты пишешь, что то, то для всех должны быть равные условия. В твоем случае, лучше считывать код HTML страницы. Тогда будут равные условия.Цитата CrowSky ( ) ID там нет + какая разница какой логин. Если левым людям не кидать - все нормально. Был человек в семье, исключили его. А чат то остался)
|
|
|
|
CrowSky |
Дата: Четверг, 18.01.2018, 09:47 | Сообщение # 9
|
Любитель
Сообщений: 36
Статус: Offline
|
Цитата Joni228 ( ) Был человек в семье, исключили его. А чат то остался Пересоздают файл, но с другим именем + меняют настройки в ахк. Профит. Дел на 2 минуты.
|
|
|
|
[CM]MurKotik |
Дата: Четверг, 18.01.2018, 10:00 | Сообщение # 10
|
Murkot Develop
Сообщений: 252
Статус: Offline
|
CrowSky, При отправке запроса через URLDownloadToFile кириллица отдаётся не на всех осях корректно (на ХРюшке в частности) phpшке. А так хорошо что есть люди которые стараются, молодец!
Joni228, Он вроде написали "Я делаю так, как умею"
-------------------
Ушёл в себя, вернусь поздно и пьяный!
|
|
|
|
CrowSky |
Дата: Четверг, 18.01.2018, 10:02 | Сообщение # 11
|
Любитель
Сообщений: 36
Статус: Offline
|
Цитата [CM]MurKotik ( ) А так хорошо что есть люди которые стараются, молодец!
Пасяб.
Цитата [CM]MurKotik ( ) При отправке запроса через URLDownloadToFile кириллица отдаётся не на всех осях корректно (на ХРюшке в частности) phpшке Учту
|
|
|
|
KaVaL98 |
Дата: Четверг, 18.01.2018, 13:06 | Сообщение # 12
|
Новичок
Сообщений: 11
Статус: Offline
|
Не получилось вставить полностью код с UDF слишком длинный текст, так что вот сам AHK тык
|
|
|
|
tumkin |
Дата: Четверг, 18.01.2018, 15:09 | Сообщение # 13
|
Tumkin Project
Сообщений: 1186
Статус: Offline
|
вообще использовать идею longpoll это правильно. так как сервер будет возвращать ответ пользователю только тогда, когда пришло новое сообщение. тем самым получается чат в реальном времени. да и сервер должен выдавать только новые сообщения, так как выдача каждый раз новых значений будет использовать много трафика и с наполнением файла будет дольше загружаться, поэтому этот алгоритм нужно реализовать на сервере. Как вариант, использовать базу данных, ту же MySQL, хранить там пользователей и сообщения пользователей. И у пользователей хранить идентификатор последней полученной строки.
|
|
|
|
Toopie |
Дата: Пятница, 19.01.2018, 03:18 | Сообщение # 14
|
Боец
Сообщений: 122
Статус: Offline
|
CrowSky, а, ну понятно, я еще и умничаю. Я через это проходил, все это делал, и поверь уж, я знаю, что пишу, если тебя как-то задели мои правки - ну так не мои проблемы же, я тебе пишу, что хостинг ляжет, а ты мне пишешь "не умничай"... Ну как так? Я сам делал такой алгоритм, при 10 пользователях хостинг выдавал ошибку - слишком много запросов на сервер. Что касается на счет безлимита в интернете - а ты хоть раз подумал, что у многих он есть, но НЕ У ВСЕХ? Есть еще люди с трафиком. Ты пишешь "делал, как умел" - орнул конечно, если ты хочешь создать урок, так сделай все идеально, а не сливайся в итоге со словами "делал, как умел", ибо если ты сам ничего не знаешь, зачем ты даешь кривую информацию другим?
лучший в мире самп сервер 185.159.129.71:7777 лидерки админки да
|
|
|
|
T1bro |
Дата: Пятница, 19.01.2018, 09:22 | Сообщение # 15
|
Любитель
Сообщений: 38
Статус: Offline
|
Toopie, нормально все он сделал, что ты пристал? Если хочешь ему что-то донести, то сделай лучше, а не возникай лишний раз.
MacD
|
|
|
|