작성
·
294
0
안녕하세요
이 부분까지는 실행이 잘되는 것을 확인하였습니다.
그 뒤에 PacketFormat 부분에서실행시키면 아래와 같이 string부분은 입력이 안됩니다.
제 코드에서 틀린부분을 못찾겠어서 선생님이 올려주신 정답 코드로 다시 실행을 해보았는데
똑같이 string부분이 입력이 안되는데 혹시 어떤 부분이 잘못되었는지 알려주실 수 있으실까요?
class PlayerInfoReq
{
public long playerId;
public void Read(ArraySegment<byte> openSegment)
{
ushort count = 0;
ReadOnlySpan<byte> s = new ReadOnlySpan<byte>(openSegment.Array, openSegment.Offset, openSegment.Count);
count += sizeof(ushort);
count += sizeof(ushort);
this. playerId = BitConverter.ToInt64(s.Slice(count, s.Length - count));
count += sizeof(long);
}
public ArraySegment<byte> Write()
{
ArraySegment<byte> segement = SendBufferHandler.Open(4096);
bool success = true;
ushort count = 0;
Span<byte> s = new Span<byte>(segement.Array, segement.Offset, segement.Count);
count += sizeof(ushort);
success &= BitConverter.TryWriteBytes(s.Slice(count,s.Length-count), (ushort)PacketID.PlayerInfoReq);
count += sizeof(ushort);
success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), this. playerId);
count += sizeof(long);
success &= BitConverter.TryWriteBytes(s, count);
if (success == false)
return null;
return SendBufferHandler.Close(count);
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴이에요. 해당 코드를 보면 PlayerInfoReq 클래스의 Write 메서드에서 string 값을 입력하는 부분이 누락되어 있는 것 같습니다.
string 값을 입력하는 부분이 없으므로 string 변수를 사용하지 않는 것 같아보입니다. 만약 string 값을 입력하려면 해당 변수를 선언하고 값을 할당하도록 코드를 수정해야 합니다.
예를 들어, PlayerInfoReq 클래스에 다음과 같이 string 변수를 추가하고 값을 입력하는 코드를 작성할 수 있습니다.
public class PlayerInfoReq
{
public long playerId;
public string playerName; // string 변수 추가
public void Read(ArraySegment<byte> openSegment)
{
// 이하 코드 생략
}
public ArraySegment<byte> Write()
{
ArraySegment<byte> segment = SendBufferHandler.Open(4096);
bool success = true;
ushort count = 0;
Span<byte> s = new Span<byte>(segment.Array, segment.Offset, segment.Count);
count += sizeof(ushort);
success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), (ushort)PacketID.PlayerInfoReq);
count += sizeof(ushort);
// string 값을 입력하는 코드 작성
success &= Encoding.UTF8.GetBytes(playerName, s.Slice(count, s.Length - count), out int playerNameLength);
count += (ushort)playerNameLength;
return new ArraySegment<byte>(segment.Array, segment.Offset, count);
}
}
위의 코드에서 playerName 변수를 추가하고, Write 메서드에서 해당 변수의 값을 Byte로 변환하여 segement에 기록하는 코드를 추가했습니다. 이렇게 수정하면 string 값을 성공적으로 입력할 수 있을 것입니다.
해당 부분을 확인하시고 필요한 코드를 추가해보세요. 추가적인 문제가 있으면 언제든지 물어보세요. 이용해주셔서 감사합니다.