#22001/6/25 13:01:23
东影默兄,我就不发给你了,直接跟帖把,这两天好懒,不想动任何事,再加上我一看源程序就好失望好象我是见过的,所以一直没有写,今天想想不行,既然自己答应要做的,还是先把它的写出来才是
这个程序主要是表现如何建立连接,用户创建与删除,创建应用实例,获取信息等方法,
当创建一个Multiuser Xtra实例之后的第一件事是要定义一个或若干个负责处理接受到的消息的回调函数,调用setNetMessageHandler(#handlerName,handlerObject,{subject,{sender}}{,integerPassMessage})来定义回调函数, integerPassMessage为正数时,消息作为参数传递给回调函数,默认是0不传递,subject与sender的使用可以让你定义不同的函数来处理不同的发送人,以及他们发送的不同类型的消息
原程序使用的是
gConnect.setNetMessageHandler(#DefaultMessageHandler, script 1)
他的回调函数是DefaultMessageHandler,此函数是在第一个script中,接受到的消息并没有作为参数传递到DefaultMessageHandler函数,而是在该函数里调用gConnect.getNetMessage()来获取受到的消息,并且所有消息都用函数DefaultMessageHandler来处理
第二建立连接,用connectToNetServer(userName,password,serverID,portNumber,movieID{,mode}{,encryptionKey})
程序里用的是
gConnect.connectToNetServer(whichName, whichPass, whichServer, 1626, "test")
几个参数都是由文本框得到的,1626端口是Shockwave MultiUser Server默认的端口,并且登记本movie的ID为test,如果你想在本机上测试的话,把serverID写上你机器的IP就可以了,当然你还要在你机器上运行MultiuserServer
到这里与服务端的连接就建立起来了,剩下的就是创建用户,创建应用了
对于服务端来说,只有userLever等级达到80以上才可以执行server端程序,所以如果你只是简单的运行这个例子的话,执行DBAdmin Objects只能得到Not permitted with this user lever!的错误,因为在服务端根本不存在这个属于admin级别的user,但是如果你是在本机上运行的话,可以先把MultiUser Server同一目录下的MultiUser.cfg文件中“# DefaultUserLevel = 20”的20改为80以上,并把#去掉存盘后再运行MultiUser Server,这样默认的登录者就是admin,这样就可以运行system.DBAdmin类型的命令了
通常服务端无非就是要保存用户、程序环境变量等信息,并且当用户发出查询请求是给以反馈,这在MultiUser Server上的体现就是创建用户,创建应用实例,对该应用实例添加属性,属性值,对用户的查询返回以及对保存在服务端的数据的清除。原程序里分别对上面所说的举出了例子
创建用户: errCode = gConnect.sendNetMessage("System.DBAdmin.CreateUser", "CreateUser", [#userID: whichUserID, #password: whichPass, #userlevel: whichLevel] )
第一个参数是创建用户的命令System.DBAdmin.CreateUser
第二个参数无所谓,除非在服务端有相应Subject的回调函数,否则它是被ignore的
第三个参数就跟的是对于命令System.DBAdmin.CreateUser()所需要的参数了
服务端的返回值被放置在变量errCode里,返回值的格式为
[#errorCode:theCode,#recipients:[userName],#senderID:”system.DBAdmin.createUser”,#subject:”anySubject”,#content:[#userID:”theUserAdded”],#timeStamp:theTime]
#errorCode:误代码
#recipients:返回消息接收对象的名字
#senderID:发送者名字
#subject:由程式开发者自定义的一个字符串,还记得前面说的setNetMessageHandler吗?这里的subject就跟前面的subject相互对应了,可以根据该字符串可以对不同的消息调用不同的回调函数
#content:服务器对于你的请求所返回的具体值了
#timeStamp:该操作所用时间
对于我们估计要注意的就是#errorCode的值如果不为0那就表示有错误,通过调用gConnect.getNetErrorString(errCode)可以得到错误值所代表的字符意思;以及content里面的内容了。
程序往下的处理方式都与上面创建用户的方法相同,就是往服务器端发送相应命令,并把返回值傅给一变量,通过对该变量进行处理,至于该返回值的格式我找到了一个MultiUser Server的帮助文件,放在http://go.163.com/zwjn/mu_server_2.1.pdf.zip,
感兴趣的自己去下把,我就不再写分析了
至此
:cool:
编辑历史:[这消息被东影默编辑过(编辑时间2001-06-25 23:13:55)]