public static void DoHandle(Client client, byte[] data, Server server)
        {
            BaseResponseData responseData = null;

            try {
                CreateRoomData createRoomData = Utils.ToObjectFromBytes <CreateRoomData>(data);

                if (!CreateRoom(createRoomData.Name, client, server))
                {
                    responseData = new BaseResponseData(RequestTypes.CreateRoom, RequestResult.RoomExist);
                    server.SendResponseData(new List <Client>()
                    {
                        client
                    }, (byte)responseData.Request, responseData);
                    return;
                }

                responseData = new BaseResponseData(RequestTypes.CreateRoom, RequestResult.Ok);
                server.SendResponseData(new List <Client>()
                {
                    client
                }, (byte)responseData.Request, responseData);

                Request_EnterInRoomHandler.AddClientInRoom(client, server.GetRoomByName(createRoomData.Name).ID, server);
            } catch (Exception e) {
                responseData = new BaseResponseData(RequestTypes.CreateRoom, RequestResult.Error);
                server.SendResponseData(new List <Client>()
                {
                    client
                }, (byte)responseData.Request, responseData);

                Console.WriteLine("Error {0} - {1}", e.Message, e.StackTrace);
            }
        }
        public async Task CreateRoomAndJoin(UserConnection connection, CreateRoomData data)
        {
            if (this.Rooms.Any(x => x.Name == data.Name))
            {
                await connection.SendPacketAsync(new Packet(PacketType.Fail, new ReasonData()
                {
                    Reason = "Room name already taken!"
                }));

                return;
            }

            var room = new ServerRoom(this);

            room.Name       = data.Name;
            room.HostUserId = connection.GetUser().Id;
            room.Users.Add(connection.GetUser());
            connection.SetRoom(room);
            this.Rooms.Add(room);

            await connection.SendPacketAsync(new Packet(PacketType.JoinRoom, null));

            await Task.Delay(1500);

            await sendRoomUpdate(room);
        }
Beispiel #3
0
    public bool Serialize(CreateRoomData data)
    {
        bool ret = true;

        ret &= Serialize(data.mapType);
        ret &= Serialize(data.roomName);
        return(ret);
    }
Beispiel #4
0
    public void CreateRoom(string name)
    {
        if (client != null)
        {
            CreateRoomData createRoomData = new CreateRoomData(name);
            SendRequest(client, (byte)RequestTypes.CreateRoom, createRoomData);

            Debug.Log("Sended request \"CreateRoom\"");
        }
    }
Beispiel #5
0
        public bool Serialize(CreateRoomData data)
        {
            bool ret = true;

            ret &= Serialize(data.DungeonId);
            ret &= Serialize(data.DungeonLevel);
            ret &= Serialize(data.RoomName);

            return(ret);
        }
Beispiel #6
0
    //방 생성 -> Server
    public void CreateRoom(string roomName, int dungeonId, int dungeonLevel)
    {
        Debug.Log("방 생성");

        CreateRoomData   createRoomData   = new CreateRoomData(dungeonId, dungeonLevel, roomName);
        CreateRoomPacket createRoomPacket = new CreateRoomPacket(createRoomData);

        createRoomPacket.SetPacketId((int)ClientPacketId.CreateRoom);

        DataPacket packet = new DataPacket(CreatePacket(createRoomPacket), null);

        sendMsgs.Enqueue(packet);
    }
    public int CreateRoom(Socket player, HeroData heroData, CreateRoomData createRoomData)
    {
        int index = FindEmptyRoom();

        if(index < 0)
        {
            Console.WriteLine("최대 생성 개수를 초과했습니다.");
            return -1;
        }

        string dungeonName = DungeonDatabase.Instance.GetDungeonBaseData(createRoomData.DungeonId).Name;
        Console.WriteLine(dungeonName);
        room[index] = new Room(createRoomData.RoomName, dungeonName, createRoomData.DungeonId, createRoomData.DungeonLevel);

        return index;
    }
Beispiel #8
0
    public bool Deserialize(ref CreateRoomData element)
    {
        if (GetDataSize() == 0)
        {
            // 데이터가 설정되지 않았다.
            return(false);
        }

        bool   ret     = true;
        byte   mapType = 0;
        string total;

        ret &= Deserialize(ref mapType);
        ret &= Deserialize(out total, (int)GetDataSize() - 1);

        element.mapType  = mapType;
        element.roomName = total;

        return(ret);
    }
Beispiel #9
0
        public bool Deserialize(ref CreateRoomData element)
        {
            if (GetDataSize() == 0)
            {
                // 데이터가 설정되지 않았다.
                return(false);
            }

            bool   ret          = true;
            byte   dungeonId    = 0;
            byte   dungeonLevel = 0;
            string total;

            ret &= Deserialize(ref dungeonId);
            ret &= Deserialize(ref dungeonLevel);
            ret &= Deserialize(out total, (int)GetDataSize());

            element = new CreateRoomData(dungeonId, dungeonLevel, total);

            return(ret);
        }
    public ServerPacketId CreateRoom(byte[] data)
    {
        Console.WriteLine(tcpPacket.client.RemoteEndPoint.ToString() + " 방 생성");

        CreateRoomPacket createRoomPacket = new CreateRoomPacket(data);
        CreateRoomData   createRoomData   = createRoomPacket.GetData();

        Console.WriteLine("방 타입 : " + (int)createRoomData.mapType + "방 제목 : " + createRoomData.roomName);

        int index = roomManager.CreateRoom(tcpPacket.client, ((TcpClient)LoginUser [tcpPacket.client]).Id, createRoomData.roomName, (int)createRoomData.mapType);

        if (index != 0)
        {
            Console.WriteLine("방 생성 성공");
        }
        else
        {
            Console.WriteLine("방 생성 실패");
        }

        msg[0] = (byte)index;

        return(ServerPacketId.RoomCreateResult);
    }
    //방 생성
    public void CreateRoom(DataPacket packet)
    {
        Console.WriteLine(packet.client.RemoteEndPoint.ToString() + "방 생성");
        CreateRoomPacket createRoomPacket = new CreateRoomPacket(packet.msg);
        CreateRoomData   createRoomData   = createRoomPacket.GetData();

        string id = "";

        try
        {
            id = loginUser[packet.client];
        }
        catch
        {
            Console.WriteLine("현재 로그인 되어있지 않은 아이디 입니다.");
            return;
        }

        int characterId = userState[id].characterId;

        if (characterId == -1)
        {
            Console.WriteLine("캐릭터가 선택되지 않았습니다.");
            return;
        }

        Console.WriteLine("Id : " + id);
        Console.WriteLine("characterId : " + characterId);
        Console.WriteLine("방 제목 : " + createRoomData.RoomName);

        int result = roomManager.CreateRoom(packet.client, database.GetHeroData(id, characterId), createRoomData);

        Console.WriteLine("방 생성 번호 : " + result);

        RoomNumberData   resultData   = new RoomNumberData(result);
        RoomNumberPacket resultPacket = new RoomNumberPacket(resultData);

        resultPacket.SetPacketId((int)ServerPacketId.CreateRoomNumber);

        byte[] msg = CreatePacket(resultPacket);
        packet = new DataPacket(msg, packet.client);

        lock (sendLock)
        {
            sendMsgs.Enqueue(packet);
        }

        List <string> clients = new List <string>(loginUser.Values);

        foreach (string client in clients)
        {
            if (userState.ContainsKey(client))
            {
                if (userState[client].state == -1)
                {
                    packet = new DataPacket(new byte[0], FindSocketWithId(client));

                    RequestRoomList(packet);
                }
            }
        }
    }