配置WebORB

在你的应用程序运行之前,你需要配置WebORB。 你需要明确地添加一个消息应用程序,以便WebORB知道其存在并且能够管理相关的用户连接。 按照下列步骤操作:

  1. 使用web浏览器打开 WebORB 管理控制器(参见图1) 。 如果你使用默认设置安装WebORB,则相应的管理控制器可在下面网页获得: upload/2011/6/201106240909027637.jpg" />

    图 1. WebORB管理控制器

  2. 点击Messaging Server标签开始创建一个新的消息应用程序。

    The Messaging Server tab

    图2.Messaging Server标签

  3. 选中WebORB Messaging Server 下面的Applications(参见图 2),然后点击 Add Application 按钮(绿色加号 ("+") 按钮)。

  4. 在 Application Editor 弹出窗口中,输入MyRSO作为应用程序的名称,然后 选中 WeborbSharpRSO.WeborbSharpRSO 作为 Application Handler (参见图 3)。

    Setting up the application

    图3. 设置应用程序

  5. 点击Save。 你的应用程序将在应用程序列表中列出。

  6. 浏览你的硬盘,并且找到位于{weborb4 path}\Applications\ 文件夹中名称为MyRSO的文件夹。 核查MyRSO文件夹包含一个名称为App.config文件。

    注意: 如果在应用程序列表中没有显示 MyRSO应用程序,但你可以在硬盘中看到该文件夹,则你需要重启 IIS ,然后重新装载 WebORB 控制器。

    如果你在硬盘中没有看到MyRSO文件夹,则你需要核查你的许可权限。 关于许可权限的更多信息,参见 相应的WebORB 安装和部署文档,它们可以通过点击WebORB控制器的Help/Resources 标签获得。I

编写ActionScript代码

在服务器侧代码就绪之后,你可以打开 Adobe Flash Builder 并且开发ActionScript 代码。

注意你可以使用WebORB自己的SharedObjectsApp 消息应用程序、直接通过ActionScript对RSO进行多次更改。 本教程使用了更多迂回的路径来说明来自服务器的RSO访问和更改。

注意:下面步骤包含的代码片段不是完整的程序,它们仅仅用于说明客户端侧实现的主要概念。 关于相关的完整代码,参见本教程范例文件中的WeborbRSO.mxml。

