private void SendUpdateStatePacket(UpdateState state, User user, IPAddress brdIp) { UdpPacket packet = new UdpPacket(); packet.Address = user.Address; packet.Port = user.Port; packet.ToMAC = ""; packet.FromMAC = user.ID; packet.Command = UdpPacket.CMD_STATE; UdpPacketUserStateExtend entryExtend = new UdpPacketUserStateExtend(); entryExtend.User = user; entryExtend.UpdateState = state; packet.Extend = entryExtend; UdpPacket packetWrap = new UdpPacket(); packetWrap.Address = brdIp; packetWrap.Port = this.Port; packetWrap.ToMAC = ""; packetWrap.FromMAC = this.MAC; packetWrap.Command = UdpPacket.CMD_RETRANSMIT; IPacketEncoder encoder = PacketEncoderFactory.CreateEncoder(packet); EncodeResult result = encoder.Encode(); UdpPacketRetransExtend extend = new UdpPacketRetransExtend(result.Fragments[0]); packetWrap.Extend = extend; _client.Send(packetWrap); }
private static void EncodeRetransmitExtend(BinaryWriter wtr, object extendObj) { UdpPacketRetransExtend extend = extendObj as UdpPacketRetransExtend; wtr.Write(extend.PacketID); wtr.Write(extend.Address.ToString()); wtr.Write(extend.Port); wtr.Write(extend.Length); wtr.Write(extend.PacketBuf); }
private static UdpPacketRetransExtend ResolveRetransmitExtend(BinaryReader rdr) { long pktId = rdr.ReadInt64(); string strIp = rdr.ReadString(); int port = rdr.ReadInt32(); int len = rdr.ReadInt32(); byte[] buf = rdr.ReadBytes(len); UdpPacketRetransExtend extend = new UdpPacketRetransExtend(buf); extend.PacketID = pktId; extend.Address = IPAddress.Parse(strIp); extend.Port = port; return(extend); }
private void RetransPacket(UdpPacket packet) { if (packet.CheckSendResponse) { #region 需要回应收到包 if (packet.Version == Packet.VERSION) { UdpPacket packetRsp = new UdpPacket(); packetRsp.Address = packet.Address; packetRsp.Port = packet.Port; packet.ToMAC = packet.ToMAC; packetRsp.FromMAC = this.MAC; packetRsp.Command = UdpPacket.CMD_RESPONSE; UdpPacketResponseExtend extendRsp = new UdpPacketResponseExtend(); extendRsp.ID = packet.ID; packetRsp.Extend = extendRsp; _client.Send(packetRsp); } #endregion } UdpPacketRetransExtend extend = packet.Extend as UdpPacketRetransExtend; //修改目的地后转送 UdpPacket retransPacket = new UdpPacket(); retransPacket.Address = extend.Address;//传送目的地 retransPacket.Port = extend.Port; retransPacket.FromMAC = this.MAC; retransPacket.Command = UdpPacket.CMD_RETRANSMIT | UdpPacket.CMD_OPTION_NEED_RESPONSE; UdpPacketRetransExtend retransExtend = new UdpPacketRetransExtend(extend.PacketBuf); //更改来源地址 retransExtend.PacketID = packet.ID; retransExtend.Address = packet.Address; retransExtend.Port = packet.Port; retransPacket.Extend = extend; _client.Send(retransPacket); LoggerFactory.Debug("retrans:{0}", retransPacket); }