void MessageManager_ReceiveNormalIM(object sender, LumaQQ.NET.Events.QQEventArgs<LumaQQ.NET.Packets.In.ReceiveIMPacket, OutPacket> e)
{ if (e.InPacket.NormalIM.TotalFragments > 1)//如果是长消息的分片
{ Dictionary<int, byte[]> TextFragment;
if (!NormalLongTextDict.ContainsKey(e.InPacket.NormalIM.MessageId))//如果字典里没有缓存这个消息id
{ TextFragment = new Dictionary<int, byte[]>();
TextFragment.Add(e.InPacket.NormalIM.FragmentSequence, e.InPacket.NormalIM.MessageBytes);//将分片加入以分片id为标示的分片缓存
NormalLongTextDict.Add(e.InPacket.NormalIM.MessageId, TextFragment);//将分片缓存加入以消息id为标示的消息缓存
}
else
{ TextFragment = NormalLongTextDict[e.InPacket.NormalIM.MessageId];//取出分片缓存
TextFragment.Add(e.InPacket.NormalIM.FragmentSequence, e.InPacket.NormalIM.MessageBytes);加入新的分片
NormalLongTextDict[e.InPacket.NormalIM.MessageId] = TextFragment;放回消息缓存
}
if (TextFragment.Count == e.InPacket.NormalIM.TotalFragments)//如果所有分片都已经接收完毕
{ List<byte> LongTextBytes = new List<byte>();
string LongText = "";
for (int i = 0; i < TextFragment.Count; i++)
{ LongTextBytes.AddRange(TextFragment[i]);合并byte数组
}
LongText = Encoding.GetEncoding(QQGlobal.QQ_CHARSET_DEFAULT).GetString(LongTextBytes.ToArray());转为文字字符串
NormalLongTextDict.Remove(e.InPacket.NormalIM.MessageId);//删除缓存
e.QQClient.MessageManager.SendIM(e.InPacket.NormalHeader.Sender, string.Format("我收到你的消息:{0}", LongText); }
}
else
{ WriteError("收到好友:{0}/{1} 发来的信息:{2}", e.InPacket.NormalHeader.Sender, Nick, AnalyCustomFace(e.InPacket.NormalIM.MessageBytes)); e.QQClient.MessageManager.SendIM(e.InPacket.NormalHeader.Sender, string.Format("我收到你的消息:{0}", e.InPacket.NormalIM.Message));
}
}