Перейти к содержимому
RccHD

network Передача данных по EnderStorage

Рекомендуемые сообщения

Если запустить передачу файла и в этот момент посмотреть в эндер-сундук компа, то можно залипнуть на пару минут

 

Завораживает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кто-то уже пробовал в одиночной игре в креативе тестировать эту систему?

 

Какие баги возникали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ссылки на пикчи битые.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ссылки на пикчи битые.

Всё работает. Через проксю какую-нибудь зайди.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ой, вот зря я загрузил пикчи на сервера ВКонтакте

 

Надо было на битбакет загрузить

 

Вечером ссылки поменяю

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кто-то уже пробовал в одиночной игре в креативе тестировать эту систему?

Эта тема интересна очень узкому кругу лиц, вряд ли кто-то будет запускать твой код. И собери все ссылки на код в одном месте, неудобно смотреть, как там всё реализовано, и какие там возможны баги. Я даже не стал искать весь код по спойлерам, поэтому и о его работе ничего говорить не буду.

 

Сундуки из EnderStorage могут быть очень полезны не только потому что с их помощью можно иметь доступ к хранилищу ресурсов находясь на большом расстоянии от дома(или вообще в другом измерении), но и потому, что существует возможность передавать информацию на любое расстояние используя эти сундуки.

Передавать информацию на любое расстояние и в любые измерения гораздо удобнее с помощью связанной карты. Работает быстро, программируется просто, используется легко.

 

Кодированию информации через содержимое инвентаря я нашел только одно применение – для передачи данных между двумя несовместимыми компьютерными модами. С ним конкурирует передача данных по редстоуну. Обе этих среды обмена данными я рассматривал, когда пытался подружить между собой OpenComputers и ComputerCraft. Но потом выяснил, что данные можно легко ретранслировать из одной сети в другую. И потребность отпала.

 

Недостаточная для некоторых задач скорость передачи данных ( 10-12 байт в секунду )

Достигнутая тобой скорость соответствует моим расчетам в 13 байт/сек для сундука такого объема и при отсутствии лагов. Скорее всего, библиотека реализована оптимально. На баги проверять не буду, уверен, что они обязательно проявятся при нехватке таймаута в случае понижения TPS сервера.

 

Предлагаю вообще отказаться от таймаута, а один из слотов задействовать для подтверждения приема. Это позволит при 20 TPS передавать сообщения со скоростью 13 байт/сек, и замедлять передачу при снижении TPS, но связь сохранит устойчивость. Скорость не должна заметно снизиться в сравнении с твоим подходом.

 

Расчеты:

Жертвуем одним слотом: получается 26 слотов на одну операцию передачи данных.

Каждый слот может иметь 64 состояния и кодировать 6 бит.

Каждая операция может передать до 156 бит.

Операция выполняется за тики (минимум):

26 тиков на обновление 26 слотов

1 тик на обновление сигнального слота передатчиком

1 тик на считывание инвентаря приемником

1 тик на обновление сигнального слота приемником.

1 тик на считывание инвентаря передатчиком

итого: 30 тиков на операцию.

Максимальная скорость передачи = 5.2 бит/тик или 13 байт/сек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 


Передавать информацию на любое расстояние и в любые измерения гораздо удобнее с помощью связанной карты. Работает быстро, программируется просто, используется легко.

Связанные карты нельзя связать в целостную сеть без серверных стоек(или роутеров) и без написания доп. кода к ним
Представь ситуацию, когда информация о температуре реактора должна рассылаться в 15 точек одновременно.
В таком случае нам понадобится аж 30 связанных карт + придется потратить энергии на 15 запросов(а они у связанных карт недешевые в плане энергии). А ведь нам всего лишь нужно переслать одно жалкое число и ничего более

Вот чтобы не тратиться на сетевые карты и не обеспечивать к каждому компу сети большое кол-во энергии, можно использовать ender-net

Я конечно не спорю, что связанные карты удобнее, но для таких мелочных операций как пересылка чисел более чем одному получателю они не совсем подходят. В таких случаях я бы предпочел ender-net Изменено пользователем RccHD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для тех, кому лень искать все ссылки на файлы:

Библиотека ender-net:
pastebin get qYiQWtb0 /lib/ender-net.lua

Простой 'слушатель' сообщений сети
https://pastebin.com/x6GyEynm

Драйвер передачи файлов

base64(необходимая библиотека) - pastebin get 0xDgW35R /lib/ender-net-base64.lua

Драйвер состоит из двух программ
1) waitFile.lua (установить можно командой pastebin get aD20ZF4q /bin/waitFile.lua)
2) sendFile.lua (установить можно командой pastebin get wHA6QzH6 /bin/sendFile.lua)

Изменено пользователем RccHD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Предлагаю вообще отказаться от таймаута, а один из слотов задействовать для подтверждения приема.

Вот то же самое хотел посоветовать. Это позволит передавать с максимальной скоростью и даёт 100% шанс, что сообщение было получено, что очень важно. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Меняя количество предметов в разных слотах, можно "отправлять" информацию.

Ребят, может я слоупок или не в теме, но в чем прикол ТАКОГО вида обмена информацией? Защита информации? Или попытки создать нечто необычное? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ребят, может я слоупок или не в теме, но в чем прикол ТАКОГО вида обмена информацией? Защита информации? Или попытки создать нечто необычное? 

 

nXTuit5o.jpeg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

nXTuit5o.jpeg

 

А практическая значимость всего этого действа есть или все в ОС это FUN?  :blink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тем кому не видно ловите.

 

 

