2011-03-11 4 views
2

나는 USB 스틱에서 정보를 읽고 그것을 내뱉는 .NET 콘솔 앱을 가지고있다. 나는 그것을 듣고 정보를 처리하는 AIR 앱을 가지고있다.AIR와 .NET 콘솔 앱간에 메시지를 보내고받는 가장 좋은 방법은 무엇입니까?

내 문제는 로그가 .net 콘솔 앱에서 전송되었다고 표시하는 경우에도 때때로 내 Air 앱이 일부 메시지를 처리하지 않는 것입니다.

여기 내가하고있는 일이 있습니다.

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

.NET 나는 정보를 뱉어 다른 청취자의 무리가 있습니다. 나는 가치들을 분리하는 쉼표로 그들을 보내고있다. 난 그냥 두 줄 (즉,도 일어날 수 있습니까?)

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; 

     } 

다음은 공기 측에서 한 번에 포착 된 경우 나 배열 침을 것입니다 있는지 확인하기 위해 마지막에 쉼표를 추가 프로세스 콘솔 데이터 함수는 tempArray [0]에 대해 서로 다른 값을 가진 구문이있는 경우 약 25 개의 코드로 계속 처리됩니다 (예 : '올바른'일은 case 문을 사용하는 것으로 알고 있지만 else ifs와는 다릅니다.).

데이터가 매우 빠르게 응용 프로그램에 제공됩니다. 때로는 100ms 또는 그 이하 일 수도 있습니다 (벤치 마크를 수행하지 않았습니다). 경우에 따라 에어 앱이 보낸 데이터를 처리하지 못합니다. 왜 그런지 모르며 디버깅하기가 어렵습니다.

누구든지 .NET에서 AIR 로의 메시지 충실도를 유지하는 더 좋은 방법이 있습니까? 어쩌면 누군가 내 논리에서 구멍을 볼 수 있을까요?

감사합니다.

는 -Nate

+0

메시지가 stdout을 통해 전송됩니까? 완전히 잃어버린 경우 AIR 측에서 버그가 발생해야합니다. 그들이 단지 지연되면, 나는 stdout 플러시 생각했다. 아니면 일부 메시지가 stderr를 통과하고 있습니까? – alxx

+0

그들은 통과하고 있습니다, 그것은 공기 측면에있는 나의 IF 진술 일 뿐이에요. 나는 그들이 한 줄로 나오고 두 줄로 나뉘어 진 줄을 추측하고 있습니다. – Nate

답변

0

어떤 방법을 사용합니까? 로컬 네트워크를 통해 두 개의 앱을 연결할 수 있지만 더 간단한 방법이 있습니다. AIR은 콘솔 응용 프로그램 자체를 NativeProcess과 함께 실행하고 stdin | stdout을 통해 통신 할 수 있습니다. 이렇게하면 콘솔 응용 프로그램에서 AIR 응용 프로그램의 하위 프로세스가됩니다 (AIR는이 방법으로 콘솔 응용 프로그램에 연결할 수 없습니다).

+0

Native Process를 사용하고 있습니다. 이것은 내가 메시지의 일부를 집어 들고 있지 않은 곳이다. – Nate

0

요, 우리가 공기의 요청을 수신하는 C#을 응용 프로그램 내에서 HTTP Listener에 사용이 답변 :

을위한 좋은 일을 기대합니다. C# HttpListener (로컬 서버처럼 실행되는 C# 응용 프로그램)는 localhost의 특정 포트에서 수신하도록 설정되며, Air 응용 프로그램은 HTTPService를 사용하여 요청을이 포트로 보냅니다. 응답은 JSON으로 인코딩되었고 우리는 flex 끝에서 JSON 디코딩을 위해 as3CoreLib을 사용했습니다 (그러나 XML을 쉽게 사용할 수 있습니다). C# 끝은 텍스트로 일부 매개 변수를 수신했습니다. 메소드/클래스 이름과 인수였습니다. 전달 된 문자열 매개 변수를 기반으로 필요한 함수를 호출하기 위해 C#의 Reflection을 사용했습니다.

+0

왜 네이티브 프로세스를 사용하지 않았습니까? – Nate

+0

@Nate : nativeProcess가없는 AIR의 이전 버전을 사용하고있었습니다. – Ryan

1

나는 동일한 문제를 안고 있었는데, 그 대답은 Console.WriteLine을 통해 응답이 Air로 매우 빨리 보내 졌을 때 두 개 이상의 답이 쓰여질 수 있습니다. 메서드 "ProcessConsoleData"는 입력 문자열을 "\ r \ n"으로 나눠서 추가로 정제해야합니다. 그 분리 후에 당신은 이미 개인적인 반응을 가지고 있습니다.

관련 문제