一、添加一个新的FluorineFx的服务类项目OnLineService,删除原有的Sample.cs,并添加一个用户类定义与一个ApplicationAdpater类:如下:

/*-- User.cs --*/

namespace OnLineService

{

public class User

{

public string UserName { get; set; }

public string UserPsw { get; set; }

}

}

/* --  ApplicationAdapter类:DemoApp.cs --*/

using FluorineFx;

using FluorineFx.Messaging.Adapter;

using FluorineFx.Messaging.Api;

using FluorineFx.Messaging.Api.SO;

namespace OnLineService

{

/// <summary>

/// Fluorine sample service.

/// </summary>

[RemotingService("用户登录状态测试程序")]

public class DemoApp:ApplicationAdapter

{

public override bool AppConnect(IConnection connection, object[] parameters)

{

string userName = parameters[0] as string;

string password = parameters[1] as string;

// 这里可以自定义登录判断验证逻辑,此处只要密码为000即可进入

if (password != "000")

return false;

// 将当前连接添加一个userName属性与当前登录用户关联起来

// 以便此连接掉线时,可以准确定位到其相关用户

connection.Client.SetAttribute("userName", userName);

//获取共享对象(OnLineUsers)

ISharedObject users_so = GetSharedObject(connection.Scope, "OnLineUsers");

if (users_so == null)

{

//第一个用户时共享对象不存在,需创建

CreateSharedObject(connection.Scope, "OnLineUsers", false);

users_so = GetSharedObject(connection.Scope, "OnLineUsers");

}

//更新共享对象key为用户名,value为用户对象

//value可以为更复杂的对象,但尽量不要打包List或array,因为Flex端解包不易

users_so.SetAttribute(userName, new User() { UserName = userName, UserPsw = password });

return true;

}

public override void AppDisconnect(IConnection connection)

{

string userName = connection.Client.GetAttribute("userName") as string;

ISharedObject users_so = GetSharedObject(connection.Scope, "OnLineUsers");

if (users_so != null)

{

//从共享对象中移除当前退出系统用户

users_so.RemoveAttribute(userName);

}

base.AppDisconnect(connection);

}

}

}

二、在解决方案中添加一个Fluorine.net Web项目

2.1 在Web根目录下添加apps文件夹,apps下添加OnLineUser文件夹,OnLineUser文件夹下添加app.config配置文件,其下配置应用程序处理为上面定义的DemoApp,如下:

2.2 修改WEB-INF下的service-config.xml,打开其my-rtmp信道配置节(fluorineFx添加的web项目时,默认会将此节注释掉,打开即可)

2.3 在根目录下添加Flex文件下,其下加入libs、src、swf三个子文件夹,将fds.swc拷入libs文件夹,其它两个文件夹在后面的步骤中分别用作 Flex项目的源文件与输出文件目录。

项目的文件组织如下:

三、在Flex Builder3中新建项目OnLineUserDemo,项目路径为2.3中的Flex文件夹,配置测试服务器为asp.net,WebRootUrl路径为vs运行网站时的路径,如下图中的兰色部分:

3.1 右击flex项目的属性(Properties),

配置FlexBuilderPath如下:

配置FlexCompier的参数如下:

注:上面的“E:..”请换成你本地项目中services-config.xml对应的路径(包括下面的Server配置)

配置FlexServce的参数如下:

3.2 以下为OnLineUserDemo.mxml源代码:

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"

width="600" height="382" backgroundGradientAlphas="[1.0, 1.0]"

backgroundGradientColors="[#000000, #049FF1]" fontSize="12">

<mx:Script>

