/// <summary> /// 尝试将收到的消息解析为实体对象 /// </summary> /// <param name="buffer">封包消息</param> /// <param name="remoteEndPoint">远程主机的端点位置</param> /// <returns></returns> /// <remarks>如果是分包的消息且当前并未接收完全,则同样返回为空</remarks> public Message ResolveToMessage(byte[] buffer, IPEndPoint remoteEndPoint) { if (buffer == null || buffer.Length < 0) { return(null); } Message m = null; if (MessagePacker.Test(buffer)) { m = MessagePacker.TryToTranslateMessage(buffer, remoteEndPoint); if (m != null) { m.Host = LivedHost.GetHost(remoteEndPoint.Address.ToString()); //确认是否要发送回复 if (DetermineConfirm(m)) { Message cm = Message.Create(m.Host, remoteEndPoint, Config.GetRandomTick(), Config.GroupName, Config.NickName, FSLib.IPMessager.Define.Consts.Commands.RecvMsg, 0, m.PackageNo.ToString(), ""); Send(cm); } } } else if (MessagePackerV2.Test(buffer)) { PackedNetworkMessage pack = MessagePackerV2.Parse(buffer, remoteEndPoint); if (pack == null) { return(null); } if (DetermineConfirm(pack)) { //发送确认标志 Message cm = Message.Create(m.Host, remoteEndPoint, Config.GetRandomTick(), Config.GroupName, Config.NickName, FSLib.IPMessager.Define.Consts.Commands.Ex_PackageRecevied, 0, pack.PackageNo.ToString(), pack.PackageIndex.ToString()); Send(cm); } m = MessagePackerV2.TryToTranslateMessage(pack); if (m != null) { m.Host = LivedHost.GetHost(remoteEndPoint.Address.ToString()); //确认是否要发送回复 if (DetermineConfirm(m)) { Message cm = Message.Create(m.Host, remoteEndPoint, Config.GetRandomTick(), Config.GroupName, Config.NickName, FSLib.IPMessager.Define.Consts.Commands.RecvMsg, 0, m.PackageNo.ToString(), ""); Send(cm); } if (DetermineConfirm2(m)) { Message cm = Message.Create(m.Host, remoteEndPoint, Config.GetRandomTick(), Config.GroupName, Config.NickName, FSLib.IPMessager.Define.Consts.Commands.AnsReadMsg, 0, m.PackageNo.ToString(), ""); Send(cm); } } } return(m); }