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

Мод OpenComputers

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

Что здесь такого? Это ведь обычная лампа?
А выключатель из Switches mod, которого нет на сервере.

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


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

Как при помощи шин расширять количество слотов сервера?

Сможет ли один сервер работать с несколькими связанными платами?

Какое максимальное количество связанных плат может обрабатывать один сервер?

 

Шины расширяот количество компонентов, подерживаемое сервером. К сожалению, количество слотов в интерфейсе при этом не растет =)

Сервер может сколько угодно (в рамках лимита на компоненты) связных плат поддерживать.

Но физически их поместится не очень много. Придется поставить еще один сервер/компьютер.

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

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


Ссылка на сообщение
Поделиться на других сайтах
Шины расширяот количество компонентов, подерживаемое сервером. К сожалению, количество слотов в интерфейсе при этом не растет =)

Сервер может сколько угодно (в рамках лимита на компоненты) связных плат поддерживать.

Так. Что мы называем компонентами? Внешние устройства, как принтер, дисковод и т.д? А куда тогда платы засовывать?

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

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


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

Собственно компонент - это некое устройство, подключаемое через Component API. =)

Вот списочек: http://ocdoc.cil.li/component

Это и внешние девайсы, и платы, и апгрейды и прочее. Любой девайс, обладающий набором своих функций - это компонент (даже файловые системы).

Мы подключаем компонент:

local com = require('component')
local device = com.device

И в переменной device у нас оказывается так называемый "прокси" объекта.

Это табличка с переменными и методами девайса. Как библиотека, по сути.

 

Команда com.device возвращает ГЛАВНЫЙ компонент. Обычно - это первый в списке одинаковых.

Если же у нас их много, одинаковых, (пять связных плат, например), то мы можем получить их все используя метод com.list('type'):

