feat : 이동 패킷 전달

This commit is contained in:
qornwh1
2026-03-04 10:02:48 +09:00
parent d16e4a05e5
commit 4ef58c2fad

View File

@@ -91,8 +91,6 @@ public class DummyClients
packetHeader.BodyLength = 4 + sizeof(long); packetHeader.BodyLength = 4 + sizeof(long);
writer.Put(clientId); writer.Put(clientId);
peer.Send(writer, DeliveryMethod.ReliableOrdered); peer.Send(writer, DeliveryMethod.ReliableOrdered);
// 초기화
}; };
listener.NetworkReceiveEvent += (peer, reader, channel, deliveryMethod) => listener.NetworkReceiveEvent += (peer, reader, channel, deliveryMethod) =>
@@ -176,27 +174,23 @@ public class DummyClients
int seq = seqNumber++; int seq = seqNumber++;
pendingPings[seq] = Stopwatch.GetTimestamp(); pendingPings[seq] = Stopwatch.GetTimestamp();
// 응답 없는 오래된 ping 정리 (패킷 유실 시 메모리 누수 방지) TransformPlayerPacket transformPlayerPacket = new TransformPlayerPacket
if (pendingPings.Count > MAX_PENDING_PINGS)
{ {
int cutoff = seq - MAX_PENDING_PINGS; PlayerId = (int)clientId,
foreach (int key in pendingPings.Keys) RotY = rotY,
Position = new Packet.Vector3
{ {
if (key < cutoff) X = position.X,
{ Y = 0, // 높이는 버린다.
pendingPings.TryRemove(key, out _); Z = position.Z
}
} }
} };
PacketHeader packetHeader = new PacketHeader(); // Protobuf 직렬화 + 헤더 조립
packetHeader.Code = 0; byte[] data = PacketSerializer.Serialize((ushort)PacketCode.TRANSFORM_PLAYER, transformPlayerPacket);
packetHeader.BodyLength = (ushort)$"Echo seq:{seq}".Length; writer.Put(data);
writer.Put((short)packetHeader.Code); // 이동은 손실 감수함
writer.Put((short)packetHeader.BodyLength); peer.Send(writer, DeliveryMethod.Unreliable);
writer.Put($"Echo seq:{seq}");
// 순서보장 안함 HOL Blocking 제거
peer.Send(writer, DeliveryMethod.ReliableUnordered);
SentCount++; SentCount++;
writer.Reset(); writer.Reset();
} }