以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- server错误事件不知道在哪 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89599) |
-- 作者:kao_go -- 发布时间:2016/8/25 11:14:00 -- server错误事件不知道在哪 这个错误事件不知道在哪 |
-- 作者:Hyphen -- 发布时间:2016/8/25 11:27:00 -- 应该是连接数据库超时了 |
-- 作者:kao_go -- 发布时间:2016/8/25 11:35:00 -- 这个做的是QQserver的服务端,,一出现这个错误就导致其他的客户端不能登陆了(已登陆的可以正常使用),关掉错误提示,才可以正常登陆 |
-- 作者:Hyphen -- 发布时间:2016/8/25 11:53:00 -- QQserver相关事件代码贴出来看看,特别是网络监视器的事件代码 |
-- 作者:kao_go -- 发布时间:2016/8/25 13:35:00 -- 窗口表添加汇总模式后 ,再关闭窗口会延迟 网络监视器里设置了三个事件的代码这是我的服务端 [此贴子已经被作者于2016/8/25 14:14:18编辑过]
|
-- 作者:大红袍 -- 发布时间:2016/8/25 15:11:00 -- 贴出代码看看。 |
-- 作者:kao_go -- 发布时间:2016/8/25 15:41:00 -- userlogging事件 Dim dls() As String = e.UserName.Split(".") \'获取登陆(渠道,客户,用户组,代码和名称),共3项 Dim dt1 As DataTable Dim cmd1 As new SQLCommand cmd1.C cmd1.CommandText="select * f rom yonghu where yhdm=\'" & dls(3) & "\'" dt1=cmd1.ExecuteReader Dim dr1 As DataRow = dt1.DataRows(0) If dr1 Is Nothing Then \'判断此用户不存在 e.Message = "用户名错误!" \'返回给登录者的提示信息 Return End If If dr1("mima") <> e.Password Then \'如果密码错误 e.Message = "登录密码错误!" \'返回给登录者的提示信息 Return End If If dr1("tzsy") =True Then \'如果密码错误 e.Message = "您的账号已经停止使用!" \'返回给登录者的提示信息 Return End If For Each User As QQUser In QQserver.Users \'检查用户是否已登录过 If user.Name = e.UserName Then \'如果账号已经登录过 e.Message = "您的账号已经登录,不允许重复登录!" \'返回给登录者的提示信息 QQServer.Send(e.UserName,"tuichu") \'发送信息到客户端,要求下线 Return End If Next e.Success = True \'允许用户登录 \'添加所有同事为好友 Dim sql1 As String ="Select a.*,b.yhzmc,c.khmc,d.qdmc F rom yonghu as a " Dim sql2 As String =" left outer join yhz as b on a.yhzdm=b.yhzdm " Dim sql3 As String =" left outer join kehu as c on b.khdm=c.khdm" Dim sql4 As String =" left outer join qudao as d on c.qddm=d.qddm" Dim sqltext=sql1+sql2+sql3+sql4 Dim cmd As New SQLCommand cmd.C Dim dt As DataTable cmd.CommandText = sqltext dt = cmd.ExecuteReader() For Each dr As DataRow In dt.Select("", "yhdm") Dim nm As String = dr("qdmc") & "." & dr("khmc") & "." & dr("yhzmc") & "." & dr("yhdm") & "." & dr("yhmc") If nm <> e.UserName Then \'如果不是登录者本人 e.Buddies.Add(nm) End If Next userlogout事件 Dim Keys As New List(of String) For Each Key As String In _duzhan.Keys If _duzhan(Key) = e.UserName Then Keys.Add(Key) End If Next For Each Key As String In Keys _duzhan.Remove(Key) Next \'这样当有用户退出登录时,不管他是正常退出还是异常退出,都可以将字典中该用户的编辑登记移除,避免死锁. \'客户端用户异常退出时,服务端的编辑登记的移除会有一个延时,时长取决于QQServer的HeartbeatTimeout(心跳超时)属性. \'上述编码有一个地方需要注意,我们不能在遍历字典或集合的过程中移除其成员(运行时会报错), \'所以我们用一个临时的集合Keys,先将要移除的键值保存在这个集合中,最后遍历这个集合中的键值,从字典_duzhan中移除这些键值. receivedmessage事件 \'接收客户端参数并返回相应信息 Dim msg As String = e.Message If msg.StartsWith("?#") AndAlso msg.EndsWith("#?") Then \'收到请求编辑信号 Dim Key As String = msg.SubString(2,msg.Length - 4) If _duzhan.Containskey(Key) = False Then \'如果无人编辑此行 _duzhan.Add(Key,e.UserName) \'登记申请者为此行的编辑者 e.ReturnValue = "OK" \'通知申请者可以编辑 ElseIf _duzhan(Key) = e.UserName Then \'如果申请者就是之前登记的编辑者 e.ReturnValue = "OK" \'通知申请者可以编辑 Else \'如果之前登记的编辑者为其他人 e.ReturnValue = _duzhan(Key) & "正在编辑此行!" \'告知申请者是谁在编辑此行 End If ElseIf msg.StartsWith("!#") AndAlso msg.EndsWith("#!") Then \'收到结束编辑信号 Dim Key As String = msg.SubString(2,msg.Length - 4) If _duzhan.Containskey(Key) Then _duzhan.Remove(Key) \'从集合中移除此行的编辑登记 End If End If If e.Message="ean13" Then \'国标码(厂商识别代码) e.ReturnValue=GetConfigValue("ean13","000") End If If e.Message="wymlsh" Then \'唯一码流水号长度(默认为4) e.ReturnValue=GetConfigValue("wymlsh","4") End If |
-- 作者:大红袍 -- 发布时间:2016/8/25 17:00:00 -- 在userLoggin事件,尽量不要用 Dim cmd1 As new SQLCommand 这种方式查询数据。
尽量还是一次性把数据加载进来,直接find,如果频繁使用sql语句,而且服务器不在同一台电脑的话,有可能会因为连不上数据库二报错的。
|
-- 作者:kao_go -- 发布时间:2016/8/25 17:07:00 -- 好的,我先试试,谢谢红袍老师 |