Перейти к публикации
Форум - ComputerCraft
artem211

Сетевой монитор для геокопателя

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

Итак граждане. Последний стабильный билд геокопалки меня радует, находится сейчас на тестировании, багов пока не обнаружено. Пришло время для нового этапа(с которого по уму следовало бы начинать!) - создание сетевых функций, для вайфы и наверно параллельно для линки тоже.

 

Задача минимум - стабильная передача статов робота по запросу: координаты, основные состояния(топливо, инструмент, процент выполнения текущей задачи).

 

Программа максимум: Автоматизированный сетевой обмен робота со станцией, передача вышеперечисленных величин, возможность "нажать красную кнопку"(остановить робота и вернуть на базу), графическое приложение для планшета(в том числе 2д макет выполняемой задачи, например отрисовка слоя(этажа) руд, в которых оперирует робот, его положение на этой "схемокарте", указание последовательности пути(для анализа)), графическое приложение для рабочей станции(комп с голографическим проектором), функции схожи с планшетной версией, но в 3д, возможность дистанционного управления(указать новое место и запустить нужную программу).

 

На данный момент в сетевых технологиях ОС я довольно таки нуб. Но что успел понять, если робот что то делает(именно робот, аки robot.forward()), то прервать(безопасно) его действие с помощью эвента получения сообщений и не сбить при этом весь алгоритм/функцию(а они у меня многоэтажные) не получится. Нужно действовать апосредованно, не трогая функции использующие пространство имен "robot", тоесть поменять какую то глобальную переменную, проверив которую робот задействует новые алгоритмы. Так ли это? или же существует возможность вмешаться безопасным образом?

  • Like 2

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


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

запускай код в отдельной среде(load(code, _, _, среда))

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


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

запускай код в отдельной среде(load(code, _, _, среда))

поясни мысль подробнее

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


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

тьфу. А чем тебе event.listen не нравится? Он безопасно останавливает(запускает функцию)

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


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

тьфу. А чем тебе event.listen не нравится? Он безопасно останавливает(запускает функцию)

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

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


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

а ты засунь запись координат в саму функцию движения

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


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

а ты засунь запись координат в саму функцию движения

не считай себя умнее других. Эта функция с равным успехом прерывается и посередине выполнения

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

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


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

    В твоём случае, как-раз и надо - "действовать опосредованно". Писать дополнительную функцию "обработчика прерываний"{далее просто Обработчик}, которая периодически должна запускаться и проверять : " А что там Хозяин соизволили молвить ?". 

    Твоя программа, насколько большая, что тебе уже надо - параллелить вычисления. Кусок одного кода обработал, запустил - другой, третий ... и т.д. (Как у Билла Гейтса - с его первой Виндой :giggle: ). И после окончания работы каждого куска кода, должен "вылазить" Обработчик, проверять "желания клиента" и в зависимости от результата - или "уползать обратно в нору", запуская далее основной поток или же прерывать выполнение программы и "исполнять пожелание" аки Джин. :D

   По-сути, это уже будет - маленький Диспечер задач.

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

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


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

    В твоём случае, как-раз и надо - "действовать опосредованно". Писать дополнительную функцию "обработчика прерываний"{далее просто Обработчик}, которая периодически должна запускаться и проверять : " А что там Хозяин соизволили молвить ?". 

    Твоя программа, насколько большая, что тебе уже надо - параллелить вычисления. Кусок одного кода обработал, запустил - другой, третий ... и т.д. (Как у Билла Гейтса - с его первой Виндой :giggle: ). И после окончания работы каждого куска кода, должен "вылазить" Обработчик, проверять "желания клиента" и в зависимости от результата - или "уползать обратно в нору", запуская далее основной поток или же прерывать выполнение программы и "исполнять пожелание" аки Джин. :D

   По-сути, это уже будет - маленький Диспечер задач.

Спс, так и думал. Ну чтож, будем писать

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


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×