我有一个.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
答案 0 :(得分:1)
我遇到了同样的问题,而且当问题很快发送到Air时,通过Console.WriteLine,可能会发生两个或更多的答案。您的方法“ProcessConsoleData”将不得不进一步细化,例如通过“\ r \ n”输入字符串拆分。在分割之后,您已经有了个人回复。
答案 1 :(得分:0)
我们在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无法以这种方式连接到正在运行的控制台应用程序)。