1

Тема: Передача данных с нескольких компьютеров на один.

Здравствуйте товарищи!
Я являюсь лидером большой группы игроков в одной интересной игре.
Раз в неделю у нас проходит глобальный турнир, где участвует 12 серверов, по 20 игроков с каждого сервера.
Я играю на одном из этих серверов и руковожу действиями игроков своего сервера и ещё 3-х союзных + 5-7 смотрящих, которые не участвуют в битве, но помогают наблюдая за определёнными местами и сообщая мне об изменениях.
Каждый, кто находится в группе из 20 игроков на глобальной карте видит отметки, где находятся его согрупники, но не видит где находятся союзники с других серверов. Смотрящие на карте не видят вообще никого.
Соответственно, если я нахожусь в группе, то я вижу на карте только моих согрупников с моего сервера и мне приходиться отвлекаться от командования на боевые действия, ибо я занимаю место. А если я иду смотрящим, то не отвлекаюсь от командования, но тогда не вижу кто где находиться и мне приходиться ориентироваться только по смотрящим.
Одни из наших соперников, используют некую программу, которая позволяет ихнему командиру видеть на карте не только игроков своего сервера, но и всех остальных серверов их союзников и даже смотрящих, что позволяет более эффективно координировать передвижения союзников(по данным разведки).

AutoHotKey я использую уже более 2-х лет и очень благодарен создателю этой программы, а также создателям сайта script-coding.com за информацию, благодаря которой я научился использовать компьютер более комфортно.

Я решил сделать такую же программу, которая бы мне позволила видеть, где находятся союзники.
Из файлов игры, я вытащил 3 карты(картинки JPG) локаций, на которых проводится турнир.
С помощью ArtMoney определил, что каждая локация имеет свой номер ID, который хранится в оперативной памяти. Так же я определяю текущие координаты персонажа, уровень его здоровья и уровень магии, которые определяются в AHK скрипте и заносятся в переменные.
На другом компьютере, который стоит рядом, я создал AHK скрипт, который считывает данные из переменных и в соответствии с ними рисует точку на карте в определённом месте и отображает индикатор здоровья и магии.

Теперь передо мной стоит задача, как передать данные типа: ID-34; LOC-3; X-56; Y-14; HP-15389; MP- 7398, с 80-ти компьютеров, на которых установлен мой скрипт с определением этих значений, на мой компьютер, чтоб я смог использовать эти данные для вывода на карту и отображения индикаторов.

2

Re: Передача данных с нескольких компьютеров на один.

Я так понимаю, необходима оперативность передачи?

3

Re: Передача данных с нескольких компьютеров на один.

Можно сделать вообще отдельную программу, которая будет передавать содержимое INI файла с одного компьютера на другой и сохранять этот INI в том же виде.

4

Re: Передача данных с нескольких компьютеров на один.

Масян пишет:

Можно сделать вообще отдельную программу, которая будет передавать содержимое INI файла с одного компьютера на другой и сохранять этот INI в том же виде.

Это вопрос или готовое решение?

5

Re: Передача данных с нескольких компьютеров на один.

Если клиенты имеют доступ к серверу, создайте на нем общюю папку с ini файлами и записывайте/считывайте данные.

6

Re: Передача данных с нескольких компьютеров на один.

ypppu пишет:
Масян пишет:

Можно сделать вообще отдельную программу, которая будет передавать содержимое INI файла с одного компьютера на другой и сохранять этот INI в том же виде.

Это вопрос или готовое решение?

И не вопрос и не решение.
Это как вариант. Только не знаю, как этот вариант воплотить в жизнь.

7

Re: Передача данных с нескольких компьютеров на один.

Zohann пишет:

Если клиенты имеют доступ к серверу, создайте на нем общюю папку с ini файлами и записывайте/считывайте данные.

Ну если бы они все были в локальной сети, то можно было бы и так сделать.
Но ведь игроки со всего мира играют. Кто-то в Германии живёт, а кто в США. Большинство из России и Украины.

8

Re: Передача данных с нескольких компьютеров на один.

Вобщем затык в том, что нужно пакет данных передать из точки А в точку В. Нужен гуру по сетевым возможностям AHK.

9

Re: Передача данных с нескольких компьютеров на один.

Можно без гуру - центральный компьютер открывает у себя общую папку, а скрипты с других компьютеров записывают в неё файлы. На центральном компьютере скрипт обрабатывает периодически все файлы.

10

Re: Передача данных с нескольких компьютеров на один.

центральный компьютер открывает у себя общую папку

Ну я так и написал ранее.

11

Re: Передача данных с нескольких компьютеров на один.

Ну так мысль правильная. А если сеть не локальная, то можно по FTP расшарить папку.

12

Re: Передача данных с нескольких компьютеров на один.

Zohann пишет:

Вобщем затык в том, что нужно пакет данных передать из точки А в точку В. Нужен гуру по сетевым возможностям AHK.