a124727e44fa1b187c1ab929e051f798.jpg

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот то же самое хотел посоветовать. Это позволит передавать с максимальной скоростью и даёт 100% шанс, что сообщение было получено, что очень важно. 

Изначально я реализовывал обмен сообщениями по ender-net в виде broadcast-рассылки. При рассылках обычно не определяют дошло письмо или нет, так как кто-то просто рассылает, и его не волнует успел кто-то прочитать посланное сообщение или нет. 

 

Но вот как нам определить что сообщение было получено если в нашей ender-сети 15 участников? Выделить 15 слотов под это дело? Или делать инкрементный счетчик от 0 до 14? А что делать если кусок сети просто отвалился и не реагирует?

Я все это пишу к тому, что рассылать сообщения по принципу broadcast гораздо проще, и тогда не важно кто прочитал, а кто нет. Если кто-то не успевает читать сообщения, пусть увеличивает TPS в своей зоне, убирает бесполезных мобов с территории, либо договаривается об увеличении TIMEOUT'а

 

Плюс ко всему на основе ender-net можно городить свои протоколы и способы обмена информацией: можно сделать подтверждение о том, что сообщение было получено в виде ответного ender_net.sendMessage, в качестве кода сообщения указать 50(код, который означает что сообщение дошло до получателя), а в качестве самого сообщения указать ID сообщения, которое было получено

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А практическая значимость всего этого действа есть или все в ОС это FUN?  :blink:

Практическая значимость есть...

Если нужно разослать "легкую" информацию по 15 точкам на огромном удалении друг от друга можно выбрать один из двух вариантов:

 

1) Обеспечить к каждой точке приток большого кол-ва EU + скрафтить к каждой точке по паре связанных сетевых карт(для которых как раз и была подведена EU).

Плюс ко всему надо будет писать софт для пересылки сообщения между несвязанными между собой картами. Сеть получится централизированная.

Задача решена

 

2) Либо можно установить на каждый комп ender-net + 1 генератор на угле. Задача тоже решена.

Итог:

A) меньше заморочек с получением EU.

B) получилась нецентрализированная сеть, и если у кого-то в сети сломается комп(не важно у кого), то сеть не перестанет функционировать

Изменено пользователем RccHD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Изначальная идея здравая, но реализация хромает.

Предлагаю не занимать слоты эндерчета бессмысленной инфой.

Берем несколько сундуков, закладываем в них 255 разных ресурсов.

Для передачи информации, переносим ресурсы в эндерчест, по заранее созданной таблице соответствий (синхронизировать можно при старте).

Получаем 53 байта за раз, следовательно, можно жать информацию, бить на блоки по 53 байта и передавать без особых извращений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Берем несколько сундуков, закладываем в них 255 разных ресурсов.

Для передачи информации, переносим ресурсы в эндерчест, по заранее созданной таблице соответствий (синхронизировать можно при старте).

Получаем 53 байта за раз, следовательно, можно жать информацию, бить на блоки по 53 байта и передавать без особых извращений.

изначально так и хотел делать, но потом понял что сложно это и решил для начала сделать вариант попроще и постабильнее

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Связанные карты нельзя связать в целостную сеть без серверных стоек(или роутеров) и без написания доп. кода к ним Представь ситуацию, когда информация о температуре реактора должна рассылаться в 15 точек одновременно. В таком случае нам понадобится аж 15 свзанных карт + придется потратить энергии на 15 запросов(а они у связанных карт недешевые в плане энергии). А ведь нам всего лишь нужно переслать одно жалкое число и ничего более

Если задача формулируется именно и только таким образом, то решение подходящее. Трудности появятся при масштабировании производства.

 

Гораздо чаще возникает ситуация, когда 15 датчиков посылают данные на один пульт. И в этом случае твоя схема увеличивается в 15 раз. Каждый новый датчик потребует для себя постройки не только передатчика с сундуком, но и приемника в каждой точке приема. В результате твоя система обмена данными будет занимать места больше, чем обслуживаемые ею механизмы. Настройка такой системы тоже отнимет много времени.

 

В реальных системах промышленной автоматизации используются более простые решения. К примеру, есть сотня датчиков на одной базе, и все показания транслируются на единый сервер базы. На другой базе еще сотня датчиков, и их показания транслируются на свой сервер. Оба сервера соединены протяженным и не всегда быстродействующим линком, и с определенной периодичностью обмениваются данными. К каждому серверу могут быть подключены десятки терминалов, отображающих те или иные данные, в том числе и с датчиков, находящихся на других базах. Данные между базами пересылаются при этом только один раз. А с пересылкой пакетов между множеством измерений или отдаленных баз лучше всех справляется OpenNet. Для удешевления передачи по связанным картам можно собирать данные от множества датчиков в один пакет. А размер пакета имеет внушительный потенциал.

 

Я конечно не спорю, что связанные карты удобнее, но для таких мелочных операций как пересылка чисел более чем одному получателю они не совсем подходят. В таких случаях я бы предпочел ender-net

Все зависит от масштаба. Операции могут быть мелкими, но когда самих операций будет много, то OpenNet выиграет как по дешевизне, так и простоте постройки и обслуживания.

 

А еще у меня предупреждение против этих сундучков – слишком они читерные. Квантовый мост хотя бы энергию потребляет, и занимает немало места.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А практическая значимость всего этого действа есть или все в ОС это FUN?  :blink:

Весь Майнкрафт ради фана и разминки мозгов. Зарплату нам не платят ни за игру, ни за программы, ни за обсуждение на форуме.

А еще для понтов: смотрите, как я могу!

Так что, использованное решение хорошо во всех смыслах: и мозги размяты, и время проходит весело, и каждому оратору предоставлена возможность сказать что-то умное и значительное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...