隨筆 - 8  文章 - 55  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          朋友的Blog

          最新評論

          閱讀排行榜

          評論排行榜

          我的聊天室開發教程(三):和服務器之間傳遞參數

          2004年11月30日00:11星期二 [ FMS ]


          在使用FCS原來的組件過程中,默認的與服務器之間傳遞的參數只有username變量,但是在開發自己的Flashcom應用程序時,經常需要向服務器傳遞更多的參數。要做到這一點,我們需要修改組件和服務器端的代碼。
          先舉個簡單的例子。在SimpleConnect組件連接服務器的時候,是通過call指令呼叫服務器端的方法。
          如果我們希望客戶端和服務器之間除了傳遞用戶名之外,還想傳遞用戶編號(便于后臺操作數據庫)、用戶性別(用于客戶端顯示性別標識)、攝像頭是否可用、麥克風是否可用(用于列表顯示狀態)等參數,可以修改服務器端的simpleconnect.asc文件connect方法,增加相應的參數:
          1 : FCSimpleConnect.prototype.connect = function( client, username, userId, userSex,cam,mic) {
          2 : var clocal = this.getClientLocalStorage(client);
          3 : var cglobal = this.getClientGlobalStorage(client);
          4 : cglobal.username = username;
          5 : clocal.id = 'u' + this.getClientID(client);
          6 : this.users_so.setProperty(client.id, { id:userId, name:username, sex:userSex,cam:cam,mic:mic });
          7 : return clocal.id;
          8 : }

          接下來客戶端連接FCSimpleConnect對象的方式就按照服務器端定義的方法來調用就可以了,例如:
          1 : this.nc.call(this.prefix + 'connect' , res, this.username, this.UserSex, this.Camera, this.Mic);

          其實這些參數在simpleconnect.asc中并沒有實際的作用,只是用來說明向服務器傳遞變量的方法,并且方便以后的擴展。如果希望使這些參數在全局有效,可以注冊服務器端全局變量。注冊方式類似于:
          1 : cglobal.username = username;

          那么當我們需要接受服務器端的參數呢,又應該如何處理呢?下面通過peoplelist組件來看下客戶端如何實現接受服務器端的參數。
          服務器端people.asc中connect方法代碼為:
          1 : FCPeopleList.prototype.connect = function( client,userSex,cam,mic ) {
          2 : var cglobal = this.getClientGlobalStorage(client);
          3 : var clocal = this.getClientLocalStorage(client);
          4 : clocal.id = 'u' + this.getClientID(client);
          5 : userName=cglobal.username == null ? ' fc_lurker'
          : cglobal.username;
          6 : this.users_so.setProperty(clocal.id, { name:userName, cam:cam,mic:mic,sex:userSex,ip:client.ip });
          7 : }

          在連接peoplelist組件的時候,會呼叫服務器端的FCPeopleList對象的call方法。
          1 : this.nc.call(this.prefix + 'connect' , null, this.UserSex, this.Camera, this.Mic );

          在同步用戶列表的時候,方法代碼修改為:
          01 : this.so.onSync = function(list) {
          02 : this.owner.people_lb.removeAll();
          03 : var totalUsers = 0;
          04 : var totalLurkers = 0;
          05 : for (var i in this.data) {
          06 : if (this.data[ i ].name == ' fc_lurker'
          ) {
          07 : totalLurkers++;
          08 : } elseif (this.data[ i ].name != null) {
          09 : totalUsers++;
          10 : this.owner.people_lb.addItem(this.data[ i ].name,{ id:i,sex:this.data[ i ].sex,name:this.data[ i ].name,ip:this.data[ i ].ip,cam:this.data[ i ].cam,mic:this.data[ i ].mic });
          11 : }
          12 : }

          這樣,把每個用戶的相關信息全部記錄在list組件的data屬性中,便于后續的其它操作。
          另外一個比較實際的應用就是在chat組件的使用過程中,需要判斷用戶的身份,和發送私聊信息的時候需要知道私聊對象的名字,這些都需要擴展服務器參數。這些地方各位可以仔細參詳源文件。
          服務器端相關的asc文件下載:[
          up/1101744642.rar ]
          PS:如果需要在服務器端顯示中文,請把服務器端腳本文件轉換為utf8編碼格式。
          posted on 2006-06-08 13:56 blog搬家了--[www.ialway.com/blog] 閱讀(494) 評論(0)  編輯  收藏 所屬分類: FMS
          主站蜘蛛池模板: 离岛区| 卢氏县| 汽车| 怀柔区| 湖口县| 垣曲县| 彰武县| 盖州市| 长丰县| 张家港市| 锡林郭勒盟| 滨州市| 于都县| 特克斯县| 莱阳市| 盘山县| 城口县| 陈巴尔虎旗| 兰坪| 泗水县| 沿河| 民县| 营山县| 丹东市| 金湖县| 扎囊县| 东乌珠穆沁旗| 蓝山县| 景东| 北辰区| 沛县| 登封市| 马鞍山市| 陆河县| 田东县| 新乡市| 涿鹿县| 镇原县| 体育| 尤溪县| 加查县|