AMFPHP安装 flash

Adobe Flash场景编程

on (mouseEvent) {}“()”小括号中的mouseEvent参数是鼠标事件,常用的有以下几种鼠标事件:
Press  当鼠标指针经过按钮时按下鼠标。
release 当鼠标指针经过按钮时按下再释放鼠标按钮。
releaseOutside 当鼠标指针在按钮之内时按下按钮后,将鼠标指针移到按钮之外,此时释放鼠标按钮。
rollOut 鼠标指针滑出按钮区域。
rollOver 鼠标指针滑过按钮。
场景面板 窗口-》动作

编译文件 调试-》调试影片
控制-》测试影片

trace(infoUrl);    //调试代码

首先下载AMFPHP

下载后,解压缩,把文件夹中的amfphp 文件夹拷贝到 APACHE服务器的网站根目录。
然后打开浏览器,输入
http://localhost/amfphp/gateway.php     确定
如果提示:

amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash.

Note: If you're reading an old tutorial, it will tell you that you should see a download window instead of this message. This confused people so this is the new behaviour starting from amfphp 1.2.

View the amfphp documentation

Load the service browser

说明安装成功。

 

打开网站根目录的AMFPHP文件夹,进入SERVICES文件夹,新建一个PHP文件 命名为HELLOWORLD.php

其中要注意的是 services 目录,这个目录就是放置我们把开发好的服务端代码的,你可以开发单个文件的服务直接放到此目录下,也可以专门建立一个目录存放你的服务端代码。
拷贝以下代码:

<?php
class HelloWorld
{
    function HelloWorld()
    {
        $this->methodTable = array
        (
            "say" => array
            (
                "access" => "remote",
                "description" => "Pings back a message"
            )
        );
    }
 
    function say($sMessage)
    {
        return 'You said: ' . $sMessage;
    }
}
?>

保存!
在浏览器地址栏输入
http://localhost/amfphp/browser/     (或点击
Load the service browser
回车
AMFPHP的项目管理器:

AMFPHP安装 flash_第1张图片
 单击 HelloWorld
看到一下内容,就是HELLOWORLD项目具体内容:

AMFPHP安装 flash_第2张图片
 在sMessage输入内容(比如"xiaoxiaocainiao"),  单击call按钮:

看到页面下方的提示结果:


 好了,你已经初步学会安装AMFPHP并使用了。

 

新增一个Fla(这裡以AS3.0为例),动作面板输入:

import flash.net.*;

// 新增一个NetConnection物件
var test:NetConnection = new NetConnection();

// 连上AMF gateway
// 这裡每家AMF gateway的实作方法应该都有差别,细节请记得看该实作说明
test.connect('http://127.0.0.1/amfphp/gateway.php');

// 准备一个Responder物件来接收事件,用法及参数请参考F1说明
var returnResult:Responder = new Responder(ok, ng);

function ok(res:Object):void {
  trace(res);
}

function ng(res:Object):void {
  trace(res);
}

//以上,我做了ok跟ng两个简单小function,分别是trace出它们接收到的物件

test.call('HelloWorld.say', returnResult, 'hi, flash');
// 这裡是最重要的动作,就是直接用call这个方法
// "呼叫"在gateway上面的callme这个服务裡的callmeplease这个方法
// 第二个参数是接收反应的responder,第三个参数是给callmeplease的参数

以上,HelloWorld.say 会把”hi, flash”传给AMF gateway,然后gateway回传”You said:hi, flash”回来给flash。顺利的话,Ctrl + Enter执行,就会在output视窗看到输出的东西了。就这样,你的Flash已经可以跟各家有支援AMF的gateway”对谈”了


这里顺便介绍下几个标签页中对应的数据信息
Info:  调用执行情况(调用执行时间等信息)
Results: 返回结果
Tree:   以树的方式显示结果
Recordset view: 数据集结果观察器
Trace: 调试信息返回观察器

给函数加几个传入参数,并返回一个数组,看看会是什么样子的

