我一直在寻找一些关于如何做到这一点的例子 - 但我能找到的唯一信息并没有真正让我清楚。
我希望有人可以提供一些见解。
我目前有一个我不久前制作的空气应用程序。空中应用程序在第3帧停止,我必须使用鼠标单击继续。我想要做的是当我点击设备(手机/平板电脑)上加载的html页面上的btn时前进到下一帧。 Air App本身将一直运行。
我有一个服务器设置,所以我可以从我的设备(本地网络)访问html按钮。
我还实现了此http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html#includeExamplesSummary以查看它与我的服务器的交互方式。当我运行air app时,我可以看到它调用服务器,air应用程序会在调试器输出中从服务器打印一些结果。但实际上,这不是我想要做的。它只是表明发生了一些连接。但流程都错了。
所以我的问题是。谁能给我一些关于如何从同一网络中的另一台设备触发Air App中的帧的详细信息?其他设备不需要任何闪光灯。只需一个简单的html按钮即可。
感谢
答案 0 :(得分:0)
我说你有两条可能的路线。
在您的服务器上创建一个脚本,以启动与您的航空应用程序的连接。例如,使用php和socket,链接将类似于http://myserver/nextslide.php
,然后可以连接到您选择的TCP端口上的air应用程序。这里有很多选项,具体取决于您的服务器以及您可用的脚本语言。
将您的航空应用程序设置为Web服务器,以允许您的浏览器直接发送HTTP请求。例如,有一个非常简单的空中HTTP服务器here(它不过是一个套接字服务器,它在每个请求结束时关闭连接)。你仍然可以像现在一样从主Web服务器提供你的html,但是当你在HTTP标题中找到相关的URI时,你只需要从air app中的HTTP服务器移动到下一张幻灯片。如果您只需要它在您的本地网络中工作,这就是我想要的。
上面选项2的示例as3代码,使用带有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);
}
}
}
}