<![CDATA[

import mx.controls.Alert;

import mx.messaging.config.ServerConfig;

private var nc:NetConnection;

private var so:SharedObject;

private function connectionServer(event:MouseEvent):void

{

var endpoint:String=ServerConfig.getChannel("my-rtmp").endpoint;

nc = new NetConnection();

nc.connect(endpoint+"/OnLineUser",this.txtUserName.text,this.txtPassword.text);

nc.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler);

nc.client = this;

}

private function onStatusHandler(event:NetStatusEvent):void

{

this.connStatus.text = "连接状态:" + event.info.code;

if(event.info.code == "NetConnection.Connect.Success")

{

//连接远程共享对象

so = SharedObject.getRemote("OnLineUsers",nc.uri,false);

if(so)

{

so.addEventListener(SyncEvent.SYNC,onSyncHandler);

so.connect(nc);

so.client = this;

}

onCallClient("用户【 <font color=\"#FF0000\">"+this.txtUserName.text+"</font>】登陆了系统!");

}

}

private function onSyncHandler(event:SyncEvent):void

{

var temp:Array = new Array();

//so.data中每一个元素即服务器端维护的每一个attribute

for(var u:Object in so.data)

{

temp.push(so.data[u]);

}

this.dgUserList.dataProvider = temp;

}

private function onCallClient(message:String):void

{

so.send("writeMsg",message);

//所以通过so的send方法,可以同时调用每个客户端的writeMsg程序,类似发送广播

}

//writeMsg一定要为public,否则so调用不到

public function writeMsg(message:Object):void

{

var param:String=message.toString();

txtTraceArea.htmlText += param + "\n";

txtTraceArea.validateNow();

txtTraceArea.verticalScrollPosition = txtTraceArea.maxVerticalScrollPosition;

}

]]>

</mx:Script>

<mx:Label x="302" y="153" id="connStatus" width="288" color="#FFFFFF"/>

<mx:Label x="302" y="181" id="nowRoom" width="288" color="#FFFFFF" />

<mx:DataGrid x="24" y="30" height="332" width="248" id="dgUserList">

<mx:columns>

<mx:DataGridColumn dataField="UserName" headerText="姓名"/>

<mx:DataGridColumn dataField="UserPsw" headerText="蜜码"/>

</mx:columns>

</mx:DataGrid>

<mx:Form x="302" y="30" width="236">

<mx:FormItem label="用户名:" color="#FFFFFF">

<mx:TextInput id="txtUserName" width="130" color="#000000"/>

</mx:FormItem>

<mx:FormItem label="密  码:" color="#FFFFFF">

<mx:TextInput id="txtPassword" width="130"

color="#000000" displayAsPassword="true"/>

</mx:FormItem>

<mx:FormItem label="">

<mx:Button label="登陆服务器" click="connectionServer(event)"

enabled="{this.txtUserName.text.length&gt;0?true:false}" color="#FFFFFF"/>

</mx:FormItem>

</mx:Form>

<mx:TextArea x="302" y="209" width="288" height="153" alpha="1.0"

backgroundColor="#F2D2D2" backgroundAlpha="0.26" color="#FFFFFF"

id="txtTraceArea" borderColor="#FFFFFF"/>

</mx:Application>

效果图:

转载于:https://www.cnblogs.com/rosiu/archive/2012/02/08/2342594.html

