Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 4
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);
    }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
    /// <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);
    }