客户端信息对象FlashCom Develop阅读笔记 (十五)

2006-03-09 00:44:40

在FlashCom中的Camera, Microphone, LocalConnection, NetConnection,NetStream和SharedObject对象都提供了onStatus事件响应,onstatus事件的返回信息记录在信息对象中。为了能够响应这些事件,你必须创建一个方法来处理信息对象,而最重要的一点是你必须要清楚不同的信息对象返回值和返回类型。 信息对象具有下面的属性。 code 记录信息的返回内容 level 信息等级状态,有status 状态 warning 警告 error 错误 下面对FlashCom中的对象的onstatus返回值作个总结。 Camera信息对象 Camera.Muted (Status) 用户拒绝使用camera Camera.Unmuted (Status) 用户允许使用camera LocalConnection信息对象 none (status) none (error) Microphone信息对象 Microphone.Muted (Status) 用户拒绝使用microphone. Microphone.Unmuted (Status) 用户允许使用microphone. NetConnect信息对象 NetConnection.Call.Failed (Error) NetConnection.call方法调用服务器端的方法或命令失败 NetConnection.Connect.AppShutdown (Error) 服务器端应用程序已经关闭(由于资源耗用过大等原因)或者服务器已经关闭. NetConnection.Connect.Closed (Status) 连接中断 NetConnection.Connect.Failed (Error) 连接失败 NetConnection.Connect.InvalidApp (Error) 指定的应用程序名称没有找到 NetConnection.Connect.Rejected (Error) 连接被拒绝 NetConnection.Connect.Success (Status) 连接成功 NetStream 信息对象 NetStream.Buffer.Empty (Status) 数据缓冲区为空 NetStream.Buffer.Full (Status) 缓冲区已慢 NetStream.Failed (Error) 传输中有错误发生 NetStream.Pause.Notify (Status) 播放暂停 NetStream.Play.Failed (Error) 播放出错 NetStream.Play.PublishNotify (Status) 发布开始,信息已经发送到所有订阅者 NetStream.Play.Reset (Status) 播放列表重置 NetStream.Play.Start (Status) 播放开始 NetStream.Play.Stop (Status) 播放停止 NetStream.Play.StreamNotFound (Error) 播放的实时流或文件不存在 NetStream.Play.UnpublishNotify (Status) 发布停止,信息已经发送到所有订阅者 NetStream.Publish.BadName (Error) 发布的数据流已经被发布 NetStream.Publish.Idle (Status) 发布者闲置过长 NetStream.Publish.Start (Status) 发布开始 NetStream.Record.Failed (Error) 录制文件出错 NetStream.Record.NoAccess (Error) 没有足够的文件访问权限 NetStream.Record.Start (Status) 文件录制开始 NetStream.Record.Stop (Status) 录制暂停 NetStream.Seek.Failed (Error) 数据流定位出错 NetStream.Seek.Notify (Status) 数据搜索定位成功 NetStream.Unpause.Notify (Status) 恢复播放 NetStream.Unpublish.Success (Status) 停止发布 ShareObject信息对象 SharedObject.BadPersistence (Error) SharedObject.getRemote方法传递的参数不匹配 SharedObject.Flush.Failed Error 写入失败 SharedObject.Flush.Success (Status) 写入成功 SharedObject.UriMismatch (Error) SharedObject.connect的url参数和SharedObject.getRemote方法不一致 注意:对于NetStream、NetConnect和远程共享对象而言,在联机情况下onStatus有更多的返回值,这些返回值将会在服务器端信息对象中介绍,其它对象无须联机也可以响应到返回值。 针对以上不同的对象可以指定各自的onstatus方法,Macromedia 在Flash中提供了一个“超级”函数叫做System.onStatus ,如果某个对象的onstatus响应的level属性是error,并且没有指定响应操作的时候,Flash会触发System.onStatus事件。 下面的例子演示了如何创建通用的或者特殊的方法来处理信息对象: 01 : //创建通用方法 02 : System.onStatus = function (genericError) 03 : { 04 : // 在这里写上详细的处理代码 05 : trace( 'An error has occurred. Please try again.' ); 06 : }; 07 : // 创建NetConnection对象的onstatus响应方法 08 : // 如果连接返回的值在响应事件中没有定义,并且是error等级的话 09 : // System.onStatus 事件会被响应 10 : nConn.onStatus = function (infoObject) 11 : { 12 : if (infoObject.code == 'NetConnection.Connect.Success' ) 13 : { 14 : trace( 'Successful connection.' ); 15 : } 16 : if (infoObject.code == 'NetConnection.Connect.Failed' ) 17 : { 18 : trace( 'Connection failed.' ); 19 : } 20 : }; 21 : // Attempt to open connection 22 : nConn = new NetConnection(); 23 : nConn.connect( 'rtmp://myServer.myDomain.com/myRTMPapp' ); 聊天室客户端限制历史记录数的方法 有时候,客户端历史记录不断的增加,会导致Flash运行和反应的迟钝,可以通过限制历史记录数的方法改善。 在客户端的chat组件代码中找到receiveMessage方法,使用下面的代码替换 1 : FCChatClass.prototype.receiveMessage = function( mesg ) { 2 : //this.history_txt.htmlText += mesg; 这行是原先的实现代码 3 : this.history.push(mesg); 4 : if (this.history.length>30) this.history.shift(); 5 : this.history_txt.htmlText = this.history.join(''); 6 : this.history_txt.scroll = this.history_txt.maxscroll; 7 : } 其中限制记录数可以自己调整,这里设为30。 在FCChatClass.prototype.init方法中定义history数组来保存本地聊天记录信息 1 : this.history = new Array(); 还有一个地方要注意,在清空历史时候,也要把本地聊天记录数组清空: 1 : this.history.splice(0); 表情组件的中文问题已经解决 多谢Luar的指点和分享这些代码,困扰的中文输入会影响表情定位的问题终于解决了。 在组件代码中updatePixelPos方法找到 1 : this.pixel_pos += this.CHAR_WIDTH_MAP[Math.min(1, this.is_bold)][string.charCodeAt(pos)]; 替换成下面这段代码: 1 : //************************************************************* 2 : // Because all English Characters' width is stored in Array 3 : // If return undefined, it is Chinese character, 4 : // Hardcode Chinese character width = 13 5 : //************************************************************* 6 : var ccWIDTH = this.CHAR_WIDTH_MAP[Math.min(1, this.is_bold)][string.charCodeAt(pos)]; 7 : ccWIDTH = (ccWIDTH == undefined) ? 13 : ccWIDTH;//这行就是解决问题的所在 8 : this.pixel_pos += ccWIDTH; 然后在parseHtmlShortcuts方法中找到 1 : test_pos += this.CHAR_WIDTH_MAP[Math.min(1, this.is_bold)][shortcut_str.charCodeAt(j)]; 替换成下面代码: 1 : //************************************************************* 2 : // Because all English Characters' width is stored in Array 3 : // If return undefined, it is Chinese character, 4 : // Hardcode Chinese character width = 13 5 : //************************************************************* 6 : var ccWIDTH = this.CHAR_WIDTH_MAP[Math.min(1, this.is_bold)][shortcut_str.charCodeAt(j)]; 7 : ccWIDTH = (ccWIDTH == undefined) ? 13 : ccWIDTH; 8 : test_pos += ccWIDTH; 9 : // 以上均引用luar的修改代码,非常感谢luar!