按照下列步骤,创建你的ActionScript代码:

  1. 首先在Flash Builder中创建一个新的 Flex Project(选中 File > New > Flex Project)。

  2. 建立一个具有两种状态(login和 game)的基本应用程序:

    <s:states>    <s:State name="login"  />    <s:State name="game" />    </s:states>    
  3. 为login 状态添加代码,它由具有两个textInput控件(Room Name和 User Name) 的TitleWindow和一个Connect按钮组成:

    <s:TitleWindow includeIn="login" verticalCenter="0" horizontalCenter="0" width="300" height="180" >    <s:layout>    <s:VerticalLayout gap="5" verticalAlign="middle" horizontalAlign="center" />    </s:layout>    <s:HGroup verticalAlign="middle">    <s:Label text="Room Name:" width="80" textAlign="right" />    <s:TextInput id="txtRoomName" text="Test1" width="150" />    </s:HGroup>    <s:HGroup verticalAlign="middle">    <s:Label text="Your Name:" width="80" textAlign="right" />    <s:TextInput id="txtYourName" text="Damian" width="150" />    </s:HGroup>    <s:Button label="Connect" click="onConnect()" />    </s:TitleWindow>    
  4. 为game状态添加代码,它由在左侧显示一列连接用户的Hgroup、用户在右上部组成的语句和用户在右下部输入的下一个单词的textarea控件构成:

    <s:HGroup includeIn="game" verticalCenter="0" horizontalCenter="0">    <s:TitleWindow title="User List ({totalUsers})" width="150" height="300">    <s:List id="lUsers" dataProvider="{userList}" labelField="Name" width="100%" height="100%">    <!-- We use an item renderer to color red the name of the current user -->    <s:itemRenderer>    <fx:Component>    <s:ItemRenderer height="20">    <s:Label id="myLabel" width="100%" verticalCenter="0" text="{data.name}" color="{data.userId==data.current?0xff0000:0x000000}"/>    </s:ItemRenderer>    </fx:Component>    </s:itemRenderer>    </s:List>    </s:TitleWindow>    <s:TitleWindow title="Add a Word -- {userName} -- User Id:{userId}" width="500" height="300">    <s:layout>    <s:VerticalLayout verticalAlign="middle" horizontalAlign="center" />    </s:layout>    <s:TextArea editable="false" selectable="false" width="450" height="200" text="{text}" />    <s:HGroup id="hgSendText" gap="10" horizontalAlign="center" verticalAlign="middle" enabled="{userId==currentUser?true:false}">    <s:TextInput id="txtAddText" width="400" />    <s:Button label="Add Word" click="onSendText()" />    </s:HGroup>    </s:TitleWindow>    </s:HGroup>

    处于login状态的Connect按钮可以调用onConnect()函数。 该函数能够与服务器相连,并且能够获得远端共享对象。

  5. onConnect()添加到下列代码块:

    public function onConnect():void{    roomName = txtRoomName.text;    userName = txtYourName.text;    SharedObject.defaultObjectEncoding  = ObjectEncoding.AMF0;    /**    * Establish connection    * */    nc = new NetConnection();    nc.client = this;    nc.objectEncoding = ObjectEncoding.AMF0;    nc.addEventListener( NetStatusEvent.NET_STATUS, onNetStatus );    nc.connect( urlServer + "/" + weborbApplicationName + "/" + roomName );    /**    * Get Remote Object    * */    so = SharedObject.getRemote( sharedObjectName, nc.uri, false ,false);    so.client = this;    so.addEventListener( SyncEvent.SYNC, onSync );    so.connect( nc );    }    

    服务器 URL、WebORB 应用程序的名称以及远端对象的名称已经在前面以变量的形式进行声明。 聊天空间的名称可以从login窗口获得。 用户可以登录不同的聊天空间进行不同的语句游戏。

  6. 添加 setUserId() 函数,在连接过程结束时可以从服务器调用它。 使用该函数保存客户端的userID,这样你可以将它与username进行匹配。 此外,该函数还可以将应用程序的状态从login改变为 game。

    public function setUserId(userId:String):void    {    this.userId = userId;    this.currentState="game";    setName = true;    }    
  7. 添加onSync()函数,每次当远端共享对象具有一个 sync同步事件时可以调用该函数。 在客户端第一次登录时可以使用该函数设置客户端的名称。 此外,还可以使用该函数禁止/打开提交文字的按钮,以及更新登录用户的列表。当每次发生变化时,该函数将创建列表并且设置轮到用户的ID。 (参见具有完全实现功能的WeborbRSO.mxml。)

  8. 最后,添加onSendText() 函数,它能够将单词发送到服务器。 当用户点击Add Word按钮时,将调用该函数。 它能够在共享对象中方便地设置word 属性。

    public function onSendText():void {    so.setProperty("word",txtAddText.text);    txtAddText.text = "";    }    
  9. 编译该应用程序,然后尝试运行它。

下一步阅读方向

这一添加单词游戏仅仅是一个简单的应用程序,但它可以展示Remote Shared Objects的若干功能。 当然,有许多改善该应用程序功能的方法。 在开始阶段,你可能需要限制一个用户发送的内容仅仅为一个单词,并且不允许多个单词。 你也可以使用RSO在相同空间中一次跟综多个语句,如果你希望这样做的话。

本教程演示了RSO能够用于多种不同环境,例如在客户端之间共享信息,以及对实时在线游戏进行管理和同步等。 在你了解这些功能之后,你可以在你自己的应用程序中使用这些技巧。

你可以在Anden 解决方案中尝试运行该应用程序。

关于.NET的 WebORB的更多信息,请访问其概述网页


 

本产品经 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 许可。Adobe 提供超出该许可范围、与本产品包含的代码示例相关的权限。

关于作者

Damian Piccolo是一名信息系统工程师,并且是Anden Solutions的主席。他拥有超过8年的Flash、Flex、PHP和.NET应用程序的设计和开发经验。他使用WebORB超过3年时间。

Esteban Yofre 是Anden Solutions的首席开发者。他的Flash和Flex开发经验丰富,包括在过去3年中使用WebORB构建解决方案。