[Урок] Чат между серверами (Ahk and Php) - Форум Cheat-Master.ru
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
Форум » Программирование » AHK Программирование » [Урок] Чат между серверами (Ahk and Php)
[Урок] Чат между серверами (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
Форум » Программирование » AHK Программирование » [Урок] Чат между серверами (Ahk and Php)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7209]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
Stanislav_ss [16:05]

123131312312314534 [13:41]

Pan40xxl [12:36]

chinazes000 [11:29]

donaldga2 [05:28]

rubenia18 [21:17]

pokotiloroman91 [18:24]

stephensh5 [12:00]

calliesv7 [06:11]

louqm16 [22:14]

artushak [16:32]

Kingpolker [15:42]

leeyv11 [15:12]