在AIR和.NET控制台应用程序之间发送/接收消息的最佳方式?

时间:2011-03-11 04:34:17

标签: .net flex air

我有一个.NET控制台应用程序,它从USB记忆棒中读取信息并将其吐出。我有一个AIR应用程序,可以监听它并处理信息。

我的问题是,即使日志显示它们是从.net控制台应用程序发送的,有时我的air应用程序似乎也不会处理某些消息。

这就是我正在做的事情。

.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;

        }

如果对于tempArray [0]具有不同值的语句,那么进程控制台数据函数会继续使用大约25个其他语句(是的我知道“正确”的事情是使用case语句但我喜欢使用else ifs)。

数据来自应用程序非常快。有时只需100毫秒或更短(没有做任何基准测试)。有时候,空中应用程序不会处理发送的数据。我不知道为什么,也很难调试。

有没有人有更好的方法来保持从.NET到AIR的消息保真度?也许有人可以在我的逻辑中看到一个漏洞?

感谢。

-Nate

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,而且当问题很快发送到Air时,通过Console.WriteLine,可能会发生两个或更多的答案。您的方法“ProcessConsoleData”将不得不进一步细化,例如通过“\ r \ n”输入字符串拆分。在分割之后,您已经有了个人回复。

答案 1 :(得分:0)

哟,我希望这个答案有一个不错的+1:)

我们在C#应用程序中使用了HttpListener来侦听Air请求。 C#HttpListener(c#app像本地服务器一样运行)设置为侦听localhost上的特定端口,Air应用程序使用HTTPService将请求发送到此端口。响应以JSON编码,我们在flex端使用as3CoreLib进行JSON解码(但您可以轻松使用XML)。 c#end刚收到一些参数作为文本,这些是方法/类名和参数。在C#中使用Reflection根据传入的字符串参数调用所需的函数。

答案 2 :(得分:0)

您使用哪种方法?两个应用程序可以通过本地网络连接,但有更简单的方法。 AIR可以使用NativeProcess运行控制台应用程序本身,并通过stdin | stdout与之通信。这使得AIR应用程序的控制台应用程序子进程(AIR无法以这种方式连接到正在运行的控制台应用程序)。