開發基礎:擴展API
- 詳細內容
- 分類:smartfoxserver
- 發佈:2014-02-17, 週一 22:25
- 點擊數:1808
» 擴展API
在這篇文章中我們將看一下再擴展API中最有用的幾個元素,以及如何利用伺服端框架和隨附的 javadoc。
» BaseSFSExtension vs SFSExtension
我們提供了兩個類別作為主要擴展類別的基礎類型: BaseSFSExtension與SFSExtension,兩個類別都可以在com.smartfoxserver.v2.extensions 套件中找到。前面的類別主要是為了SmartFoxServer PRO 1.x的相容性而提供。建議使用SFSExtension以獲得最好的SFS2X。
在這篇文章中我們假設你的主要擴展類別是繼承SFSExtension (要取得兩者差異的細節,請在深入的文章參考Server-side Extensions )。
» 區域階層/ 房間階層
伺服端擴展可以插入到區域中(我們稱它為Zone-level Extension)以管理整個應用程式,或是插入到一個單一的房間(稱之為Room-level Extension)以管理特定的房間。
兩個方法的差異僅僅只是範圍上的不同。一個區域階層的擴展( Zone-level Extension)可以監聽在區域中的任何事件,並且控制所有它所管理的房間與使用者。另一方面,一個房間階層的擴展(Room-level Extension) 只能監聽房間內的事件,並且管理在其內的使用者。
一個典型的房間階層擴展的使用是管理在房間中執行的遊戲邏輯。
» 使用伺服端API
SFS2X框架主要是由三個不同元素組成。
- API classes: 這個類別提供了有組織的方法以存取許多伺服端的功能,像是建立房間,設定房間/使用者變數,處理遊戲挑戰,匹配玩家等等。
- Services: 處理特定的伺服器元素。例如房間管理器(RoomManager)在區域中建立的房間的存取,可以用來完成搜尋,過濾等等。
- Data classes: 這是在框架中數量最多的類別,他們提供SmartFoxServer 抽象化的資料(像是使用者, 房間, 好友, 邀請, 事件, 等等)。
我們並不會詳細的去介紹每一個類別,只是會簡短的討論他們。
» API Classes
最簡單取得API的方法是在你的擴展中使用getApi方法。該方法提供了伺服端核心API的參考。要學習核心API的所有方法可以查看SFSApi class javadoc。
下面是一個的快速範例,示範如何建立房間。
void makeRoom() throws SFSCreateRoomException { CreateRoomSettings settings = new CreateRoomSettings(); settings.setName("The music Room"); settings.setMaxUsers(20); getApi().createRoom(getParentZone(), settings, null); }
SFS2X也為好友列表以及遊戲匹配功能提供了專門的API。接下來這一段內容我們將解釋如何能存取這些API。
» The SmartFoxServer class
下一個框架中的重要的元素是SmartFoxServer class,此類別提供了存取能力,可以存取許多在系統中執行的服務。雖然使用服務是一個相當進階的主題,我們依然可以使用這個物件來存取這些專門的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); }
» Data classes
在框架中有幾十個不同的資料類別為API的不同元素提供了抽象化:Zone(s), Room(s), User(s), 等等。他們主要出現在com.smartfoxserver.v2.entities.* 套件中。
一個伺服端開發的重要觀點是,資料類別應該總是用來讀取屬性,但很少會寫入它們。譬如說,直接改變區域或是房間的值,只會造成區域性的改變,而不會有任何更新傳送到客戶端。
換句話說,這些類別揭露了許多getters(取得)與setters(設定)方法,但是,對於擴展而言,只有getters是真正有意義的。若是要改變其內容則需要透API來完成。API提供了一個機制,可以維護所有客戶端進行在伺服端所發生的改變的更新。
一個練習的範例是為客戶端設定使用者變數。假如你參考了javadoc,你會注意到使用者物件揭露了一個setVariable方法,或許你會想使用這個方法,這沒有什麼錯,但這樣的改變只在伺服端有效,並不會更新到客戶端中(而此客戶端需要維持正確的同步)。
正確的方法應該是使用API中的setUserVariables方法,這方法能自動的通知所有需要更新的客戶端,甚至是在需要時發出一個伺服端事件。
» 更多的資源
現在你已經學習了基本的擴展開發,是時候來一些有趣的東西了,寫出你自己的擴展並且在框架中試驗。
還有,我們強烈參考下面的資源來學習更多:
- Server-side Extensions 一篇更深入的文章。
- Advanced Extension topics 文件。
- Java伺服端API (Java server-side API) 文件,特別是SFSApi 類別,這是與伺服端互動的起始點。
- 井字(Tris) 遊戲,所有支援的平台都可取得,其中包含了伺服端程式碼。
- BattleFarm 與 Space Race ActionScript 3 遊戲, 包含了客戶端與伺服端程式碼。
按個讚!~支持本站!~