private static void SendRoomList(CustomProtocolManager.Header header, byte[] msg, User target) { if (target.ChannelNumber == -1) { return; } List <RoomCreateData> list = new List <RoomCreateData>(); Channel c = ServerProperty.getInstance().channelsList[target.ChannelNumber]; RoomCreateData rcd; foreach (KeyValuePair <string, Room> data in c.rooms) { rcd = new RoomCreateData() { gameInfo = data.Value.gameInfo, gameParameters = data.Value.gameParameters, roomName = data.Value.roomName, HostNickName = data.Value.HostNickName, teamCount = data.Value.teamCount, maxCapacity = data.Value.maxCapacity, password = data.Value.password }; list.Add(rcd); } SendToUser(target, CustomProtocolManager.MakeRoomListPacket(list)); }
private static void RoomChangeHandle(CustomProtocolManager.Header header, byte[] msg) { RoomCreateData roomData = CustomProtocolManager.ParseRoomResponsePacket(msg, 0, msg.Length); if (roomData == null) // 빠져나오는 반응이거나 실패의 의미 { ClientInfo.getInstance().mainClientFrame.ExitingRoomUIChanger(); return; } ClientInfo.getInstance().mainClientFrame.EnteringRoom(roomData); }
public RoomCreateForm() { InitializeComponent(); data = new RoomCreateData(); cb_rcGame.DisplayMember = "name"; ClientInfo ci = ClientInfo.getInstance(); foreach (GameRegistry gr in ci.gameRegistries) { cb_rcGame.Items.Add(gr.gameInfo); } cb_rcGame.SelectedIndex = 0; }
/// <summary> /// 방을 생성한다는 의미의 패킷을 만듭니다. /// </summary> /// <param name="info">생성할 방의 정보가 담긴 패킷을 의미합니다.</param> /// <returns>방 생성 패킷</returns> public static byte[] MakeRoomCreatePacket(RoomCreateData info) { MemoryStream ms; XmlSerializer xs = new XmlSerializer(typeof(RoomCreateData)); byte[] packet, data; using (ms = new MemoryStream()) { xs.Serialize(ms, info); data = ms.ToArray(); } packet = new byte[data.Length + HEADER_SIZE]; Array.Copy(MakeHeader(Convert.ToInt32(data.Length), TypeNumber.InfoChange, (byte)InfoChangeOption.RoomCreate), 0, packet, 0, HEADER_SIZE); Array.Copy(data, 0, packet, HEADER_SIZE, data.Length); return(packet); }
private static void RoomCreateHandle(CustomProtocolManager.Header header, byte[] msg, User target) { if (target.RoomID != null) { return; } target.RoomID = target.Nickname; RoomCreateData data = CustomProtocolManager.ParseRoomCreatePacket(msg, 0, msg.Length); ServerProperty sp = ServerProperty.getInstance(); data.HostNickName = target.Nickname; Room r = new Room(data); r.members.TryAdd(target.Nickname, new RoomMember(target.Nickname)); sp.channelsList[target.ChannelNumber].rooms.TryAdd(target.Nickname, r); SendToUser(target, CustomProtocolManager.MakeRoomResponsePacket(true, data)); }
/// <summary> /// 방 변경에 대한 응답을 전하는 패킷을 생성합니다. /// </summary> /// <param name="info">방 정보를 의미합니다.</param> /// <param name="isAck">성공 여부를 의미합니다.</param> /// <returns>응답 패킷</returns> public static byte[] MakeRoomResponsePacket(bool isAck = false, RoomCreateData info = null) { MemoryStream ms; XmlSerializer xs = new XmlSerializer(typeof(RoomCreateData)); byte[] packet, data; using (ms = new MemoryStream()) { xs.Serialize(ms, info); data = ms.ToArray(); } packet = new byte[data.Length + HEADER_SIZE + 1]; Array.Copy(MakeHeader(Convert.ToInt32(data.Length + 1), TypeNumber.InfoChange, (byte)InfoChangeOption.RoomChangeResponse), 0, packet, 0, HEADER_SIZE); packet[HEADER_SIZE] = isAck ? (byte)1 : (byte)0; Array.Copy(data, 0, packet, HEADER_SIZE + 1, data.Length); return(packet); }