国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

基于Nokia S60的游戲開發(fā)之五

2019-11-18 19:39:51
字體:
供稿:網(wǎng)友
  在這一講中中,將討論Symbian OS的通訊組件。必須強調(diào)的是,從一個游戲開發(fā)者的角度來看,通訊技術(shù)是非常重要的。 最后介紹如何接收補充的游戲數(shù)據(jù)。

  通訊體系結(jié)構(gòu)

  智能電話的移動特性和通訊技術(shù)的飛躍發(fā)展決定了它們對通訊模塊的需求。 全世界都在使用智能電話,但是每個國家或者地區(qū)可用的通訊服務(wù)可能會有很大的差異。 現(xiàn)有的服務(wù)和技術(shù)不斷地發(fā)展,而且新的技術(shù)層出不窮。 這些事實就要求智能電話通訊模塊具有靈活性和擴展性,因此Symbian OS的通訊體系結(jié)構(gòu)是基于這些思想來設(shè)計的。 它由幾個小的模塊組成,并且支持可以在運行期間裝載的可插入式模塊。 而且通訊設(shè)置可以在系統(tǒng)不重新啟動的情況下就進行更改。

  Symbian OS 6.1版本支持多種通訊技術(shù),圖1中都作了介紹。 特定的智能電話的可用的技術(shù)取決于它的硬件解決方案。 例如諾基亞7650或者諾基亞3650沒有串行的數(shù)據(jù)線,但是可以通過藍牙技術(shù)支持串行通訊。


圖1 Series 60通訊技術(shù)

  Symbian OS的通訊體系結(jié)構(gòu)基于三個通訊服務(wù)器:ETEL、C32和ESOCK。 服務(wù)器提供的通訊服務(wù)是異步操作,因此它們需要被封裝到活動對象里。一個客戶應(yīng)用程序一般產(chǎn)生三個不同的活動對象:一個用于傳送數(shù)據(jù)、一個用于接收數(shù)據(jù)還有一個用于應(yīng)用程序端通訊引擎。通訊模塊的關(guān)系如圖2所示。


圖2 Symbian OS的通訊組件

  ETEL是一個電話通訊服務(wù)器,用于應(yīng)用程序訪問各種電話硬件和服務(wù),例如GSM手機、模擬調(diào)制解調(diào)器和傳真通訊服務(wù)。 這個服務(wù)器使用可動態(tài)裝載的插入式模塊--電話通訊服務(wù)器模塊(TSYs),把硬件特定的信息轉(zhuǎn)化為應(yīng)用程序可理解的格式。 這個服務(wù)器的客戶端應(yīng)用編程接口定義在etel.h頭文件中,它主要由RTelServer、RPhone、RLine和RCall類組成。

  串行通訊服務(wù)器

  串行通訊服務(wù)器(C32)為它的客戶端提供一個串行端口應(yīng)用編程接口。這個服務(wù)器使用通訊服務(wù)器插入式模塊(CSYs)處理實際的通訊協(xié)議。Symbian OS提供多個CSY模塊,例如處理RS232和紅外線串行通訊。應(yīng)用程序開發(fā)者還可以使用串行協(xié)議模塊應(yīng)用編程接口來開發(fā)自定義CSY模塊,自定義CSY模塊定義在cs_port.h頭文件中。

  串行通訊服務(wù)器使用方法都是很相似的,不管是否使用了CSY模塊。首先在初始化階段,客戶端加載所需要的驅(qū)動程序,打開服務(wù)器并且裝載CSY模塊。在實際的設(shè)備已經(jīng)打開并且配置之后,服務(wù)器準備發(fā)送并接收數(shù)據(jù)。最后,需要釋放所有的資源。 串行通訊服務(wù)器的客戶端應(yīng)用編程接口定義在c32comm.h頭文件中,主要由RComm和RCommServ類組成。 下面的代碼是一個紅外線串行通訊初始化階段的示例。

// Load device drivers
TInt err = User::LoadPhysicalDevice( _L("EUART1") );
if ( err != KErrNone && err != KErrAlreadyExists )
 User::Leave( err );
 err = User::LoadLogicalDevice( _L("ECOMM") );
