Разобрался тут на днях с merapi. Чудес, к моему сожалению, не оказалось. Тоже сервер, тоже сокет, тоже порт. Поэтому, два экземпляра приложений использующих Merapi Bridge, без изменения порта работать не смогут, опять же потенциальные проблемы с фаерволлами\антивирусами ну и т.д.
Никак не могу выделить время, чтобы разобраться с localConnection - всё-таки это самое красивое решение.
19 Январь 2009 г.
26 Сентябрь 2008 г.
Запуск внешнего приложения из Adobe Air и другое interconnectivity
ДА, я подозревал, что AIR-приложение не полноценно. Но я не знал, до какой степени! :). В нём нет ничего наподобии
Да всё действительно так плохо. И куча людей по всему миру ждёт решения этого вопроса.
Часть задач можно решить с помощью
Этим методом мы натравливаем браузер на локальный файл и (если браузер достаточно умный) он предложит открыть нам этот файл в дефолтном приложении(для данного типа файла) .
Но тут все минусы на лицо: захотели Вы из AIR открыть doc-овский файл (или экселевский), а он запускает браузер. Браузер,в свою очередь, открывается, думает маленько и выкидывает окошко: Тут мне вот такое файло подсунули, чо с ним делать? Сохранять или открывать штоле?.
Не очень умный вопрос, если человек только что в приложении нажимал кнопку "хочу ОТКРЫТЬ этот файл". Ну и вообще, я бы не взялся гарантировать работы всей этой схемы на разных компах. А что делать если вам надо запустить batch-скрипт? Браузер(firefox) даже вопросов не задаёт - просто открывает вкладку с текстом скрипта вместо того, чтобы попытатся его запустить. И я его (firefox) понимаю :)
В проджектированных(projector) swf-ках для этих целей (во всяком случае какое-то время назад) юзалась волшебная функция
Для взаимодействия с конкретно Java сейчас пишется некое чудо по имени Merapi. Офсайт здесь. Эти ребята хотят забить на
P.S. Как правильно заметил nuba Merapi это реинкарнация Artemis project
Есть ещё штука под названием Shu плеер.
Она оборачивает AIR-приложение в собственый загрузчик, который интегрируется c AirRuntime, т.е. на выходе вы получаете просто экзешник, которому ничего не надо, и пользователь даже не будет знать что такое AIR и его Runtime. Кроме того, он добавляет как раз тот функционал который мне был нужен, а именно: запуск внешних приложений с коллбэком по результату их выполнения.
Кроме того, есть возможность написать свою
Вот. Но! Cтоит это дело 500 баксов (или евро?). Это раз. И два. Я не смог всё это протестить (скачал бесплатную Try&Buy версию ). По каким-то там лицензионным заморочкам Shu не может включать в себя дистрибутив
Та-дам! И вот оно моё решение (почЁрпнутое из остальных прочитанных статей). Будем исопльзовать сервер приложения Т.е. пишем безоконный микросерверок слушающий какой-нить локальный порт и умеющий выполнять определенные команды. При установке приложения заменяем линк ярлыка, чтобы ярлык запускал не AIR-приложение, а наш микросерверок. Серверок запускается, проверяет всё ли в порядке, и сам уже запускает AIR-приложение. AIR-приложение, когда ему надо что-то сделать, чего оно само не может - засылает в сокет просьбу о помощи, микросерверок ловит и выполняет. Ну а дальше всё понятно. Так же можно вводить подтверждения, нотификации и т.д.
На написание серверка в C# у меня ушло полчаса, as-класса для взаимодействия - 10 минут. Плюс отладка всего этого дела в связке. В итоге время было потрачено меньше, чем на чтение статей по вопросу :)) Что даёт такое решение? Да всё! :) Хочешь юзай .NET из Air, хочешь Java, коннекться к COM-порту, форматируй финчестер :))) и т.д.
Если кому интересно могу все поделки повыкладывать .
З.Ы.
Выкладываю:
1)С# сервер
2) Пример посылки команды из AIR-приложения
shellexec или exec и т.п. И это меня категорически огорчило. Потратив 3 часа на изучение вопроса в интернете узнал следующее:navigateURL Этим методом мы натравливаем браузер на локальный файл и (если браузер достаточно умный) он предложит открыть нам этот файл в дефолтном приложении(для данного типа файла) .
Но тут все минусы на лицо: захотели Вы из AIR открыть doc-овский файл (или экселевский), а он запускает браузер. Браузер,в свою очередь, открывается, думает маленько и выкидывает окошко: Тут мне вот такое файло подсунули, чо с ним делать? Сохранять или открывать штоле?.
Не очень умный вопрос, если человек только что в приложении нажимал кнопку "хочу ОТКРЫТЬ этот файл". Ну и вообще, я бы не взялся гарантировать работы всей этой схемы на разных компах. А что делать если вам надо запустить batch-скрипт? Браузер(firefox) даже вопросов не задаёт - просто открывает вкладку с текстом скрипта вместо того, чтобы попытатся его запустить. И я его (firefox) понимаю :)
fscommand. В AIR она не работает, хотя и компилится. Проверял сам. Если я не прав и чего-то не доглядел, поправьте.swing UI и использовать AIR в качестве фронтенда приложения, а начинку оставить Java'вскую. Мне это было интересно, потому что как раз с джавой и надо было скооперироватся. Но до конца я ещё не разобрался с этой темой. Разберусь - напишу.P.S. Как правильно заметил nuba Merapi это реинкарнация Artemis project
Она оборачивает AIR-приложение в собственый загрузчик, который интегрируется c AirRuntime, т.е. на выходе вы получаете просто экзешник, которому ничего не надо, и пользователь даже не будет знать что такое AIR и его Runtime. Кроме того, он добавляет как раз тот функционал который мне был нужен, а именно: запуск внешних приложений с коллбэком по результату их выполнения.
Кроме того, есть возможность написать свою
win32 dll, функции которой будут доступны в AIR приложении. А это, по сути, уже полная свобода действий внутри операционки(виндовой правда). Вот. Но! Cтоит это дело 500 баксов (или евро?). Это раз. И два. Я не смог всё это протестить (скачал бесплатную Try&Buy версию ). По каким-то там лицензионным заморочкам Shu не может включать в себя дистрибутив
AirRuntime, поэтому, при завёртывании приложения оно как-то невнятно просит указать "путь к air runtime". Но какие бы я пути не указывал - ни один из них ему не нравился и процесс завершить не удавалось. Так я и не понял это баг или фича или лыжи не те или я...На написание серверка в C# у меня ушло полчаса, as-класса для взаимодействия - 10 минут. Плюс отладка всего этого дела в связке. В итоге время было потрачено меньше, чем на чтение статей по вопросу :)) Что даёт такое решение? Да всё! :) Хочешь юзай .NET из Air, хочешь Java, коннекться к COM-порту, форматируй финчестер :))) и т.д.
Если кому интересно могу все поделки повыкладывать .
З.Ы.
Выкладываю:
1)С# сервер
2) Пример посылки команды из AIR-приложения
socket=new Socket();
socket.connect("localhost",7777);
socket.writeUTFBytes("$run myextapp.exe;");
socket.flush();
30 Май 2008 г.
secret place
Сегодня наткнулся на такую штуку: если позарез нужен доступ к какой-нибудь переменной родительского класса, а она вдруг inaccessible [обяъвлена как mx_internal] то...не надо отчаиваться! Метод есть! И вот какой:
всё собственно. Просто добавляете в начало файла эти строчки и путь открыт.
Мне эти пассы руками понадобились в такой ситуации - отнаследовал я свой класс от DataGridColumn'а и внутри него решил дотянуться до источника данных. Самый простой, на мой взгляд, метод был таким: DataGridColumn.owner.dataProvider. Но компилятор ругался: inaccessible var owner. При этом, в дебаггере, среди член-данных моего класса я видел переменную owner, она была класса DataGrid, вобщем как раз то что надо. Полез в код DataGridColumn - так owner объявлен с неким префиксом mx_internal. Стало очень интересно: как же так, дебаггеру можно, а мне нельзя. И что это за непонятный префикс. Ну и в итоге google выдал рецепт - вот эти самые две волшебные строчки. Я был несколько удивлён. Зато получилось. :)
import mx.core.mx_internal;
use namespace mx_internal;
всё собственно. Просто добавляете в начало файла эти строчки и путь открыт.
Мне эти пассы руками понадобились в такой ситуации - отнаследовал я свой класс от DataGridColumn'а и внутри него решил дотянуться до источника данных. Самый простой, на мой взгляд, метод был таким: DataGridColumn.owner.dataProvider. Но компилятор ругался: inaccessible var owner. При этом, в дебаггере, среди член-данных моего класса я видел переменную owner, она была класса DataGrid, вобщем как раз то что надо. Полез в код DataGridColumn - так owner объявлен с неким префиксом mx_internal. Стало очень интересно: как же так, дебаггеру можно, а мне нельзя. И что это за непонятный префикс. Ну и в итоге google выдал рецепт - вот эти самые две волшебные строчки. Я был несколько удивлён. Зато получилось. :)
Подписаться на:
Сообщения (Atom)