А что это за зверь такой — сетевые возможности АНК? Я только UrlDownloadToFile знаю. Ну там страницу ещё можно открыть в браузере.

13 (изменено: Irbis, 2013-12-26 17:56:28)

Re: Передача данных с нескольких компьютеров на один.

Скорее всего, расширение функционала за счет подключаемых библиотек, аналогично работе с графикой посредством библиотеки Gdip.ahk

14

Re: Передача данных с нескольких компьютеров на один.

Что удалось найти.
AHK: Портовый приёмник
AHK: Прослушивание сетевых пакетов, реагирование на получение пакета
AHK: Отправка сообщений в порт

15

Re: Передача данных с нескольких компьютеров на один.

Я думаю, что эта тема будет интересна многим.
Вот нашёл что-то похожее http://forum.script-coding.com/viewtopic.php?pid=56302#p56302
Сначала запускаем сервер, потом клиент. В клиенте 2 кнопки. При клике на одну, посылается pg|1. Если нажать на другую, посылается pg|2. Сервер принимает и выводит в своём окне.

Кстати работает только на AutoHotKey_L.
Проверял в локальной сети между ноутбуком и компом. Работает.

16

Re: Передача данных с нескольких компьютеров на один.

Вот нашёл что-то похожее http://forum.script-coding.com/viewtopic.php?pid=56302#p56302

Было бы круто конечно указав IP слать с клиента на сервер данные. В локалке организации не удалось послать, возможно фаервол блокирует.

17

Re: Передача данных с нескольких компьютеров на один.

Мпэт пишет:

Я думаю, что эта тема будет интересна многим.
Вот нашёл что-то похожее http://forum.script-coding.com/viewtopic.php?pid=56302#p56302
Сначала запускаем сервер, потом клиент. В клиенте 2 кнопки. При клике на одну, посылается pg|1. Если нажать на другую, посылается pg|2. Сервер принимает и выводит в своём окне.

Кстати работает только на AutoHotKey_L.
Проверял в локальной сети между ноутбуком и компом. Работает.

Попробовал в локалке. На большом компе запустилось, а на маленьком выдало ошибку при запуске.
Как оказалось, на маленьком компьютере был установлен обычный AHK.
Установил AHK_L и всё заработало.
В клиенте, в строчке

StrPut("pg|1", &buf, 8, "utf-16")

изменил данные для отправки  на

StrPut("Привет", &buf, 8, "utf-16")

Сервер получает: Привет.
Попробовал вставить переменную

StrPut("%var%", &buf, 8, "utf-16")

Сервер получает: %var%, вместо содержимого этой переменной.
Если вписать так:

StrPut(%var%, &buf, 8, "utf-16")

Сервер выдаёт пустую строку.

18

Re: Передача данных с нескольких компьютеров на один.

StrPut(var, &buf, 8, "utf-16")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: Передача данных с нескольких компьютеров на один.

А значения ip нужно менять в клиенте или сервере? Или так и оставить 127.0.0.1? У меня не работает.

20

Re: Передача данных с нескольких компьютеров на один.

127.0.0.1 — это ведь localhost, т.е. локальная машина. Сервер, по идее, принимает запрос на подключение, так что это клиент должен изначально знать адрес сервера.

21

Re: Передача данных с нескольких компьютеров на один.

YMP пишет:

127.0.0.1 — это ведь localhost, т.е. локальная машина. Сервер, по идее, принимает запрос на подключение, так что это клиент должен изначально знать адрес сервера.

Так и делал, прописывал на клиенте IP сервера... Молчит.
А еще запускал одновременно на машине и сервер и клиент, думал если в клиенте 127.0.0.1 то по идее сервер должен поймать сообщение. Но тоже ничего.

22

Re: Передача данных с нескольких компьютеров на один.

Брандмауэр может блокировать внешние подключения. Я как-то тоже пробовал писать сервер и клиента и устанавливать соединение, так пришлось в брандмауэре правило составлять для подключения извне.

23

Re: Передача данных с нескольких компьютеров на один.

Zohann пишет:
YMP пишет:

127.0.0.1 — это ведь localhost, т.е. локальная машина. Сервер, по идее, принимает запрос на подключение, так что это клиент должен изначально знать адрес сервера.

Так и делал, прописывал на клиенте IP сервера... Молчит.
А еще запускал одновременно на машине и сервер и клиент, думал если в клиенте 127.0.0.1 то по идее сервер должен поймать сообщение. Но тоже ничего.

В клиенте прописываешь адрес сервера, а в сервере адрес клиента.
Если и там и там 127.0.0.1, то можно запустить на одной машине сначала сервер, потом клиент.

24

Re: Передача данных с нескольких компьютеров на один.

В клиенте прописываешь адрес сервера, а в сервере адрес клиента.

Прописал в клиенте свой IP, в сервере клиентский IP. Запустил (в локалке) на удаленной машине клиента, запустил у себя сервер, сразу выскочило сообщение: bind 10049. Данные с клиента не передались.

