以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何在服务器端保留用户之间、服务器与用户之间的发送和接收消息  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=179379)

--  作者:chnfo
--  发布时间:2022/8/20 17:54:00
--  [求助]如何在服务器端保留用户之间、服务器与用户之间的发送和接收消息
目前帮助里的openQQ,服务器一旦消息发送成功或者转发消息成功,这些消息就从自带的数据库中清除了。
如何保留服务器主动发送、服务器转发的消息呢?

我建了宋江和吴用两个账号,而且都登录了,然后用吴用的账号在命令窗口里这样

QQClient.Send("宋江","看看服务器能转发这条消息吗",True)
但在宋江的消息mdb里并没有这条消息 


服务器这样
QQServer.Send("宋江","服务器有直发这条消息吗",True)
服务器的消息mdb里并没有这条消息 

试了一下,QQServer.Send的信息不会在自带的数据库里,QQServer.SendNotice才会?
[此贴子已经被作者于2022/8/20 18:35:07编辑过]

--  作者:chnfo
--  发布时间:2022/8/20 22:18:00
--  
不使用系统内置的用户表,而是使用共享数据库的用户表,而且用户表没有部门这一列,只有工号、姓名、密码这三列。
不使用内置聊天窗口

拿实际数据测试情况如下
1、服务器使用QQServer.SendNotice("宋江","上午9点集合,地点人民广场!")
那么这个消息在发送完以后,当宋江不在线时,会存放在服务器的消息mdb中,而且会在宋江登录上线以后,会出现在宋江的消息mdb中,但不会出现在内部表的消息表中;然后这条消息在服务器的消息mdb中会自动清除
2、服务器使用QQServer.Send("宋江","上午9点集合,地点人民广场!",true)
那么这个消息在发送完以后,当宋江不在线时,不知道会存放在哪里
在宋江登录上线以后,不会出现在宋江的消息mdb中,但会出现在内部表的消息表中

服务器使用SendNotice和Send发送消息,客户端存放的地址正好相反。前者存在用户.mdb中,后者存在内部表中

问题是:信息内部表是所有用户共用的,例如张三和李四共用一台电脑,但使用不同账户登录时,内部“信息”表无法区分消息是发给谁的
如果用户不使用内部聊天窗口,就找不到历史消息记录了

2、客户端的账号“吴用”使用QQClient.Send("宋江","吴用给宋江的信息1",true)
这时候,不论在服务端.mdb,还是吴用.mdb,还是宋江mdb,还是客户端的内部“信息”表都看不到这条信息
当宋江再登录的时候,这条消息也接收不到。

3、客户端的账号“吴用”使用QQClient.Send("吴用给服务器的信息1")
这时候,不论在服务端.mdb,还是吴用.mdb,还是客户端的内部“信息”表都看不到这条信息

这是不是有问题啊?
(1)服务器使用send发送的消息,只能存放在客户端的“信息”内部表中,而且无法识别服务器发给谁的。在接收者.mdb中看不到记录
(2)客户端使用send发给服务器或者其它用户的信息,不论在客户端的“信息”内部表、还是服务器.mdb、接收者.mdb、发送者.mdb中都找不到
(3)只有服务端使用sendnotice发给用户的消息,才能在接收者.mdb中看得到

也就是说,不用部门.用户,用户间互相发消息都用不了

[此贴子已经被作者于2022/8/20 22:58:48编辑过]

--  作者:chnfo
--  发布时间:2022/8/20 23:02:00
--  
帮助里的:自定义信息提示窗口
图片点击可在新窗口打开查看此主题相关图片如下:bug.png
图片点击可在新窗口打开查看
里,所使用的
QQClient.Send("李四","+@|" & r("_Identify") & "|" & r("单号") & "|" & User.Name)
没法用得上
因为张三直接给李四发消息,根本就收不到
[此贴子已经被作者于2022/8/20 23:16:32编辑过]

--  作者:有点蓝
--  发布时间:2022/8/21 20:50:00
--  
使用代码发送的消息,自己在ReceivedMessage事件记录接收的消息
--  作者:chnfo
--  发布时间:2022/8/21 22:51:00
--  
有啊,我现在复制了两个qqclient一个叫qqclient宋江,一个叫qqclient吴用

然后它们的客户端ReceivedMessage事件都有啊(抄的示例文件的)
Dim dr As DataRow = DataTables("信息").AddNew
dr("发送者") = IIf(e.UserName > "", e.UserName, "服务器")
dr("时间") = Date.Now()
dr("信息") = e.Message

在宋江的命令窗口发送信息
QQClient.Send("吴用","今天去劫个法场")
吴用的客户端无反应


图片点击可在新窗口打开查看此主题相关图片如下:无标题.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2022/8/21 22:55:21编辑过]

--  作者:有点蓝
--  发布时间:2022/8/21 23:21:00
--  
应该是接收的用户名不正确。

用于发送信息,语法为:

Send(BuddyName, Message, Anyway)

BuddyName: 好友名称
Message:  信息内容
AnyWay:   可选参数,逻辑型,如果对方不在线,是否发离线消息。

例如向生产部的林海发送消息:

QQClient.Send("生产部.林海","今天的任务完成了吗")


服务端是怎么添加好友的?