»登录阶段
我们在上一章中已经看到如何开始与SmartFoxServer的连接,并提到在客户端可以开始与服务器API和其他用户进行交互之前,必须先登录一个Zone。
为了看到服务器中可用的区域并创建新的区域,您可以使用SFS2X管理工具。在工具的左侧栏中选择“区域配置器”,并显示所有区域的列表。
从这里,您可以双击(或选择并单击编辑按钮)任何区域名称,然后继续进行区域设置的配置。有关使用说明,请参阅Zone Configurator文档。
»默认与自定义登录
在我们继续显示登录请求的基本代码之前,我们需要将注意力放在“Zone Configurator”区域名称后面的“使用自定义登录”区域中的一个非常重要的设置上。
此参数的值(默认设置为off)确定哪个控制器将接收并处理登录请求。
customLogin设置为false:系统控制器将处理登录阶段。在这种情况下,任何用户名都将被接受,除非其他用户已经登录到具有相同名称的区域。密码将被忽略。如果一个空字符串作为名称传递,服务器将自动生成一个“访客”用户名(例如访客#42)。
customLogin设置为true:Extension Controller将处理登录阶段,允许开发人员的Extension验证用户凭据并执行任何其他所需的操作。
»登录区域
登录阶段总是从客户端发送一个LoginRequest到服务器。这需要几个参数:
用户名:(可选)用户名
密码:(可选)密码
区域名称:区域的名称;它必须存在于服务器端
额外的参数:(可选)包含额外的自定义数据的对象;通常这是与基于扩展的登录结合使用,以便将自定义数据发送到服务器端
登录区域只需要几行代码:实质上,您只需要注册SmartFox类实例即可接收SFSEvent.LOGIN和SFSEvent.LOGIN_ERROR事件,并继续执行该请求。
var sfs:SmartFox = new SmartFox();
sfs.addEventListener(SFSEvent.LOGIN, onLogin);
sfs.addEventListener(SFSEvent.LOGIN_ERROR, onLoginError);
...
...
// This code is executed after the connection
sfs.send( new LoginRequest("", "", "SimpleChat") );
public function onLogin(evt:SFSEvent):void
{
trace("Login success: " + evt.params.user.name);
}
public function onLoginError(evt:SFSEvent):void
{
trace("Login failed: " + evt.params.errorMessage);
}
在上述ActionScript 3示例中,我们使用默认登录(由系统控制器处理),并传递一个空字符串作为用户名,从而获得一个自动生成的访客名称。
注意
加载外部配置文件时,无需将Zone名称传递给LoginRequest构造函数,API将自动获取。
这是另一个LoginRequest代码段:
sfs.send(new LoginRequest(“Fozzie”));
在这种情况下,我们发送用户名,无密码,并且不指定区域名称,系统将使用从配置文件加载的名称。
»什么可能出错?
在登录阶段,服务器执行许多验证可能会阻止进程并导致SFSEvent.LOGIN_ERROR事件触发。我们简单介绍一下可能出现的问题。
缺少区域:请求的区域名称与服务器上任何可用的Zons不对应。
区域已满:请求的区域已达到允许的最大用户数量(可在AdminTool的区域配置器模块中配置)。
服务器已满:SmartFoxServer实例已达到其最大容量,不能接受其他用户。
重复的名称:没有两个用户可以在区域中使用相同的名称。这是区分大小写的,所以两个用户名“Fozzie”和“fozzie”不会造成任何问题。
用户名中的不良词:如果在“区域”中配置了“Word筛选器”,并将其应用于用户名,则如果此名称匹配过滤器中配置的任何发音字,则可能会触发错误。
禁止的用户名:如果提供的用户名被主持人或管理员禁止,客户端将无法加入该区域,直到流放过期。
»房间列表
在第一个代码示例中,我们看到当登录成功时,服务器将用户加入到所请求的区域中。幕后SmartFoxServer还执行一些我们需要了解的其他操作。
1.自动订阅默认房间组:在区域配置器中,您可以声明一些公共房间组。默认情况下,只有一个组称为“默认”,如果需要,您可以添加更多。房间组只不过是一个字符串id,它用于组织不同类别的房间称为房间组。
登录后,客户端将被订阅到“区域”的“默认房间组”设置中指定的所有组。
- 使用初始房间列表填写客户端:幕后客户端收到房间列表,其中填有所有订阅组中包含的所有房间。此操作完成一次,在登录时,只有小的更新将被发送到客户端,以维护房间列表与服务器最新。
在上面的例子中,该区域包含三个不同的房间组别,称为欧洲,美洲和亚洲,每个房间都包含一定数量的房间。如果我们假设该区域的默认Group属性设置为“欧洲,美国”,客户端列表将填充这两个组中的所有房间的详细信息,并将收到有关任何“有趣”更改的更新(例如,新房间为创建或另一个被删除等)。
您可以在本文档中阅读有关组的其他信息。
»自定义登录
登录过程中一个非常常见的用例是编写一个扩展,用于处理用户凭据并根据您的数据库进行检查。为了做到这一点,你将需要一些初步的步骤。
- 设置数据库连接。您可以按照本教程介绍如何配置SFS2X与数据库通信。
- 准备一个将执行用户名和密码验证的简单扩展。我们提供扩展程序和登录how-to教程的深入概述。
- 打开“区域配置器”中的“使用自定义登录”设置并设置您的扩展。
翻译自http://docs2x.smartfoxserver.com/DevelopmentBasics/login-phase