public void Login(DataPacket packet)
    {
        Console.WriteLine(packet.client.RemoteEndPoint.ToString() + " 로그인");

        AccountPacket accountPacket = new AccountPacket(packet.msg);
        AccountData   accountData   = accountPacket.GetData();

        Console.WriteLine("아이디 : " + accountData.Id + "비밀번호 : " + accountData.Password);

        Result result = Result.Fail;

        try
        {
            if (database.AccountData.Contains(accountData.Id))
            {
                if (((AccountData)database.AccountData[accountData.Id]).Password == accountData.Password)
                {
                    List <string> id = new List <string>(loginUser.Values);


                    if (!loginUser.ContainsValue(accountData.Id))
                    {
                        result = Result.Success;
                        Console.WriteLine("로그인 성공");
                        loginUser.Add(packet.client, accountData.Id);
                        userState.Add(accountData.Id, new UserState(accountData.Id, -1));

                        database.AddUserData(accountData.Id);
                    }
                    else
                    {
                        Console.WriteLine("현재 접속중인 아이디입니다.");

                        if (CompareIP(GetSocket(accountData.Id).RemoteEndPoint.ToString(), packet.client.RemoteEndPoint.ToString()))
                        {
                            loginUser.Remove(GetSocket(accountData.Id));

                            try
                            {
                                if (userState.ContainsKey(accountData.Id))
                                {
                                    if (userState[accountData.Id].state >= 0)
                                    {
                                        roomManager.ExitRoom(userState[accountData.Id].state, packet.client);
                                    }

                                    userState.Remove(accountData.Id);
                                }
                            }
                            catch
                            {
                                Console.WriteLine("DataHandler::GameClose.ContainsKey - roomManager 에러");
                                Console.WriteLine("방에 입장하지 않았습니다.");
                            }

                            database.DeleteUserData(accountData.Id);

                            Console.WriteLine("현재 접속중 해제");
                        }

                        result = Result.Fail;
                    }
                }
                else
                {
                    Console.WriteLine("패스워드가 맞지 않습니다.");
                    result = Result.Fail;
                }
            }
            else
            {
                Console.WriteLine("존재하지 않는 아이디입니다.");
                result = Result.Fail;
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("DataHandler::Login.ContainsValue 에러" + e.Message);
            result = Result.Fail;
        }

        ResultData   resultData       = new ResultData((byte)result);
        ResultPacket resultDataPacket = new ResultPacket(resultData);

        resultDataPacket.SetPacketId((int)ServerPacketId.LoginResult);

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

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