我的聊天室開發(fā)教程(三):和服務(wù)器之間傳遞參數(shù)
2004年11月30日00:11星期二 [
FMS
]
在使用FCS原來的組件過程中,默認(rèn)的與服務(wù)器之間傳遞的參數(shù)只有username變量,但是在開發(fā)自己的Flashcom應(yīng)用程序時,經(jīng)常需要向服務(wù)器傳遞更多的參數(shù)。要做到這一點,我們需要修改組件和服務(wù)器端的代碼。
先舉個簡單的例子。在SimpleConnect組件連接服務(wù)器的時候,是通過call指令呼叫服務(wù)器端的方法。
如果我們希望客戶端和服務(wù)器之間除了傳遞用戶名之外,還想傳遞用戶編號(便于后臺操作數(shù)據(jù)庫)、用戶性別(用于客戶端顯示性別標(biāo)識)、攝像頭是否可用、麥克風(fēng)是否可用(用于列表顯示狀態(tài))等參數(shù),可以修改服務(wù)器端的simpleconnect.asc文件connect方法,增加相應(yīng)的參數(shù):
接下來客戶端連接FCSimpleConnect對象的方式就按照服務(wù)器端定義的方法來調(diào)用就可以了,例如:
其實這些參數(shù)在simpleconnect.asc中并沒有實際的作用,只是用來說明向服務(wù)器傳遞變量的方法,并且方便以后的擴(kuò)展。如果希望使這些參數(shù)在全局有效,可以注冊服務(wù)器端全局變量。注冊方式類似于:
那么當(dāng)我們需要接受服務(wù)器端的參數(shù)呢,又應(yīng)該如何處理呢?下面通過peoplelist組件來看下客戶端如何實現(xiàn)接受服務(wù)器端的參數(shù)。
服務(wù)器端people.asc中connect方法代碼為:
在連接peoplelist組件的時候,會呼叫服務(wù)器端的FCPeopleList對象的call方法。
在同步用戶列表的時候,方法代碼修改為:
這樣,把每個用戶的相關(guān)信息全部記錄在list組件的data屬性中,便于后續(xù)的其它操作。
另外一個比較實際的應(yīng)用就是在chat組件的使用過程中,需要判斷用戶的身份,和發(fā)送私聊信息的時候需要知道私聊對象的名字,這些都需要擴(kuò)展服務(wù)器參數(shù)。這些地方各位可以仔細(xì)參詳源文件。
服務(wù)器端相關(guān)的asc文件下載:[ up/1101744642.rar ]
PS:如果需要在服務(wù)器端顯示中文,請把服務(wù)器端腳本文件轉(zhuǎn)換為utf8編碼格式。
先舉個簡單的例子。在SimpleConnect組件連接服務(wù)器的時候,是通過call指令呼叫服務(wù)器端的方法。
如果我們希望客戶端和服務(wù)器之間除了傳遞用戶名之外,還想傳遞用戶編號(便于后臺操作數(shù)據(jù)庫)、用戶性別(用于客戶端顯示性別標(biāo)識)、攝像頭是否可用、麥克風(fēng)是否可用(用于列表顯示狀態(tài))等參數(shù),可以修改服務(wù)器端的simpleconnect.asc文件connect方法,增加相應(yīng)的參數(shù):
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 : }
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對象的方式就按照服務(wù)器端定義的方法來調(diào)用就可以了,例如:
1 : this.nc.call(this.prefix + 'connect' , res, this.username, this.UserSex, this.Camera, this.Mic);
其實這些參數(shù)在simpleconnect.asc中并沒有實際的作用,只是用來說明向服務(wù)器傳遞變量的方法,并且方便以后的擴(kuò)展。如果希望使這些參數(shù)在全局有效,可以注冊服務(wù)器端全局變量。注冊方式類似于:
1 : cglobal.username = username;
那么當(dāng)我們需要接受服務(wù)器端的參數(shù)呢,又應(yīng)該如何處理呢?下面通過peoplelist組件來看下客戶端如何實現(xiàn)接受服務(wù)器端的參數(shù)。
服務(wù)器端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 : }
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組件的時候,會呼叫服務(wù)器端的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 : }
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 : }
這樣,把每個用戶的相關(guān)信息全部記錄在list組件的data屬性中,便于后續(xù)的其它操作。
另外一個比較實際的應(yīng)用就是在chat組件的使用過程中,需要判斷用戶的身份,和發(fā)送私聊信息的時候需要知道私聊對象的名字,這些都需要擴(kuò)展服務(wù)器參數(shù)。這些地方各位可以仔細(xì)參詳源文件。
服務(wù)器端相關(guān)的asc文件下載:[ up/1101744642.rar ]
PS:如果需要在服務(wù)器端顯示中文,請把服務(wù)器端腳本文件轉(zhuǎn)換為utf8編碼格式。