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