(Подробнее о методах Component API: http://ocdoc.cil.li/api:component)

for address, componentType in component.list('device') do ... end

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

modem_message (receiverAddress: string, senderAddress: string, port: number, distance: number, ...)

(Подробнее об эвентах компонентов: http://ocdoc.cil.li/component:signals)

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


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

Спасибо. Вот теперь что то проясняется.

Еще вопрос. Могут ли сервера, которые стоят в одной серверной стойке обмениваться информацией при помощи обычных проводных сетевых плат? Достаточно ли того, что они стоят в одной стойке или надо какую то внешнюю сеть городить?

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


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

Спасибо. Вот теперь что то проясняется.

Еще вопрос. Могут ли сервера, которые стоят в одной серверной стойке обмениваться информацией при помощи обычных проводных сетевых плат? Достаточно ли того, что они стоят в одной стойке или надо какую то внешнюю сеть городить?

 

Нет, сеть городить не надо.

Сервера в одной стойке умеют общаться друг с другом. Для этого достаточно проводной сетевой карты.

 

В интерфейсе серверной стойки есть переключатель External/Internal который определяет поведение серверов при получении и передаче сетевых пакетов.

 

Для примера, пусть у нас есть четыре сервера в стойке - A, B, C и D. Сервера A, B и C привязаны к левой, правой и нижней сторонам. Сервер D не привязан к стороне стойки.

 

В режиме External, сообщение пришедшее извне на левую сторону стойки получит сервер A. Сообщение будет передано им на другие стороны стойки. И уйдет по проводам, подключенным к этим сторонам. Таким образом сервера B и C тоже получат его. Сервер D не получит сообщения.

Если сервер А пошлет сообщение от себя, все будет работать по той же логике.

Если сообщение пошлет сервер D - его не получит никто (потому что он не связан с конкретной стороной стойки).

 

В режиме Internal, сообщение пришедшее на левую сторону стойки также получит сервер А. Сообщение будет передано всем серверам в стойке, т.е. B, C и D, но не будет передано на стороны стойки и провода, подключенные к этим сторонам. 

Если сервер А отправит сообщение, оно будет передано на все другие сервера в стойке а также на левую сторону (и подключенный к ней провод). Но не будет передано другим сторонам блока.

Если сервер D отправит сообщение - оно будет передано только другим серверам в стойке (A, B и C).

 

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

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


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

В режиме Internal, сообщение пришедшее на левую сторону стойки также получит сервер А. Сообщение будет передано всем серверам в стойке, т.е. B, C и D, но не будет передано на стороны стойки и провода, подключенные к этим сторонам. 

Если сервер А отправит сообщение, оно будет передано на все другие сервера в стойке а также на левую сторону (и подключенный к ней провод). Но не будет передано другим сторонам блока.

Если сервер D отправит сообщение - оно будет передано только другим серверам в стойке (A, B и C).

Предположим, мы имеем сеть, состоящую из серверной стойки и компьютера. Сеть подключена к серверной стойке с левой стороны. В стойке находятся сервер А, связанный с левой стороной, и не привязанный сервер D. Стойка находится в режиме Internal. В каждом сервере и компьютере установлена сетевая плата.

post-7-0-15160500-1428330026_thumb.png

Исходя из вышесказанного, получается, что пакет, отправленный компьютером, может быть принят сервером D, но пакет, отправленный сервером D не может быть принят компьютером.

Односторонняя связь получается или я что то не так понял?

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


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

Исходя из вышесказанного, получается, что пакет, отправленный компьютером, может быть принят сервером D, но пакет, отправленный сервером D не может быть принят компьютером.

Односторонняя связь получается или я что то не так понял?

 

Именно так. Сервер D может получить мессагу от компа, потому что ее редиректит внутри стойки сервер А.

А мессага от сервера D не попадет к компьютеру, потому что стоит режим Internal который отключает передачу мессаг на внешние стороны стойки.

Однако,  эту мессагу получит сервер А. С него можно будет программно переслать ее наружу (на левую сторону, к которой он привязан), в случае надобности.

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


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

Постоянно наблюдаются проблемы с мониторами если компьютеры объединены в локальную сеть. Так и норовят написать что то на чужой монитор. Что то можно сделать?

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


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

Постоянно наблюдаются проблемы с мониторами если компьютеры объединены в локальную сеть. Так и норовят написать что то на чужой монитор. Что то можно сделать?

 

Поставить между компьютерами свитч (если нужно сохранить сетевые пакеты).

Или дистрибутор (если нужно распределить только энергию, а сетевые пакеты не нужны)

 

Возможно адрес отправителя в эвенте сменится на адрес свитча, при прохождении через него.

Если этого не нужно, можно поробовать либо отправлять настоящий адрес в теле пакета,

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

Для этого используется функция gpu.bind(address):

local com = require('component')
local gpu = com.gpu

-- связываем с видеокартой компьютера нужный монитор
gpu.bind('xxx-xxx-....-xxxx')
Изменено пользователем Totoro

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


Ссылка на сообщение
Поделиться на других сайтах
-- связываем с видеокартой компьютера нужный монитор
gpu.bind('xxx-xxx-....-xxxx')

Можно ли одним нажатием получить в буфер обмена адрес карты или вбивать посимвольно нужно?

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


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

врядле.

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


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

Можно ли одним нажатием получить в буфер обмена адрес карты или вбивать посимвольно нужно?

component.get(partOfAddress) -- Часть адреса компонента.

Возвращает полный адрес.

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


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

Да, get возвращает адрес своей платы. А если мне нужен адрес сетевухи другого компьютера?

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


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

Да, get возвращает адрес своей платы. А если мне нужен адрес сетевухи другого компьютера?

я же говорю врядле,я когда сеть разрабатывал на листик записывал. :smile89:

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


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

Можно ли одним нажатием получить в буфер обмена адрес карты или вбивать посимвольно нужно?

 

Адрес карты?

Получаешь его на экран сначала.

Например через интерпретатор lua в консоли:

=component.gpu.address

или

=component.modem.address 

Затем берешь анализатор и Shift+ПКМ по нужной строчке.

Вставить в текст потом - просто ПКМ анализатором.

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

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


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

Начал перевод мануала (книжечки из новых версий OpenComputers).
В данный момент переведено около 

100%

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


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

Не уверен, что я открыл Нептун, но наверняка многие не в курсе что навигатор в ОС не ограничивается размером скрафченной карты 128 на 128 блоков относительно  ее сеточной привязки и рендера.  Этот вопрос только недавно вроде муссировался на форуме, что мол гемОрно перекрафчивать навигатор, если робот выходит в другую зону и прочее, нельзя ли сделать как-то побольше out of range и т.п.

 

Я, если честно, сам не знал, хотя думал, что ваниль всю знаю.  Крафтите и рендерите карту, потом кладете ее в крафтерный столик по центру  и обкладываете ее 8-ю кусочками бумаги. Вуаля. Карта стала меньшего масштаба и уже имеет размер 256 на 256 :)

 

Вот вырезка из Советской энциклопедии:

 

pMNedaz.png

 

Максимальный размер карты - 2048 на 2048.  Роботу такой территории хватит на всю жизнь, там работать кататься и прочее.

Не нужно теперь пересчитывать коры свои без конца типа robot.forward()  x_current=x_current + 1 и прочая лабудень.

 

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

 

Но тоже в своих координатах API  sides:

Север:    north - 2

Восток:   east - 5

Юг:          south - 3

Запад:     west - 4

 

Вот набросал пример использования:

-- =============  Получение реальных кор роботом в майне  =================

local com = require('component')
local nav = com.navigation

-- преобразование направления в ванила-директы  1-запад, 2-север, 3-восток, 0-юг
face_normalize = {0,2,0,1,3,0}

--поправка на реальные координаты майна, для каждой карты (навигатора) они свои!!!
--чтобы их узнать, установите их сначала в 0 и сравните реальные координаты робота, как блока по F3 с относительными.

local  x_shift = 1536
local  z_shift = 1920

-- пример получения роботом своих реальных координат в мире!!!!! (в пределах навигатора и масштаба карты)
getPos = {	
	x = function() x,_,_,_ = nav.getPosition() 
	        if x then 
			return math.floor(x) + x_shift 
			else return nil
		end 
	end,
	y = function() _,y,_,_ = nav.getPosition() 
	        if y then 
			return math.floor(y) 
			else return nil
		end 
	end,
	z = function() _,_,z,_ = nav.getPosition() 
		if z then 
			return math.floor(z) + z_shift 
			else return nil
		end 
	end,
	f = function() f = face_normalize[nav.getFacing()] return f end
}

x_real = getPos.x()

y_real = getPos.y()

z_real = getPos.z()

f_real = getPos.f()

 

 

Выход: 1234   56   1236    0

 

 

Теперь с картой 2048 на 2048 ваш робот, по идее, может получить всегда свои реальные координаты, где бы он там не летал. Не нужно, как в древних черепашках, там считать свои коры, плюсовать что-то и писать в файл.

Получил реальные, получил таргет-коры, разницу выполнил бросок, и все, вперед, поехал на них по вашей функции, например: setPos(x_target,y_target,z_target,f_target)

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


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

На сервере - война с применением роботов... МТ заброшен, Фингер пропал... OpenComputers выпустил большой патч, но всем не до этого...

 

 

 

Добавлено:

  • APU - гибридный процессор с интегрированной видеокартой. Ограничен по стоимости, но зато освобождает слот видеокарты.
  • Метод в отладочную карту, который позволяет получить список игроков онлайн, и список существующих измерений.
  • Блоки теперь совместимы с AE2 пространственной системой (spatial system).
  • Медленное ломание блока для роботов и дронов.

Изменено:

  • Функциональность драйвера для контроллера AE2, теперь всегда доступна в интерфейсах. Даже если включены каналы (channels). Понятия не имею, что за каналы - это надо у AE2филов спросить. =)
  • Порт при полученни сообщения от ComputerCraft теперь будет передаваться в конце, а не в начале. (Это позволит обрабатывать сообщения от CC так же как и от OC. Унификация.)
  • Удален рецепт камня края и добавлен фейковый камень края вместо него, а также рецепты дронов согласованы с OreDictionary. Возможно фикс какого-то дюпа, связанного с камнем края, или что-то вроде того.
  • Планшеты отстаются включенными при переходе в другое измерение (например если отправиться в Ад с планшетом).
  • Нативные библиотеки обновлены до Lua 5.2.4. Сангар тестировал их как только мог, но если вы все таки найдете глюк, связанный с выполнением программ, или возобновлением работы компьютеров в загруженном чанке - чайте ему знать.

Пофикшено:

  • Отключение проверки на максимальное количество фигур в 3d-принтах, после изготовления одного. Алексу на заметку. =)
  • Двойной рендер предмета в руке у робота.
  • GUI у сломанного монитора не закрывался.
  • Потенциальный лаг, при включении компьютера первый раз после загрузки игры.
  • Апгрейды на высоту полета не работали, если вмонтировать внутрь робота. (Работали только в контейнере для апгрейда).
  • Проблемы интеграции с ComputerCraft.
  • Проблемы с шиной экспорта AE2. 
  • MFR Safari Net конвертер (то есть добавлена информация в дескриптор стека предметов).
  • Shift+Клик чем-нибудь по базе данных (видимо имеется ввиду апгрейд) заполнял все пустые ячейки этим предметом.

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


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

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

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

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

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

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

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

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

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


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