»扩展API
在本文中,我们将介绍Extension API中最有用的元素,以及如何利用服务器端框架和随附的javadoc。
»BaseSFSExtension与SFSExtension
我们提供两个类作为主扩展类的基本类型:BaseSFSExtension和SFSExtension,它们都位于com.smartfoxserver.v2.extensions包下。前者主要用于与SmartFoxServer PRO 1.x的兼容性,而SFSExtension是为了获得最好的SFS2X而延伸的推荐类。
在本文中,我们将假设您的主要扩展类扩展了SFSExtension(有关两者之间的差异的更多细节,请参阅深度文章中的服务器端扩展)。
»区级/房间级
服务器扩展可以插入一个区域(我们称之为区域级扩展)来管理整个应用程序或单个房间(房间级别扩展),以便仅管理该特定房间。
两种方法之间的区别仅在于范围。区级扩展可以侦听该区域中的任何事件,并控制其管理的所有房间和用户。另一方面,房间级别的扩展只能听取该房间中的事件并管理其中包含的用户。
房间级别扩展的典型用途是管理在房间里运行的游戏的逻辑。
»使用服务器API
SFS2X框架主要由三个不同的元素组成。
API类:它们提供了有组织的方式来访问服务器的许多功能,例如创建房间,设置房间/用户变量,处理游戏挑战,匹配玩家等等。
服务:它们管理服务器的特定元素。例如,RoomManager提供对在Zone中创建的房间的访问,允许执行搜索,过滤等。
数据类:它们在框架中是最多的,它们为SmartFoxServer数据(例如用户,房间,好友,邀请,事件等)提供抽象。
我们现在将仔细看看每个人,并简要讨论一下。
»API类
访问API的最简单方法是通过扩展中的getApi方法,它提供对服务器核心API的引用。您可以通过检查SFSApi类javadoc来了解所有方法。
这是一个快速的例子,显示如何创建一个房间:
void makeRoom() throws SFSCreateRoomException
{
CreateRoomSettings settings = new CreateRoomSettings();
settings.setName("The music Room");
settings.setMaxUsers(20);
getApi().createRoom(getParentZone(), settings, null);
}
SFS2X还为好友列表和游戏匹配功能提供专门的API。 在下面的段落中,我们将介绍如何访问它们。
»SmartFoxServer类
框架中的下一个重要元素是SmartFoxServer类,它提供对系统中运行的许多服务的访问。 虽然使用服务是一个相当高级的话题,我们也可以使用这个对象访问专门的API。
像下面的代码段所示,例如您可以访问Game API和Buddy List API:
void getMoreApi(User owner) throws SFSCreateRoomException
{
ISFSGameApi gameApi = SmartFoxServer.getInstance().getAPIManager().getGameApi();
ISFSBuddyApi buddyApi = SmartFoxServer.getInstance().getAPIManager().getBuddyApi();
CreateSFSGameSettings settings = new CreateSFSGameSettings();
settings.setName("PongRoom");
settings.setMaxUsers(2);
settings.setMaxSpectators(8);
// ...more game settings here...这里有更多的游戏设置
gameApi.createGame(getParentZone(), settings, owner);
}
»数据类
框架中有数十种不同的数据类,为API的各种元素提供了抽象:区域,房间,用户等。它们主要位于com.smartfoxserver.v2下包装。
服务器端开发的一个重要方面是数据类应始终用于阅读属性,但很少用于编写它们。例如,对区域或房间的值进行直接更改将仅导致本地更改,并且不会将更新发送到客户端。
换句话说,这些类暴露了许多getter和setter,但是对于Extension开发,只有getter是非常重要的。这些更改通过API来应用,这提供了一种机制,用于使服务器上发生的更改维护所有客户端的最新信息。
一个实际的例子是为客户端设置用户变量。如果您查询javadoc,您将注意到User对象公开了可能会被诱使使用的setVariable方法。没有任何错误,但更改将仅在服务器端发挥作用,并且不会向客户端发送更新(这是保持正确同步所必需的)。
正确的方法是使用API setUserVariables方法,该方法可以在必要时自动通知需要更新的所有客户端,甚至启动服务器事件。
“ 更多资源
现在,您已经了解了扩展开发的基础知识,现在应该是有趣的东西,编写自己的实验框架。
另外我们强烈推荐以下资源来了解更多信息:
服务器端扩展深入文章
高级扩展主题文档
Java服务器端API文档,特别是表示与服务器交互的入口点的SFSApi类
Tris游戏,适用于所有支持的平台,其中包括服务器端源代码
BattleFarm和Space Race ActionScript 3游戏,其中包括客户端和服务器端的源代码
翻译自http://docs2x.smartfoxserver.com/DevelopmentBasics/extension-api