SharedObject使用:在FluorineFx.net与Flex中使用共享对象维护在线用户列表实例相关推荐

  1. linux系统中mywho命令,linux查看在线用户 who命令参数及用法

    linux who 命令 详解 Linux最常用命令之一 功能说明:显示目前登入系统的用户信息. 语 法:who [-Himqsw][--help][--version][am i][记录文件] 补充 ...

  2. 在Flex中使用本地共享对象

    本地共享对象的概念想必都很清楚了,有些类似于浏览器的Cookie,在Flash中提供了下面的操作本地对象的方法: SharedObject.clear() 删除本地共享对象 SharedObject. ...

  3. FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)

    FMS开发中,经常会使用共享对象来同步用户和存储数据.对于实现广播文字信息实现聊天的支持非常强大,还可以跟踪用户的时时动作,在开发Flash多人在线游戏中的应用也非常广阔. 在使用FMS开发共享对象时 ...

  4. 【转载】 详细介绍Flex中操作XML

    一  在介绍Flex中操作XML之前,首先简单介绍下XML中的基本术语. 元素:XML中拥有开始标签和结束标签的这一块称为"元素"     节点:把XML元素与文本结合起来统称为节 ...

  5. python list存储对象_《python解释器源码剖析》第4章--python中的list对象

    4.0 序 python中的list对象,底层对应的则是PyListObject.如果你熟悉C++,那么会很容易和C++中的list联系起来.但实际上,这个C++中的list大相径庭,反而和STL中的 ...

  6. FLEX中的Fluorine网关与WebService的区别

    因为无论是FLEX,还是Silverlight.AJAX,他们都无法直接操作数据库(据最新消息,微软有了Microsoft .NET RIA Services,它可以直接操作数据库,我期待着她能在VS ...

  7. flash中制的SWC组件怎样导入到flex中使用

    flash中制的SWC组件怎样导入到flex中使用 2010-04-30 11:18 在使用FLASH导出SWC组件文件后,放入项目的LIB文件夹,然后要用实例化一个对象才能进行时操作使用, 但要记得 ...

  8. Flex中如何通过horizontalTickAligned和verticalTickAligned样式指定线图LineChart横竖方向轴心标记的例子...

    原文 http://blog.minidx.com/2008/12/03/1669.html 接下来的例子演示了Flex中如何通过horizontalTickAligned和verticalTickA ...

  9. (转)flex中使用swc实现更好的界面代码分离

    flex中使用swc实现更好的界面代码分离 转自:http://www.cnblogs.com/yjmyzz/archive/2010/07/26/1785265.html 前几天写过一篇" ...

  10. FLEX中的MDI窗口包--flexmdi

    在FLEX中创建MDI窗口,强烈推荐这个包. 下载地址:http://code.google.com/p/flexmdi/ 示例:http://www.returnundefined.com/flex ...

最新文章

  1. 安全问题会对网络购物季产生负面影响吗
  2. DAY19-Pillow制作验证码
  3. heima-Oracle学习-day1
  4. rest php,REST介绍与REST在PHP中的应用
  5. sdh管理单元指针_「干货三」SDH技术重点知识分布(附小技巧)
  6. 2016012052+小学四则运算练习软件项目报告
  7. 全民营销,只看这篇文章就够了
  8. OpenCV4图像处理算子不完全手册-应用篇
  9. 修改程序的图标与详细描述
  10. 兰浦秋来烟雨深 几多情思在琴心
  11. 你的代码暴漏了你的年龄(毕业设计)--技术文档+程序源代码
  12. ansys 服务器无响应,ANSYS出现的各种错误及解决方法
  13. 取消卸载 Symantec 客户端需要密码提示
  14. React Native学习-第一篇
  15. 35位嘉宾的“2022年元宇宙趋势研判”!丨2022元宇宙云峰会金句集锦
  16. 五洲制冷中央空调西门子S7-200 PLC控制系统程序 PLC和屏程序
  17. 助力零售业降本增效,零售业相关场景RPA应用
  18. 中国历史上15个民族的最后结局
  19. visualsvn php,windowns下使用TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
  20. 计算机网络实验报告----计算机基本网络配置

热门文章

  1. python模拟浏览器访问百度_selenium与python自动化测试模拟登录百度
  2. 用python画三角函数
  3. jQuery Form Plugin (二) :使用AJAX提交Form表单
  4. android textview 添加阴影效果:Paint.setShadowLayer is not supported
  5. 牛客多校第九场H Cutting Bamboos(主席树 区间比k小的个数)题解
  6. iOS 开发之 GCD 不同场景使用
  7. MySQL错误Another MySQL daemon already running with the same unix socket.
  8. ListView多种item注意以及自己出现的莫名其妙的错误
  9. Linux_access the file or directory which start with -
  10. java学习笔记-设计模式22(访问者模式)