Если и там и там 127.0.0.1, то можно запустить на одной машине сначала сервер, потом клиент.

Вот так получилось.
Что за bind 10049?

25

Re: Передача данных с нескольких компьютеров на один.

Zohann пишет:
В клиенте прописываешь адрес сервера, а в сервере адрес клиента.

Прописал в клиенте свой IP, в сервере клиентский IP. Запустил (в локалке) на удаленной машине клиента, запустил у себя сервер, сразу выскочило сообщение: bind 10049. Данные с клиента не передались.

Если и там и там 127.0.0.1, то можно запустить на одной машине сначала сервер, потом клиент.

Вот так получилось.
Что за bind 10049?

У тебя на обоих машинах стоит AHK_L? в AHK это не работает.

26 (изменено: Мпэт, 2014-01-01 22:45:47)

Re: Передача данных с нескольких компьютеров на один.

Не получается отправить массив.
Клиент:


.....
Gui, Add, Edit, vID
Gui, Add, Button, default, Отправить
.....
ButtonОтправить:
   Gui, Submit
   StrPut(ID, &buf, 180, "utf-16")
   DllCall("Ws2_32.dll\send", "ptr", Socket, "ptr", &buf, "int", 360, "int", 0)
   Gui, Show, X100 Y300, Клиент,
return
.....

Если вписать в строку [[1,2,3],[10,20,30,40]], данные отправляются и отображаются на сервере, но только как текст.
И если сделать так:

var := StrGet(&buf, x, "utf-16")

В переменную var попадает текст [[1,2,3],[10,20,30,40]], но переменная не создаётся как массив.
В тоже время

var:=[[1,2,3],[10,20,30,40]]

Создаёт полноценный массив, из которого легко вытащить нужную информацию.

27

Re: Передача данных с нескольких компьютеров на один.

У тебя на обоих машинах стоит AHK_L? в AHK это не работает.

Я запускаю скрипт переносом .ahk на Autohotkey_L.exe, так что можно сказать что стоит AHK_L.

28

Re: Передача данных с нескольких компьютеров на один.

Мпэт пишет:

Не получается отправить массив.

Отправляется то, что в буфере. StrPut, как видно из её названия, пишет туда строку. Строка и отправляется. Массив вы никак туда не запихнёте. Да, определение массива — это тоже строка, но она обрабатывается движком при загрузке скрипта. А то, что возвращает StrGet, не воспринимается как определение. Это просто текст.

29

Re: Передача данных с нескольких компьютеров на один.

На ум приходит только парсить строку. Если размерность массива равна двум, как в примере, то можно так:

var:="[[1,2,3],[10,20,30,40]]" ; текст
var := StrToArray(var)
MsgBox % var[2][4]
Return

StrToArray(var)
{
   arr := []
   StringReplace, var, var, ]`,[, $, All
   Loop, Parse, var, $,[]
   {
      i := A_Index
      Loop, Parse, A_LoopField, `,
         arr[i, A_Index] := A_LoopField
   }
   Return arr
}

30

Re: Передача данных с нескольких компьютеров на один.

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

31

Re: Передача данных с нескольких компьютеров на один.

ypppu пишет:

А если сеть не локальная, то можно по FTP расшарить папку.

32

Re: Передача данных с нескольких компьютеров на один.

ypppu пишет:
ypppu пишет:

А если сеть не локальная, то можно по FTP расшарить папку.

С помощью AHK_L это сделать возможно?
Если да, то как?

33

Re: Передача данных с нескольких компьютеров на один.

AHK_L должен уметь работать с командной строкой. То есть можно использовать ftp.exe.
Расшаривание папки на центральном ПК можно сделать при помощи сторонних программ, либо доустановить стандартную оснастку IIS.

34

Re: Передача данных с нескольких компьютеров на один.

Прописал в клиенте свой IP, в сервере клиентский IP. Запустил (в локалке) на удаленной машине клиента, запустил у себя сервер, сразу выскочило сообщение: bind 10049. Данные с клиента не передались.

Решил свою проблему. Если экспериментировать в локальной сети, то нужно в клиенте прописать локальный IP сервера, а на сервере внешний IP, который для всех машин в сети одинаковый.

35

Re: Передача данных с нескольких компьютеров на один.

В общем совместно решили эту проблему.
С помощью TYPSoft FTP Server создали FTP сервер на главной машине и открыли к нему доступ из вне.
С роутером пришлось повозиться. Настроили перенаправление портов в роутере.
На сервере создали пользователя и назначили ему папку для доступа.
АНК скрипт на клиентской машине извлекает данные из программы, записывает их в INI файл и отправляет его по FTP на сервер. А сервер в свою очередь извлекает эти данные и использует по назначению.

P.S. TYPSoft FTP Server позволяет также получать доступ к любым(настраивается) файлам на компьютере из сети.
Для скачивания нужен только браузер и данные(IP,порт, логин и пароль)