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

Totoro

Гуру
  • Публикации

    1 950
  • Зарегистрирован

  • Посещение

  • Победитель дней

    289

Сообщения, опубликованные пользователем Totoro


  1. Так.

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

    Я немного покопался в исходном коде, и нашел один занятный баг.

    Оказывается, каждый раз, когда кто-то отключался от сервера, со всех каналов, на которые он был подписан, дропались все подписчики.

     

    Я этот баг исправил, и накатил новую версию (0.2.1) на сервер.

    Кроме того коммиты с фиксами доступны в репозитории, если кто-то держит локальную копию stem'а.

     

    Приглашаю всех, у кого наблюдались косяки со связью, повторно протестировать и отписаться.

    • Спасибо 1

  2. 7 часов назад, anton3312578859 сказал:

    Так возможно ли сделать папку proc?

    Если ты пишешь свою ОС - ты пишешь и свой API к файловым системам.

    Ничего не мешает тебе сделать сколько угодно и каких угодно виртуальных ФС, или папок, или файлов.

     

    Для примера - тут где-то валялась программа, которая позволяла объединять жесткие диски в один, с тем чтобы обойти лимит на максимальный размер диска, и иметь возможность работать с файлами по 4+ мегабайт. Она как раз создает виртуальную ФС над стандартной.

    В реальности файл разбит на множество частей - а программы которые с ним работают этого не замечают.

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

     

    Короче не вижу препятствий.


  3. С небольшим запозданием, но я таки обновил сервер снова, и исправил все баги.

     

    Итак, теперь сервер постоянно обменивается с клиентами пингами. Это позволяет поддерживать соединение "в тонусе" и не давать ему отвалиться, как на TCP подключениях, так и на веб-клиенте.

    Для теста я держал соединение между веб-клиентом и программкой в эмуляторе OC открытым примерно два часа. Ничего не сломалось.

     

    Кроме того я добавил больше контроля над состоянием соединения.

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

    В библиотеке для OpenOS добавились новые методы:

     

    server:ping(content[, timeout]), boolean - позволяет послать серверу Stem пинг. В качестве контента указываете любой кусок данных. Сервер должен будет его вернуть в точности чтобы подтвердить пинг. Метод блокирующий, ждет ответа от сервера вплоть до таймаута (который по дефолту 5 секунд). Возвращает true или false.

     

    server:isConnected(): boolean, error - проверка того, установлено ли подключение к серверу Stem. Если установлено, вернет true. Если не установлено - вернет nil и сообщение об ошибке.

     

    server:reconnect(): server, error - если что, этой командой можно переподключиться к серверу. Вернет ссылку на самого себя (объект server) в случае успеха. В случае ошибки, как водится, nil и строку с сообщением об ошибке.

     

    Подробный список команд можно полистать тут.

    Установить новую версию библиотеки можно по прежнему из Hel:

    hpm install stem

    Если библиотека уже была устанвлена, можно только обновить:

    hpm upgrade stem

    Если вы не пользуетесь Hel, то качайте по прямой ссылке:

    wget https://gitlab.com/UnicornFreedom/stem/raw/master/stem.lua

    • Нравится 4
    • Спасибо 2

  4. 6 минут назад, Alex сказал:

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

    Угу, проблема есть.

    Но я знаю как это поправить, во всяком случае для веба. Сейчас нафигачу пинг-пакеты и буду их слать каждые N секунд или минут.
    Вечером будет фикс.


  5. ВНИМАНИЕ!!! ОБНОВЛЕНИЕ.

     

     

    Сервер STEM ночью был обновлен и перезагружен, всё что было к нему подключено - отключилось.

     

    Что нового?
    Новая веб-страничка. Теперь там появился веб-клиент. Мы можете подключиться к любому каналу и почитать, что там пишут. И даже написать самому.

    Конечно свободы там меньше чем если работать через OC напрямую - послать любые данные не получится, только UTF-8 текст. Но зато не надо писать код, а можно просто с сайтика всё отправлять.

    Кроме того, я отрефакторил внутреннюю структуру сервера, поменялось довольно много кода.

     

    Всё пока еще сырое, активное тестирование и сообщение о багах приветствуется.

    В ближайшие несколько дней буду фиксить баги и добавлять остальные обещаные плюшки, типа ping пакета.

     

    Скрытый текст

    l7IaR5e.png

     

    • Нравится 6

  6. Только что, Alex сказал:

    @Totoro а может это фишечка оски? Не может она по таймауту сама закрывать коннекты?

    Тоже такая идея в голову пришла.

    Но интересно, что закрывается только одна сессия - приемник. А вторая живет.


  7. @Alex буду смотреть, что там такое. Надо понять кто именно убивает соединение - OC, Stem или ещё кто-то.

    Если окажется, что соединение гасится по бездействию Явой или OpenComputers - придется делать какой-то периодический пинг, чтобы поддерживать контакт.


  8. 14 минуты назад, Alex сказал:

    По истечении этого времени канал сдох, о чем сообщила мониторилка сервера и известила, что активных каналов 0.

    По идее, это означает, что сдох коннект от того компа, который был подписан на канал. Приемник-то есть.

    Канал считается сдохшим, если на него никто не подписан.


  9. 3 минуты назад, Alex сказал:

    @Totoro всё работает. Даже не знаю, в чем проблема была. Поставил имя канала "test" - все заработало:)

    Может быть оно некорректно обрабатывает какие-нибудь символы в названии канала. Если что-то такое появится - пиши.


  10. 4 минуты назад, Alex сказал:

    Это и радостно и печально одновременно. А почему у меня не работает?) Может точно нужно было выключить и снова включить. А может я комп не так скрафтил. Хотя всё есть, ось установил, карту запихал, нетворк проинсталлил, питание есть. Что не так-то? Что ему нужно?:)

    А ххрен его знает, что ему нужно.

    Надо как-то дебажить. Ты откуда подключаешься? С домашнего компа или с сервера? Там в сетью все нормально на этом компе?

    Файрвол какой-нибудь не озорует?

     

    UPD: ID канала точно совпадает на приемнике и передатчике?

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

    Сейчас она показывает 1 канал и две сессии. Это канал test который я использую и мои два компьютера.

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


  11. @Alex только что протестировал работу в майнкрафте.

    Скопировал твои проги для приема-передачи, только заменил канал на test и сервер на stem.fomalhaut.me.

    Всё работает нормально.

    Скрытый текст

    1XNOTyS.png

     

    Единственный глюк который нашел - это если закрыть приложение-приемник на Ctrl + Alt + C, то OpenComputers не закрывает корректно соединение. После четырех раз соединения забиваются и надо рестартнуть компьютер.

    Но это как бы ситуация внештатная, и по хорошему надо закрывать соединение в конце выполнения программы, при помощи server:disconnect().

     


  12. Меня тут товарищ @BrightYC пихает в чате уже месяца два, чтобы я фичи обещаные запилил :D
    Мотивация появилась, пилю понемногу. Получается не быстро, т.к. времени мало, и Rust у меня заржавел и запылился. Но надеюсь доведу до версии 0.2.0.

    • Спасибо 1

  13. Только что, Alex сказал:

    ага, круто! а обратная связь будет в этом "чатике"? То есть если мне робот ответил в канал, сообщение прилетит? Или только отправка?

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

    Кстати, можно будет и свои веб-клиенты делать, наверное. То есть стучать на web-socket Стема с каких-то своих сайтиков.

    Или не клиенты, а типа виджеты делать, выводить в реальном времени какую-нибудь инфу с роботов.


  14. Только что, Alex сказал:

    а как ты хочешь это реализовать? Какой-то просто инпут, в который можно ввести канал и сообщение? Или будет регистрация и вход в каналы и прочее? Это же сложно все наверно?

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

     

    1 минуту назад, Alex сказал:

    И кстати, так и не понятно пока, почему сообщения не доходят в майне? Или уже все норм?

    А это я в процессе дебага пока. Вчера успел только в эмуляторе погонять, потом меня отвлекли.
    В эмуляторе вроде отправляет все.
    Сегодня домой приду - зафигачу в креативе тестовый мир и буду там тестировать.

    • Нравится 1

  15. 2 минуты назад, Alex сказал:

    А уже чатики, логи и прочее можно на доп страничках каких-то выводить и принтить

    Я думал немного потеснить инфу на главной странице и сделать там поцентру или снизу окно для ввода ID канала, и рядом кнопку "Join".
    А вот когда уже тыкаешь кнопку - попадаешь на отдельную страницу, где "чатик" занимает все пространство, а логотип сдвинут в навбар.


  16. @Alex во, спасибо.
    Я сейчас работаю над веб-клиентом для стема, собираюсь как раз поменять дизайн странички немного.

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


  17. 15 часов назад, Alex сказал:

    Это происходит, если 4 раза подряд подключиться ресивером. (код выше) На пятый запуск ошибка. У оски какие-то ограничения есть на кол-во тсp подключений?

    Да, там в конфиге мода есть флажок:

    maxTcpConnections: 4

    Чтобы сбросить все подписки и подключения, нужно сделать

    server:disconnect()

    Это закроет сокет и сотрет все подписки.

    Команда unsubscribe никак не влияет на сокет (подключение), она только убирает одну подписку.

     

    Я добавлю проверку количества подключений в клиентскую библиотеку, чтобы не происходило повторных подключений.

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

    Или сделать чтобы команда unsubscribe() отписывала от всех каналов, если вызвать её с пустыми скобками.

    • Нравится 1
×
×
  • Создать...