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

Возрождаем OpenNet(не опять, а снова)

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

2 часа назад, AlexCatze сказал:

Собственно, сама библиотека, реализующая связь между узлами

Библиотека, позволяющая работать в сети программам, заточенным под OpenNet

А апи устаканилось? Эту библу можно потрогать?

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


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, hohserg сказал:

А апи устаканилось? Эту библу можно потрогать?

Планов менять API нет. Хотя всё может быть. Если не нужен продвинутый функционал(например, работа одновременно с несколькими картами) - можно использовать либу opennet.lua. Она эмулирует OpenNet, и её API меняться точно не будет. При этом основной функционал будет работать нормально.

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


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

Т.е. все программы, которые умеют работать с OpenNet будут работать с Racoon?

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, hohserg сказал:

Т.е. все программы, которые умеют работать с OpenNet будут работать с Racoon?

Да. При этом такие возможности как: связь между серверами, многоуровневые сети и  DNS(когда они появятся) - будут доступны. API основной либы racoonnet.lua примет свой завершённый вид на релизе. Релиз будет, как только заработает мост между серверами.

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


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

Использование апи opennet обязательно должно начинаться с вызова getIP?

Правильно ли реализован getIP? Там при каждом вызове происходит инициализация. Это может означать, что при каждом вызове ip будет разным

https://github.com/AlexCatze/racoon-dev/blob/master/lib/opennet.lua#L16

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

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


Ссылка на сообщение
Поделиться на других сайтах
20 минут назад, hohserg сказал:

Использование апи opennet обязательно должно начинаться с вызова getIP?

Правильно ли реализован getIP? Там при каждом вызове происходит инициализация. Это может означать, что при каждом вызове ip будет разным

https://github.com/AlexCatze/racoon-dev/blob/master/lib/opennet.lua#L16

Да. Вызывая getIP ты не только узнаёшь свой IP, но и даёшь роутеру понять, что ты начал работу в сети. Да, теоретически, IP может меняться, но если два раза подряд getIP, ты вряд ли получишь разные IP. IP выдается роутером, на данный момент выдаваемый IP зависит от двух факторов. Первый - IP роутера, второй - адрес карты, с которой был отправлен запрос.

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


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, AlexCatze сказал:

pastrebin run vVrgPcf3

У тебя опечатка в команде

---

В общем, идея мне нравится - довольно стройная (как минимум в теории) архитектура с тремя уровнями устройств, связь между устройствами посредством различного оборудования благодаря унифицированному интерфейсу (что я делал-делал в своем OCNS, да не доделал), браузер, и так далее.

Поэтому я решил даже немного почитать и поревьюить твой код - а он достаточно приличный, тем более для первого проекта

 

Конечно, недочеты есть, и все, что я нашел, я отметил в твоем коде, который специально для этих целей форкнул: https://github.com/AtomicScience/racoon-dev

Просто поищи по коду по меткам "REV:"

 

Также не забудь посмотреть файлик "Общие замечания" в корне репозитория.

 

Надеюсь, тебе будет полезно.

 

P.S.:

Учти, что это все, разумеется, не квинтэссенция знаний программистского ремесла, снизошедшая на тебя, смертного, откуда-то, кажется, из-за облаков, а просто мнение о твоем коде от чувака из интернета, построенное через призму субъективных предпочтений

 

P.P.S.:

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

 

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


Ссылка на сообщение
Поделиться на других сайтах
16 часов назад, AlexCatze сказал:

С кодом можно ознакомится на складе грязи

А аквадискотека будет?:D

 

А теперь серьёзно. Сразу скажу, код не читал в виду отсутствия времени. Но из описания сети возникло несколько вопросов:

1. Правильно ли я понял, что ЕнотоСеть в отличии от OpenNet имеет не древовидную структуру, а облачную? Т.е. в сети, состоящей более чем из двух роутеров возможны циклы. Каким образом планируется избегать зацикливания пакетов?

2. Маршрутизация в ON осуществлялась элементарно. Роутер, получив пакет, по IP получателя определял предназначен ли этот пакет связанному с ним клиенту. Если да, передавал пакет этому клиенту. Если нет, передавал пакет на уровень выше и это становилось головняком вышестоящего роутера. Как здесь? Предусмотрены ли таблицы маршрутизации? Заполняются ли они вручную или автоматически? С какой периодичностью обновляются?