if ( err != KErrNone && err != KErrAlreadyExists )
 User::Leave(err);
 // Start serial communications server of type RCommServ
 User::LeaveIfError( iServer.Connect() );
 // Load CSY module for IrComm
 User::LeaveIfError( iServer.LoadCommModule( _L("IRCOMM") ) );
 // Open port of type RComm
 User::LeaveIfError( iport.Open( iServer, _L(""IRCOMM::0""),ECommExclusive ) );


  上面的示例代碼可以通過加載ECUART CSY模塊來從IRCOMM模式切換到RS232,同時使用COMM:0端口代替IRCOMM:0。 RComm::Open中的ECommExclusive枚舉防止其他的RComm客戶端使用這個端口。

  可以使用RComm:Write和RComm::Read方法向端口寫數(shù)據(jù)和從端口讀取數(shù)據(jù),它們都是使用一個TRequestStatus和一個描述符作為參數(shù)。 當(dāng)傳遞完成時,生成一個事件作為活動對象,這個事件的TRequestStatus被傳送到傳遞方法,這就使活動對象的RunL被調(diào)用。描述符參數(shù)通常是一個8位描述符,因此如果被傳送的數(shù)據(jù)是文本的話,這個描述符需要被轉(zhuǎn)換為Unicode。 數(shù)據(jù)傳送方法可能還使用其它的一些參數(shù),指定數(shù)據(jù)傳送的最大長度或者時間等特征。

  對于應(yīng)用程序來說,使用紅外線進行通訊是一個很簡易的方法,但是支持IrComm的主要原因便于以前的應(yīng)用程序的轉(zhuǎn)化,使之可以更容易地使用串行端口來進行通訊。和其它IrDA協(xié)議相比,IrComm不利的一面是它不提供所有的IrDA服務(wù)。 例如,使用IrComm的最大數(shù)據(jù)傳送速度只有9600比特/秒,這顯然對于眾多傳送大量數(shù)據(jù)的終端游戲來說是不夠快的。
  套接字服務(wù)器

  套接字服務(wù)器(ESOCK)提供一個使用套接字的通訊協(xié)議的接口。 對于所有的協(xié)議和指定協(xié)議行為,客戶端應(yīng)用編程接口都是相同的。 套接字服務(wù)器使用TCP/IP、IrDA和藍牙這些協(xié)議模塊,它們可在運行期間動態(tài)裝載。 一個協(xié)議模塊可能包含多個協(xié)議。 例如IrDA模塊可能包含原始的IrMUX、IrTinyTP、IrLAP、IrLMP和IrObex協(xié)議。 對應(yīng)于TSY和CSY模塊的公共協(xié)議模塊可以由應(yīng)用程序開發(fā)者開發(fā)。

  套接字服務(wù)器的客戶端應(yīng)用編程接口的主要的類是RSocketServ和RSocket。 可以看到它們與RCommServ和Rcomm很相像。 RSocketServ處理一個服務(wù)器的會話,提供可用的協(xié)議的信息,但是不提供任何數(shù)據(jù)傳送服務(wù)--它們由套接字類RSocket提供。 因為客戶端應(yīng)用編程接口對于所有協(xié)議都是相同的,某種單一協(xié)議的屬性和語義與TPRotocolDesc結(jié)構(gòu)是有區(qū)別的。RSocketServer::GetProtocolInfo方法可用于讀取當(dāng)前裝載的協(xié)議的信息。 套接字服務(wù)器至少需要兩個不同的套接字。 一個用于監(jiān)聽進入連接請求,另一個用于建立一個連接和傳送數(shù)據(jù)。 套接字服務(wù)器的客戶端應(yīng)用編程接口定義在es_sock.h頭文件中。

  最吸引游戲開發(fā)者眼球的套接字服務(wù)器協(xié)議是藍牙技術(shù)。 它提供了一個相對快速的、近程的解決方案,并且是免費使用的,因此很適合用于開發(fā)游戲。 與紅外線通訊相比,藍牙的優(yōu)勢是它有更大的活動半徑以及在終端之間不需要任何可見的連接。

  如圖3所示藍牙由一個協(xié)議組組成。 Symbian OS 6.1版支持藍牙1.0版,并且提供給應(yīng)用程序完全訪問RFCOMM、L2CAP和SDP協(xié)議的權(quán)限。 RFCOMM協(xié)議模擬串行通訊,因此簡化了從原有應(yīng)用程序的轉(zhuǎn)化為使用藍牙技術(shù)的過程。 應(yīng)用程序的通常選擇是使用邏輯鏈路控制和適應(yīng)協(xié)議(L2CAP),提供給應(yīng)用程序更加強大的函數(shù)來控制藍牙連接。 服務(wù)發(fā)現(xiàn)協(xié)議(SDP)允許應(yīng)用程序查詢服務(wù)和服務(wù)提供商。通常當(dāng)創(chuàng)建一個新的連接的時候,SDP搜索要求的終端并且建立連接設(shè)置。 Symbian OS還提供一個完整的用戶界面組件來搜索可用的藍牙終端。 它使用Symbian OS的通知框架,在應(yīng)用程序窗口上產(chǎn)生一個對話類型組件并且把可用的終端作為一個列表來顯示。


