Лучший способ отправлять / получать сообщения между AIR и консольным приложением .NET? - PullRequest
2 голосов
/ 11 марта 2011

У меня есть консольное приложение .NET, которое считывает информацию с USB-накопителя и выплевывает ее.У меня есть приложение AIR, которое прослушивает его и обрабатывает информацию.

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

Вот что я делаю.

.NET

   Trace.WriteLine("heart," & heartRate & "," & GetTimeStamp() & ",")

У меня есть куча разных слушателей, которые плюютвне информации.Я просто отправляю их через запятые, разделяющие значения.Я добавил запятую в конце, чтобы убедиться, что я выплюну массив, если две воздушные линии будут подняты одновременно (может ли это даже произойти?)

AIR

public function ProcessConsoleData(data:String):void{
        var tempArray:Array = data.split(",");
        var pointUpdated:Boolean = false;

        if (tempArray[0] == ("heart")){
            if (_dataModel.DeviceHeartRate.IsDeviceAvailable != true){
                _dataModel.DeviceHeartRate.IsDeviceAvailable = true;
            }

            _dataModel.DeviceHeartRate.HeartRate = int(tempArray[1]);
            _dataModel.DeviceHeartRate.LastUpdate = tempArray[2] as Date;

        }

Функция данных консоли процесса продолжается примерно так же, как и около 25, если значения с различными значениями для tempArray [0] (Да, я знаю, что «правильное» решение - использовать оператор case, но мне нравится это сеще, если).

Данные поступают в приложение довольно быстро.Иногда всего 100 мс, а может и меньше (не делали никаких тестов).Иногда эфирное приложение не обрабатывает отправленные данные.Я не знаю почему, и это трудно отладить.

У кого-нибудь есть лучший способ сохранить точность сообщений от .NET к AIR?Может быть, кто-то может увидеть дыру в моей логике?

Спасибо.

-Nate

Ответы [ 3 ]

1 голос
/ 06 июня 2012

У меня была та же проблема, и что происходит, когда ответы отправляются в Air очень быстро через Console.WriteLine, может случиться так, что два или более ответов будут написаны.Ваш метод "ProcessConsoleData" должен быть уточнен, например, путем разделения "\ r \ n" входной строки.После этого разделения у вас уже есть индивидуальные ответы.

0 голосов
/ 11 марта 2011

Какой метод вы используете? Два приложения могут быть связаны через локальную сеть, но есть более простой способ. AIR может запускать консольное приложение с помощью NativeProcess и связываться с ним через stdin | stdout. Это делает консольное приложение дочерним процессом приложения AIR (AIR не может подключиться к запущенному консольному приложению таким образом).

0 голосов
/ 11 марта 2011

Йо, я ожидаю хорошего +1 за этот ответ:)

Мы использовали HttpListener из приложения C # для прослушивания запросов Air. C # HttpListener (приложение c # запускается как локальный сервер) настроено на прослушивание определенного порта на локальном хосте, а приложение Air использует HTTPService для отправки запросов на этот порт. Ответы были закодированы в JSON, и мы использовали as3CoreLib для декодирования JSON на гибком конце (но вы могли легко использовать XML). Конец c # только что получил некоторые параметры в виде текста, это были имя метода / класса и аргументы. Использовал Reflection в C # для вызова необходимой функции на основе переданных строковых параметров.

...