3. Какова структура IP-адреса? Из описания понял, что это IP роутера + ID карты клиента. А кто выдает IP роутеру? Вышестоящий роутер? Но ведь сеть безуровневая.

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Zer0Galaxy сказал:

1. Правильно ли я понял, что ЕнотоСеть в отличии от OpenNet имеет не древовидную структуру, а облачную? Т.е. в сети, состоящей более чем из двух роутеров возможны циклы. Каким образом планируется избегать зацикливания пакетов?

Нет. Сеть тоже имеет древовидную структуру. Отличие от ОпенНет, "дерево" может быть любой формы, клиенту всё ровно, подключается он к первому уровню, или к сотому(если кто-то подключит 100 роутеров "последовательно"). И если "ветка" отломается(роутер не сможет связаться с вышестоящим) - связь внутри ветки нарушена не будет.

1 час назад, Zer0Galaxy сказал:

2. Маршрутизация в ON осуществлялась элементарно. Роутер, получив пакет, по IP получателя определял предназначен ли этот пакет связанному с ним клиенту. Если да, передавал пакет этому клиенту. Если нет, передавал пакет на уровень выше и это становилось головняком вышестоящего роутера. Как здесь? Предусмотрены ли таблицы маршрутизации? Заполняются ли они вручную или автоматически? С какой периодичностью обновляются?

Здесь очень похоже. Роутер, выдавая клиенту IP, запоминает три значения. Первое, как ключ, это выданный IP, второе - адрес карты, на которой висит клиент, и третье - адрес карты клиента. Когда на роутер приходит пакет, он проверяет, содержится ли в IP получателя, IP одного из клиентов. Например, пакет адресован "xxx.yyy.zzz.www", предположим, сеть четырёхуровневая. "xxx","yyy","zzz" - роутеры. Рассмотрим роутер "yyy", ему пришёл пакет, с вышеуказанным адресом получателя, и он передаст его на IP "xxx.yyy.zzz". Сделано это по тому, что роутер не знает, является ли его клиент, для кого то роутером. И на случай "обрыва ветки". Т.е., если связь между роутерами "xxx" и "yyy", второй начнёт выдавать адреса без префикса "xxx", и если кто-то попробует отравить пакет на "xxx.yyy.zzz.www" - пакет уйдет на "yyy.zzz.www".

1 час назад, Zer0Galaxy сказал:

3. Какова структура IP-адреса? Из описания понял, что это IP роутера + ID карты клиента. А кто выдает IP роутеру? Вышестоящий роутер? Но ведь сеть безуровневая.

Сеть не безуровневая, просто жёстких требований к количеству уровней нет. Роутеру ведает IP вышестоящий роутер. Если такого нет - роутер берет себе как IP первые 3 знака от адреса компонента computer.

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


Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, AtomicScience сказал:

Также не забудь посмотреть файлик "Общие замечания" в корне репозитория.

 

Надеюсь, тебе будет полезно.

Спасибо. Замечания посмотрел, сейчас буду код смотреть. По поводу замечаний.

1) Упомяну, и в инсталятор добавлю ребут после установки.

2) Как по мне, любые IP адреса плохо запоминаются. На релизе будет DNS и DDNS. Проблема в том, что сделать DNS по аналогии с OpenNet нельзя. Там при установке записей, пароли от аккаунтов пользователей, передавались в открытом виде. И если для OpenNet это не проблема, то в RacoonNet, по причине лёгкой расширяемости сети, какой-то Вася может модифицировать код роутера, и сниффить все пакеты. Допустим, Петя, воспользовавшись услугами "неправильного" роутера, зарегистрирует аккаунт в DNS с логином и паролем, как в учётной записи сервера майнкрафта. Вася угонит аккаунт Пети, Петя нажалуется администрации проекта, а администрация (особенно если это будет не единичный случай), запретит ЕнотоСеть. По этому, всё, где нужна аутентификация требует шифрования. А как его сделать, у меня пока идей нет(

3) Учту. Вообще хотел привести код в порядок на релизе, и убрать костыли. Ты наверное заметил, что подразумевается возможность выбора языка интерфейса, но много где захардкожен русский.