圖3 藍牙堆棧

  游戲數(shù)據(jù)接收

  為了支持游戲接收額外的游戲數(shù)據(jù),Series 60能讓第三方游戲使用MIME類型在OS中注冊它們的數(shù)據(jù)文件格式。 MIME類型被像WML瀏覽器和消息應(yīng)用程序這樣的通訊應(yīng)用程序來使用,用于弄清楚一個具有某種特定類型的文件應(yīng)該被保存在什么路徑。 例如這個文件可以包含用于一個游戲的新的等級、武器或者圖形。
在Series 60中,用于游戲的MIME類型是下面這種格式:application/x-NokiaGameData-<APPLICATION-ID>,這其中的<APPLICATION-ID>是Symbian OS游戲應(yīng)用程序的UID的最后八個數(shù)字。MIME類型在Symbian OS應(yīng)用程序信息文檔aif文件中聲明:

RESOURCE AIF_DATA
{
 app_uid=0x12345678; // Application UID
 datatype_list =
 {
  DATATYPE
  {
   priority = EDataTypePriorityHigh;
   type = "application/x-NokiaGame-Data-12345678";
  }
 };
}

  DATATYPE結(jié)構(gòu)中的優(yōu)先級指定當(dāng)前的應(yīng)用程序是如何處理這些數(shù)據(jù)格式。 EDataTypePriorityHigh應(yīng)用于不能被其它應(yīng)用程序處理的數(shù)據(jù)格式。

  接收數(shù)據(jù)的目的路徑在名為<APPLICATION-ID>.ini的ini文件中指定。 這個文件需要使用Unicode格式,并且它包含SDDataDir=<GAME-PATH>,在這里<GAME-PATH>是用于接收文件的路徑。 這個路徑是相對于默認游戲數(shù)據(jù)目錄c:/nokia/games的。 當(dāng)一個游戲被安裝時,ini文件需要被復(fù)制到/System/SharedData目錄下,它可以通過在一個游戲的pkg文件中指定路徑來實現(xiàn)。

  Series 60指定一個用于游戲數(shù)據(jù)文件的遵循MIME類型的標準頭結(jié)構(gòu)。 頭格式的結(jié)構(gòu)在圖4中說明。 Data類型字段可用于指定游戲內(nèi)部的文件類型。 Name字串是一個Unicode字串,可用于指定一個用戶可見的文本來顯示菜單中的數(shù)據(jù)選項。 Data ID和Data版本是用于指定文件數(shù)據(jù)的類型和版本的號碼。 NGDX字段必須包含ASCII字串"NGDX"。


圖4用于游戲數(shù)據(jù)文件的標準頭


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大埔区| 内江市| 洪江市| 祁连县| 信丰县| 北京市| 邓州市| 宁安市| 中西区| 昆山市| 无为县| 夏邑县| 南宁市| 中牟县| 天全县| 天等县| 长春市| 蒙山县| 遵义市| 芮城县| 灵山县| 岑巩县| 开阳县| 沾益县| 旌德县| 镇平县| 六安市| 武冈市| 贡嘎县| 香港 | 太和县| 西峡县| 桑日县| 安溪县| 广州市| 金湖县| 吴旗县| 荆州市| 黔西县| 双辽市| 都江堰市|