LeKaitoW / raox

Rao modelling language written in Xbase
http://raox.ru
MIT License
12 stars 26 forks source link

Тонкий клиент #154

Open aurusov opened 9 years ago

aurusov commented 9 years ago

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

Следующий левел, с понижением приоритета

aurusov commented 8 years ago

@k-alexandrovsky Помнишь, ты показывал работу с эклипсом через браузер ? Но там нужна была старая версия swt или еще какой-то либы. Подскажи где посмотреть и есть ли возможность запустить текущее РДО на этой базе ?

aurusov commented 8 years ago

Кажется, что надо встраивать сервер прямо в РДО. Это позволит во время прогона по сокету отдавать анимацию, трассировку и графики. В Эклипсе для этого есть инструментарий.

k-alexandrovsky commented 8 years ago

Мне кажется, что интерфейс придётся делать самим, запускать в качестве сервера jetty, а там уже любой фреймворк, либо spring, либо gwt. Анимация вроде более-менее абстрагирована, так что html5 canvas нарисует не хуже swt. Естественно, все будет на ajax'e. А редактор можно встроить их родной - http://www.eclipse.org/Xtext/documentation/330_web_support.html

aurusov commented 8 years ago

Не понял про spring/gwt.

k-alexandrovsky commented 8 years ago

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

Эклипс вроде как не дает полноценную IDE в браузере. У них было это в качестве эксперимента несколько лет назад, но загнулось (видимо, за ненадобностью). Из современного я нашел вот такое - https://www.eclipse.org/che/technology/, но оно скорее всего еще очень сырое, плюс икстекст с ним вряд ли сам подружится.

Мне самый безболезненный вариант видится таким - в эклипсе на удаленном компьютере запускается сервер (составляющий вместе с эклипсом бэкэнд), который управляет прогоном, и отдает актуальную информацию на фронтэнд. Там уже рисуются джаваскриптом графики, им же анимация (SWTAnimationContext превращается в какой-нибудь JavascriptCallbackAnimationContext). А в качестве редактора моделей прикручивается Orion. Это не будет полноценная IDE для всего на свете, какой является эклипс, но возможности РДО ей покрыть можно, мне кажется.

aurusov commented 8 years ago

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

Тут понятно, согласен

Там уже рисуются джаваскриптом графики, им же анимация (SWTAnimationContext превращается в какой-нибудь JavascriptCallbackAnimationContext).

Что значит там же ? Понятно, что надо попросить анимацию генерить команды отрисоки для клиента. Но рисоваться они должны же на клиенте. Что-то не понимаю твою мысль.

А в качестве редактора моделей прикручивается Orion. Это не будет полноценная IDE для всего на свете, какой является эклипс, но возможности РДО ей покрыть можно, мне кажется.

Редактор не нужен. Пока просто запуск + состояние прогона + анимация.

k-alexandrovsky commented 8 years ago

Что значит там же ? Понятно, что надо попросить анимацию генерить команды отрисоки для клиента. Но рисоваться они должны же на клиенте. Что-то не понимаю твою мысль.

Я не знаю, как на текущий момент устроены результаты с точки зрения архитектуры, но с анимацией можно сделать следующим образом -- какой-нибудь BackendAnimationContext вместо отрисовки фрейма переводит его в сериализованный вид (JSON/BSON/что-угодно) и начинает его хранить, чтобы потом отдать на клиент. Клиент, соответственно, рисует. Можно делать не полный фрейм каждый раз, а вычислять диффы на сервере и отдавать их. Если сервер мощный, то замедления не будет, а применять дифф дешево.

То есть идея такая, нужен еще один уровень абстракции:

RAO Frame (xbase) => Сцена (примитивы) => Отрисовка или сериализация (т.е. текущие контексты)
aurusov commented 8 years ago

Да, именно так и я себе представляю. Когда ты начал говорить непонятные слова, думал у тебя есть готовый стек технологий для этого. Велосипедить не хочется.

aurusov commented 7 years ago
  1. На базе Jetty поднять сервер, не связывая его с raox. Настроить nginx в качестве прокси. Разработать ручку ping, добиться ответа. Пример простейшего сервера.
  2. Добавить ручку currentTime, которая будет возвращать константу 12345.
  3. Связать сервер с raox, чтобы сервер возвращал текущее модельное время или фразу сервер недоступен.
aurusov commented 7 years ago

@bogachev-pa Паша, где в коде место, которое отрабатывает один после загрузки Эклипса с РДО ? Нужно дописать код в момент запуска и выгрузки Эклипса.

bogachev-pa commented 7 years ago

@aurusov

https://github.com/aurusov/raox/blob/release/current/ru.bmstu.rk9.rao.ui/src/ru/bmstu/rk9/rao/ui/RaoActivatorExtension.java#L45

aurusov commented 7 years ago

Добавить javasript, который сам ходит за /currentTime и выводит на экран через html.