enter room

This commit is contained in:
2023-02-21 18:00:47 +09:00
parent 09cce59aa2
commit c4451759f7
6 changed files with 167 additions and 13 deletions

View File

@@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace Core
{
public class EnterRoomRequestPacket : IPacket
{
public string RoomName { get; private set; }
public EnterRoomRequestPacket(string roomName)
{
RoomName = roomName;
}
public EnterRoomRequestPacket(byte[] buffer)
{
int cursor = 2;
short roomNameSize = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, cursor));
cursor += sizeof(short);
RoomName = Encoding.UTF8.GetString(buffer, cursor, roomNameSize);
}
public byte[] Serialize()
{
// 2bytes header
// data: 2bytes packetType + 2bytes id size + id + 2bytes nickname size + nickname
byte[] packetType = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((short)PacketType.EnterRoomRequest));
byte[] roomName = Encoding.UTF8.GetBytes(RoomName);
byte[] roomNameSize = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((short)roomName.Length));
short dataSize = (short)(packetType.Length + roomName.Length + roomNameSize.Length);
byte[] header = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(dataSize));
byte[] buffer = new byte[2 + dataSize];
int cursor = 0;
Array.Copy(header, 0, buffer, cursor, header.Length);
cursor += header.Length;
Array.Copy(packetType, 0, buffer, cursor, packetType.Length);
cursor += packetType.Length;
Array.Copy(roomNameSize, 0, buffer, cursor, roomNameSize.Length);
cursor += roomNameSize.Length;
Array.Copy(roomName, 0, buffer, cursor, roomName.Length);
return buffer;
}
}
}

View File

@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace Core
{
public class EnterRoomResponsePacket : IPacket
{
public StatusCode Code { get; set; }
public EnterRoomResponsePacket(StatusCode code)
{
Code = code;
}
public EnterRoomResponsePacket(byte[] buffer)
{
Code = (StatusCode)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(buffer, 2));
}
public byte[] Serialize()
{
// 2bytes header
// data: 2bytes packetType + code
byte[] packetType = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((short)PacketType.EnterRoomResponse));
byte[] code = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((int)Code));
short dataSize = (short)(packetType.Length + code.Length);
byte[] header = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(dataSize));
byte[] buffer = new byte[2 + dataSize];
int cursor = 0;
Array.Copy(header, 0, buffer, cursor, header.Length);
cursor += header.Length;
Array.Copy(packetType, 0, buffer, cursor, packetType.Length);
cursor += packetType.Length;
Array.Copy(code, 0, buffer, cursor, code.Length);
return buffer;
}
}
}

View File

@@ -90,7 +90,7 @@ namespace Core
{
roomName = requestPacket.RoomName;
room.Users.TryAdd(id, nickname);
Console.WriteLine($"[{DateTime.Now}] CreateRoomRequest - RoomName: {roomName}");
Console.WriteLine($"[{DateTime.Now}] CreateRoomRequest - RoomName: {roomName}, id: {id}, nickname: {nickname}");
CreateRoomResponsePacket responsePacket = new CreateRoomResponsePacket(StatusCode.Success);
await clientSocket.SendAsync(responsePacket.Serialize(), SocketFlags.None);
@@ -108,6 +108,27 @@ namespace Core
RoomListResponsePacket packet = new RoomListResponsePacket(Rooms.Keys);
await clientSocket.SendAsync(packet.Serialize(), SocketFlags.None);
}
else if (packetType == PacketType.EnterRoomRequest)
{
EnterRoomRequestPacket requestPacket = new EnterRoomRequestPacket(dataBuffer);
if (Rooms.TryGetValue(requestPacket.RoomName, out var room))
{
roomName = requestPacket.RoomName;
room.Users.TryAdd(id, nickname);
Console.WriteLine($"[{DateTime.Now}] EnterRoomRequest - RoomName: {roomName}, id: {id}, nickname: {nickname}");
EnterRoomResponsePacket responsePacket = new EnterRoomResponsePacket(StatusCode.Success);
await clientSocket.SendAsync(responsePacket.Serialize(), SocketFlags.None);
}
else
{
Console.WriteLine($"[{DateTime.Now}] EnterRoomRequest failed - RoomName: {requestPacket.RoomName}");
EnterRoomResponsePacket responsePacket = new EnterRoomResponsePacket(StatusCode.Failed);
await clientSocket.SendAsync(responsePacket.Serialize(), SocketFlags.None);
}
}
}
}
}

View File

@@ -14,5 +14,9 @@ namespace Core
CreateRoomResponse,
RoomListRequest,
RoomListResponse,
EnterRoomRequest,
EnterRoomResponse,
UserEnter,
UserLeave,
}
}