该例将数组中的所有元素乘以2后返回结果。
整个过程分为3步:
1. 客户向服务端端发送请求
2. 服务端接收请求,处理后返回给客户端
3. 客户端接收并处理服务端响应
客户端代码:
var extensionName:String = "simpleExt"
function sendValues()
{
var obj:Object = {}
obj.values = [100, 200, 300, 400, 500]
smartfox.sendXtMessage(extensionName, "double", obj, "xml") //调用扩展
output_txt.text += "Sent: " + obj.values + newline
}
sendXtMessage() 包含四个参数:
extName | 扩展名称,必须和config.xml中所定义的相同,这里是extensionName("simpleExt") | |
cmd | 服务端扩展所执行的命令名称,这里是"double" | |
params | 传给服务端的数据,可以是strings, numbers, booleans, arrays, objects,这里是obj | |
type | 可以是"xml"或"str",表示发送请求的格式,默认为"xml" 。选择"str"时,客户端以字符串发送请求,可以减少占用带宽,十分适合用于即时性要求很强的游戏交互。 |
服务端:
function init()
{
// Using trace will send data to the server console and Administrator Tool
trace("Hello from the Simple Extension Example!")
}
function destroy()
{
trace("Bye bye!")
}
//主要代码
function handleRequest(cmd, params, user, fromRoom)
{
//检查传入命令名称
if (cmd == "double")
{
//初始化一个空数组对象,用来存储服务器返回值
var response = {}
//用命令名称创建_cmd属性,用来辨别服务器做出相应的命令
response._cmd = "double"
response.values = []
//遍历传入的数组,将每个值乘以2后放入response数组
for (var i = 0; i < params.values.length; i++)
{
var n = params.values[i]
response.values[i] = n * 2
}
//将结果返回客户端
_server.sendResponse(response, -1, null, [user])
}
}
function handleInternalEvent(evt)
{
// Simply print the name of the event that was received
trace("Event received: " + evt.name)
}
_server.sendResponse()包含5个参数:
response | 具有_cmd属性的对象 | |
fromRoom | 返回消息的RoomID (-1 if not needed) | |
sender | 发送消息的客户端对象 (null if not needed) | |
recipients | 接收消息的用户list | |
type | can be "xml" or "str". It represent the message format. By default "xml" is used |
回到客户端,接收服务器响应:
smartfox.onExtensionResponse = function(resObj:Object, type:String)
{
trace("cmd: " + resObj._cmd)
trace("type: " + type)
// We expect the response to be xml formatted
if (type == "xml")
{
// Let's check if it's a "getData" message
if (resObj._cmd == "double")
{
trace("res: " + resObj.values)
output_txt.text += "Received: " + resObj.values + newline
}
}
}
resObj包含服务器返回数据,type是数据传送格式。当type和resObj的_cmd属性正确时,将结果输出到屏幕。