2011-03-11 27 views
2

我有一個.NET控制檯應用程序,它從USB棒上讀取信息並吐出。我有一個監聽它並處理信息的AIR應用程序。在AIR和.NET控制檯應用程序之間發送/接收消息的最佳方式?

我的問題是,有時我的空氣應用程序似乎沒有處理一些消息,即使日誌顯示它們是從.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 else一樣,如果具有不同值的tempArray [0](是的,我知道'正確'的事情是使用case語句,但我喜歡它與其他ifs)。

數據以相當快的速度進入應用程序。有時候只有100ms或者更少(沒有做任何基準測試)。有時空中應用程序不會處理髮送的數據。我不知道爲什麼,也很難調試。

有沒有人有更好的方法來保持從.NET到AIR的消息保真度?也許有人可以在我的邏輯中看到一個漏洞?

謝謝。

-Nate

+0

消息通過標準輸出發送?如果完全丟失,它必須是AIR方面的錯誤。如果他們只是推遲了,我會想到標準沖洗。或者有些消息正在經歷stderr? – alxx 2011-03-11 08:02:39

+0

他們正在通過,這只是我在空氣方面的IF聲明有時並不接受。我猜他們是通過一條線而不是兩條分開的線路來完成的。 – Nate 2011-03-11 21:03:51

回答

0

您使用哪種方法?兩個應用程序可以通過本地網絡連接,但方式更簡單。 AIR可以運行控制檯應用程序本身NativeProcess並通過stdin | stdout與它通信。這使AIR應用程序的控制檯應用程序子進程(AIR無法以此方式連接到正在運行的控制檯應用程序)。

+0

我正在使用Native Process。這是我沒有收到一些消息的地方。 – Nate 2011-03-11 16:44:21

0

呦,我期待這個答案:)

一個不錯的+1我們使用HttpListener從C#應用程序中收聽空中請求。 C#HttpListener(c#應用程序像本地服務器一樣運行)設置爲偵聽本地主機上的特定端口,Air應用程序使用HTTPService向此端口發送請求。響應以JSON編碼,我們在flex端使用as3CoreLib進行JSON解碼(但您可以輕鬆使用XML)。 C#結束只是收到一些參數作爲文本,這些是方法/類名稱和參數。在C#中使用Reflection可以根據傳入的字符串參數調用所需的函數。

+0

你爲什麼不使用Native Process? – Nate 2011-03-11 16:45:11

+0

@Nate:我正在使用舊版本的AIR(1.5我認爲),它沒有nativeProcess – Ryan 2011-03-14 15:25:39

1

我遇到了同樣的問題,並且通過Console.WriteLine將答案發送給Air的速度非常快,它可能會出現兩個或更多個答案。您的方法「ProcessConsoleData」將不得不進一步細化,例如通過「\ r \ n」分割輸入字符串。在這之後你已經有了個人迴應。

相關問題