发现用sendIM方法可以直接发送群消息
发送成功后命令行显示捕获到错误,但是并不会列出原因...
修改了OnError的处理方法后,得到的错误信息如下:
出错啦:
--------The given key was not present in the dictionary.
-------- at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at LumaQQ.NET.Packets.PacketHelper.IsDuplicated(InPacket packet) in C:\Documents and Settings\doyle\My Documents\Visual Studio 2008\Projects\LumaQQ.net\LumaQQ.NET\Packets\PacketHelper.cs:line 120
at LumaQQ.NET.Packets.PacketHelper.ParseIn(IParser parser, ByteBuffer buf, Int32 length, QQUser user) in C:\Documents and Settings\doyle\My Documents\Visual Studio 2008\Projects\LumaQQ.net\LumaQQ.NET\Packets\PacketHelper.cs:line 176
at LumaQQ.NET.Packets.PacketHelper.ParseIn(ProtocolFamily supportedFamily, ByteBuffer buf, QQUser user) in C:\Documents and Settings\doyle\My Documents\Visual Studio 2008\Projects\LumaQQ.net\LumaQQ.NET\Packets\PacketHelper.cs:line 139
at LumaQQ.NET.Net.ConnectionPolicy.ParseIn(ByteBuffer buf) in C:\Documents and Settings\doyle\My Documents\Visual Studio 2008\Projects\LumaQQ.net\LumaQQ.NET\Net\ConnectionPolicy.cs:line 127
at LumaQQ.NET.Net.ConnectionPolicy.PushIn(ByteBuffer receiveIn) in C:\Documents and Settings\doyle\My Documents\Visual Studio 2008\Projects\LumaQQ.net\LumaQQ.NET\Net\ConnectionPolicy.cs:line 115
at LumaQQ.NET.Net.Sockets.SocketConnection.EndDataReceive(IAsyncResult ar) in C:\Documents and Settings\doyle\My Documents\Visual Studio 2008\Projects\LumaQQ.net\LumaQQ.NET\Net\Sockets\SocketConnection.cs:line 206
解决办法就是将 LumaQQ.NET.Packets.PacketHelper 中第119行,也就是IsDuplicated方法中
if (parsers[packet.GetFamily()] != null)
这一行
于是修改为
if (parsers.ContainsKey(packet.GetFamily()))
报错即消失...
虽然报错是理所当然的,因为毕竟我用sendIM来发送群消息了...应该报错...
但是,也确实不应该报这个错...
至于接收群消息,只要在MessageManager中参照ReceiveNormalIM写一份ReceiveClusterIM,然后在LuamQQ.NET.Events.BasicFamilyProcessor中ProcessReceiveIM方法中,在接收到群消息时发起ReceiveClusterIM事件
最后在program中注册事件响应方法即可完成
static void MessageManager_ReceiveClusterIM(object sender, QQEventArgs<ReceiveIMPacket, OutPacket> e)
{
string message = Util.GetString(e.InPacket.ClusterIM.MessageBytes);
WL("收到群:{0} 中 {1} 发来的信息:{2}",e.InPacket.ClusterIM.ExternalId,e.InPacket.ClusterIM.Sender,message);
//e.QQClient.MessageManager.SendClusterIM((int) e.InPacket.Header.Sender),string.Format("我收到你的临时消息:{0} {1}", message, "LumaQQ.NET"));
e.QQClient.MessageManager.SendIM((int)(e.InPacket.Header.Sender),string.Format("我收到你的临时消息:{0} {1}", message,"LumaQQ.NET"));
}
其中QQClient.MessageManager.SendClusterIM是参照SandIM和lumaqq中发送群消息的方法写的发送群消息的方法
但是总是报发送包超时的消息...无奈
希望阿不能早日完善群相关的部分