2013-04-15 43 views
0

我一直在寻找一些关于如何完成这个任务的例子,但是我能找到的唯一信息并不真正让我清楚。通过设备与桌面Air App进行通讯

即时通讯希望有人在这里可以借给一些见解。

我目前有一个空气应用程序,我前一段时间。空气应用停止在第3帧,我必须用鼠标点击继续。我想要做的是前进到下一帧,当我点击一个设备(手机/平板电脑)上加载的HTML页面上的BTN。 Air App本身会一直运行。

我有一个服务器设置,所以我可以从我的设备(本地网络)访问html按钮。

我也实现了这个http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html#includeExamplesSummary看看它如何与我的服务器交互。当我运行空中应用程序时,我可以看到它调用服务器,空中应用程序在调试器输出中显示来自服务器的一些结果。但是,真的,这不是我想要做的。它只是表明有一些连接发生。但流量都是错误的。

所以我的问题是。任何人都可以给我一些关于如何从同一网络中的其他设备触发Air App中的帧的细节?另一个设备不需要在其上有任何闪光灯。只需一个简单的html按钮即可。

谢谢

+1

那么,你能收到你的AIR应用程序确定的消息?只需要帮助改变框架? – 2013-04-15 17:43:06

+0

好吧,当我在空中应用上运行调试时,空中应用只能访问服务器。这不是我需要的流量。但它确实证明存在某种连接性。 需要做的事情是空气应用程序使用端口在服务器上侦听连接,然后以某种方式从HTML页面触发所有这些。 –

回答

0

我想说你有两条可能的路线在这里。

  1. 在您的服务器上创建脚本以启动与您的无线应用程序的连接。例如使用php和socket,链接将会是http://myserver/nextslide.php,然后可以连接到您选择的TCP端口上的空中应用程序。这里有很多选项,具体取决于您的服务器和您可用的脚本语言。

  2. 将您的空气应用程序设置为Web服务器,以允许您的浏览器直接发送HTTP请求。例如,有一个非常简单的空中HTTP服务器here(它并不比在每个请求结束时关闭连接的套接字服务器多)。您仍然可以像现在这样从主Web服务器提供HTML,但是从空中应用程序中的HTTP服务器,只需在HTTP标头中找到相关URI时移动到下一张幻灯片。如果你只需要它在你的本地网络中工作,这就是我想要的。


示例AS3代码上面的选项2,使用空气投影机的FlashDevelop测试:

package 
{ 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.ProgressEvent; 
    import flash.events.ServerSocketConnectEvent; 
    import flash.net.ServerSocket; 
    import flash.net.Socket; 
    import flash.utils.ByteArray; 

    public class Main extends Sprite 
    { 
     private var serverSocket:ServerSocket; 
     private var port:int = 8080; 

     public function Main():void 
     { 
      listen(); 
     } 

     private function listen():void 
     { 
      try 
      { 
       serverSocket = new ServerSocket(); 
       serverSocket.addEventListener(Event.CONNECT, socketConnectHandler); 
       serverSocket.bind(port); 
       serverSocket.listen(); 
       trace("Listening on port " + port + "...\n"); 
      } 
      catch (error:Error) 
      { 
       trace("Failed to open server socket"); 
      } 
     } 

     private function socketConnectHandler(event:ServerSocketConnectEvent):void 
     { 
      var socket:Socket = event.socket; 
      socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); 
     } 

     private function socketDataHandler(event:ProgressEvent):void 
     { 
      try 
      { 
       var socket:Socket = event.target as Socket; 
       var bytes:ByteArray = new ByteArray(); 
       socket.readBytes(bytes); 
       var request:String = "" + bytes; 
       trace(request); 
       var url:String = request.substring(4, request.indexOf("HTTP/") - 1); 

       socket.writeUTFBytes("HTTP/1.1 200 OK\n"); 
       socket.writeUTFBytes("Content-Type: text/plain\n\n"); 

       if (url == "/next") 
       { 
        socket.writeUTFBytes("next frame triggered"); 

        var someMovie:MovieClip = new MovieClip(); //define this as a reference to the movie clip you want to control 
        someMovie.nextFrame(); 
       } 
       else 
       { 
        socket.writeUTFBytes("The url is " + url); 
       } 

       socket.flush(); 
       socket.close(); 
      } 
      catch (error:Error) 
      { 
       trace(error); 
      } 
     } 
    } 
} 
+0

嗨Shakinfree,选项2看起来不错。试图将它重构成我可以使用的东西是一个小窍门。另外,将AS从mxml中提取出来并让它像普通的fla/.as一样运行也是一个挑战。我发布了一些工作查询,让某人将这些代码重构为我所需要的 - 但是每个人都在理解如何完成工作。 –

+0

希望上面的代码有助于澄清一些事情。 –

相关问题