用户间通讯
提示:本节的内容已经过时,大家可以直接使用Foxtable内置的OpenQQ实现用户间的即时通讯功能。
在学习以下内容之前,可以先打开CaseStudy目录下的文件:用户通讯.Table
请启动两个Foxtable打开此文件,分别用张三和李四登录,互相发送信息,5秒钟之后对方即可收到,具体时间可以自行调整,但不宜过短,因为时间间隔越短,服务器负载就越大,用户多的时候尤甚
。
设计步骤:
1、首先通过代码或者设置,使得信息表在初始状态不加载任何数据。
如果是内部表,设置BeforeLoadInnerTable事件为:
If
e.DataTableName = "信息表"
Then
e.Filter =
"[_Identify] Is Null"
End
If
如果是外部表,可以在定义外部表的时候,直接定义加载条件:
3、然后在项目事件LoadUserSetting事件中设置代码,只加载登录用户发送或接受的信息:
Dim
Filter
As
String
Select Case
User.Name
Case
"张三","李四",
"王五"
Filter =
"接收者 = '" & User.Name &
"' Or 发送者 = '" &
User.Name & "'"
Case
Else
Filter = ""
'其他用户记载所有行
End Select
DataTables("信息表").LoadFilter
= Filter
DataTables("信息表").Load()
Dim drs
As
List(of DataRow) =
DataTables("信息表").Select("接收者
= '" & User.Name &
"' And 接收时间 Is Null")
If drs.Count >
0
Then
For Each
dr As
DataRow
In drs
dr("接收时间")
= Date.Now
Next
DataTables("信息表").Save()
End
If
上面的代码只针对张三、李四、王五进行了设置,所以如果是其他用户登录,如开发者或管理员,将加载所有行。
4、在PrepareEdit事件中设置代码,禁止用户直接编辑信息表:
e.Cancel =
True
5、新建一个下图所示的窗口:
发送按钮的代码为:
Dim
re
As
String = e.Form.Controls("ComboBox1").Value
'获得接收用户名
Dim cn As
String =
e.Form.Controls("TextBox1").Text
'获得发送内容
If re = "" OrElse
cn = "" Then
Return
End If
If re = User.Name
Then
MessageBox.Show("不能给自己发信息!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
Return
End If
Dim r As
Row =
Tables("信息表").AddNew()
r("发送者") = User.Name
r("发送时间") =
Date.Now
r("接收者") = re
r("内容") = cn
r.Save()
6、新建一个计划,计划的执行间隔为5秒(即5000毫秒),代码为:
Dim
flt
As
String
Dim drs
As
List(Of DataRow)
flt = "接收者 = '"
& User.Name & "'
And 接收时间 Is Null"
drs = DataTables("信息表").AppendLoad(flt,
False)
For
Each dr As
DataRow
In drs
dr("接收时间")
= Date.Now()
dr.Save()
Next
实际应用的时候,只要不影响工作时效,时间间隔应该尽可能长一些,以免用户较多的时候,服务器负载过重,毕竟我们设计的不是一个类似QQ的即时通讯系统,大多数时候只是用于内部通知的发送而已
。
本页地址:http://www.foxtable.com/webhelp/topics/2265.htm