4) Можешь, пожалуйста, объяснить как это сделать? Просто до этого я использовал гит исключительно как файлопомойку.

5) Будет подробная документация на релизе. Не вижу смысла документировать то, что может(маловероятно, но может) поменяться.

 

Релиз будет, когда будет возможность строить межсерверные сети. Когда будет эта возможность - не знаю. Мост, который я хочу использовать, ведёт себя странно. Я пошёл смотреть код.

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


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, AlexCatze сказал:

4) Можешь, пожалуйста, объяснить как это сделать? Просто до этого я использовал гит исключительно как файлопомойку.

Самый простой способ создать тег - нажать на кнопку "Create a new release"

image.png.7bee2591ae33b8625bbfbd02e1426e4e.png

После заполнения описания, последний коммит в текущей ветке будет отмечен меткой

image.png.59d2742c203efcf029e7f34b6c3fa311.png

Твой код к ней можно в любой момент "перемотать" в специальном окошке:

image.png.cc7cb4f1e8b638035b14a3aae540d4bd.png

А еще к релизу будет автоматически добавлен архив с исходниками:
image.png.eaeb218a1ce878ac4fe07da0d30dd171.png

---

Вообще, очень советую научиться активно использовать Git в разработке, делая коммиты постоянно, а не выкидывая кучу кода прям перед новым релизом - это выведет разработку на качественно новый уровень, сделает ее удобнее, и, что самое главное, позволит людям работать совместно с тобой - никто не будет рисковать делать какой-то пул-реквест, когда ты, условно говоря, в любой момент можешь принести коммит на 10 тысяч строк и все стереть.


Делай небольшие коммиты с осмысленными названиями - поможет отслеживать прогресс и откатывать изменения, если что пойдет не так

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


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

@AtomicScience Спасибо. Посмотрел я ревью. Спасибо. Сейчас пойду исправлять. По поводу названий функций(getip, sendrec), это ещё с OpenNet осталось. Библиотека racoon.lua вообще отдельный случай, изначально она предполагалась для другого проекта, и неплохо бы для неё придумать нормальное название. Насколько я понял os.date() возвращает некую дату, начиная с 1970-го года, плюс прошедшее игровое время с момента создания мира. Дублирование функций в rn_<> файлах - они похожи, но есть маленькие, но значительные отличия. Например, при отправке сообщений через тунель, не используется порт. Сейчас внесу правки, пойду разбираться с гитхабом.

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


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

Картинки еще не встраиваются? Или я тупой? 

<html>
<head>
<title>test</title>
</head>
<body>
<img src="./test.pic">
</body>
</html>

 

это максимум что я получил:
image.png.d71d7f8b0c0a2019d5cbe45f825c95d6.png

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

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


Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, nikitaaaaa сказал:

Картинки еще не встраиваются?

Ещё не встраиваются. В планах есть, но это пока не приоритетная задача.

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, AlexCatze сказал:

В планах есть, но это пока не приоритетная задача

Хорошо, пингани когда сделаешь

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


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

Кстати, как насчет идеи использования графической библиотеки от MineOS как основы для браузера?

 

https://github.com/IgorTimofeev/MineOS/wiki/GUI-API


ECS`ом, де-факто, проделана вся необходимая работа, нужно лишь придумать способ создания файлов для страниц, да и это необязательно - в сети, где все друг другу доверяют, можно просто шарить lua-скрипты, которые будут рендерить страницы.

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


Ссылка на сообщение
Поделиться на других сайтах
19 минут назад, AtomicScience сказал:

Кстати, как насчет идеи использования графической библиотеки от MineOS как основы для браузера?

Не хочу. По тому что:

19 минут назад, AtomicScience сказал:

ECS`ом, де-факто, проделана вся необходимая работа

Буду строить на библиотеке forms, ибо:

В 29.07.2015 в 19:02, Zer0Galaxy сказал:

Конечно, браузер на такой библиотеке не построить

 

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


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, AlexCatze сказал:

Не хочу. По тому что:

Буду строить на библиотеке forms, ибо:

 

Упорство, конечно, похвально, но учти, что тогда тебе придется проделать очень, очень большую работу. Так и перегореть можно

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


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

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

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

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

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

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

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

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

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


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