<?php
class terry_services {
	function dosmth($obj, $param2, $param3) {
		$return_array = array ();
		$return_array ['get_obj'] = $obj;
		$return_array ['get_p2'] = $param2;
		$return_array ['get_p3'] = $param3;
		
		return $return_array;
	}
}
?>

 
AMFPHP安装 flash_第3张图片
 上图可以看见三个参数,以及对应的输入框分别填写一些数据,执行看效果如下图:
AMFPHP安装 flash_第4张图片
 好了,看见了数组返回结果了吗? 就是一个AS的对象,在AS3里可以当 数组用,也可以当对象用。我们再看看 Tree标签里显示的是什么
AMFPHP安装 flash_第5张图片
 看到这里读者应该清楚这个工具的使用,以及服务端代码写法了吧。具体服务端的开发模式,这里不作介绍,以后看有需要再写吧。。。也许看到这里,大家有一个疑问,就是如果要传递一个对象,如何使用工具来调试呢?我把服务对象的方法  "dosmth" 修改成一开始的单参数结构

<?php
class terry_services {
	function dosmth($obj) {
		return $obj;
	}
}
?>

这个代码可以看出直接把对象返回给客户端的。我要告诉大家怎么使用这个工具来调试传入对象。
这里大家要知道一个概念 "JSON”,具体大家可以去查资料,大概意思就是 javascript 中的对象结构的串化的方式
如一个javascript数组:
a['one']='onev';
a['two']=2;
把这个数组串化(序列化)后的结果就是 {"one":"onev","two":2},其实就是用大括号,双引号,冒号来表示数组,传递后,并还原。
这里调试工具支持参数以 JSON 的方式传入,它会自动解析成数组对象,并传递到服务端。
AMFPHP安装 flash_第6张图片
 
AMFPHP安装 flash_第7张图片
好了~~ 服务端也知道怎么写了,参数也知道怎么传入了,对象也知道怎么调试了,接下来最后一步就是如何在客户端使用AFM协议和服务端的PHP代码进行通讯了。

AS3里有一个类 NetConnection,它是支持AMF协议的,AS3里它支持的AMF3协议。
主要使用到它的 connect方法和call方法
参数结构如下:
NetConnection.connect(服务地址)
NetConnection.call('目录 . 对象 . 方法名', 回调对象, 参数, [参数2], [参数3] ...)
这里 call 从第但个参数开始的参数,都是传给服务端的服务对象的方法的

看如下客户端的代码:

var callBack = new Object();
callBack.onResult = function(return_value:Object)
{
    //...
}
var _nc: NetConnection = new NetConnection();
_nc.connect('http://www.example.com/amfphp/gateway.php');                
_nc.call('terry_services.dosmth', callBack, param); 

注意 connect 连接的是amfphp下 gateway.php (这个是固定的)
具体使用哪个服务对象以及方法,在 call 中的第一个参数指定,如果你的服务对象在更深级的目录总,则以 . (点) 来描述深度
如果 terry_services.php 的目录路径为 amfphp/services/ terry/terry_services.php 则这里 call的第一个参数为 'terry.terry_services.dosmth'
call 的第二个参数为服务端返回数据后,NetConnection 回调的对象,这个回调对象必须有一个固定的方法 onResult(param:Object);在这个方法里,你可以对服务端返回的数据进行处理。。。
基本上就是这样一个开发过程


AMFPHP预设的编码是不支援中文的(会出现乱码 ),不过只要修改一下gateway的程式码即可。

使用文字编辑器,开启AMFPHP资料夹的gateway.php,应该可以找到一段跟字码有关的:

$gateway->setCharsetHandler("utf8_decode", "ISO-8859-1", "ISO-8859-1");

 把它修改成:

$gateway->setCharsetHandler("utf8_decode", "UTF-8", "UTF-8");

 或是如果你的PHP模組裡有iconv的話也可以這樣改:

$gateway->setCharsetHandler("iconv","UTF-8","UTF-8");

记得,不要改flash裡的useCodePage = true,虽然可能也ok,但这是走回头路….能使用Unicode就尽量使用它吧

你可能感兴趣的:(apache,PHP,浏览器,项目管理,Flash)