Exemple #1
0
        public bool LoginCheck(ReqLoginPack logPack)
        {
            Console.WriteLine("<->로그인 요청 : {0}", ipString);

            bool   success = false;
            string reqId   = logPack.Id;
            string reqPw   = logPack.Pw;

            query.Clear();
            //query.Append("select *, PWDCOMPARE('");
            //query.Append(reqPw);
            //query.Append("', pw) as pwd from users");
            query.Append("select * from users");
            query.Append(" where id COLLATE Korean_Wansung_CS_AS = '");
            query.Append(reqId);
            query.Append("'");

            sdr = Program.ldbc.SelectDB(query);

            if (!(sdr.Read())) // 요청한 id가 회원테이블에 없는경우
            {
                successPack.PackType = CONSTANTS.TYPE_ERROR;
                successPack.Flag     = CONSTANTS.ERROR_INVALID_ID;
                serializer.Serialize(clientStream, successPack);
                Console.WriteLine("<!>없는 아이디 입력으로 로그인실패 / ID : {0} IP : {1}", reqId, ipString);
            }
            else if ((string)sdr["pw"] != reqPw)    // else if (((int)sdr["pwd"]) == 0) // pw가 틀린경우
            {
                successPack.PackType = CONSTANTS.TYPE_ERROR;
                successPack.Flag     = CONSTANTS.ERROR_INVALID_PASSWORD;
                serializer.Serialize(clientStream, successPack);
                Console.WriteLine("<!>비밀번호 불일치로 로그인실패 / ID : {0} IP : {1}", reqId, ipString);
            }
            else
            {
                loginGuid = Guid.NewGuid();

                if (Program.userList.AddUser(reqId, loginGuid))
                {
                    successPack.Flag = CONSTANTS.FLAG_SUCCESS;
                    serializer.Serialize(clientStream, successPack);

                    Console.WriteLine("<O>로그인 성공 / ID : {0} IP : {1} ", reqId, ipString);

                    loginId = reqId;
                    success = true;
                }
                else
                {
                    successPack.PackType = CONSTANTS.TYPE_ERROR;
                    successPack.Flag     = CONSTANTS.ERROR_CONNECTED_ID;
                    serializer.Serialize(clientStream, successPack);

                    // 클라이언트에서 기존로그인을 끊기를 원하는지 여부를 체크한다.
                    reqPack = (Pack)serializer.Deserialize(clientStream);
                    if (reqPack.Flag != CONSTANTS.FLAG_NO)
                    {
                        Program.userList.RemoveUser(reqId);
                        Program.userList.AddUser(reqId, loginGuid);

                        successPack.PackType = CONSTANTS.TYPE_BASIC;
                        successPack.Flag     = CONSTANTS.FLAG_SUCCESS;
                        serializer.Serialize(clientStream, successPack);

                        Console.WriteLine("<O>로그인 성공 / ID : {0} IP : {1}", reqId, ipString);

                        loginId = reqId;
                        success = true;
                    }
                }
            }

            sdr.Close();
            return(success);
        }
Exemple #2
0
        public async void Login(string id, string pw) // 로그인
        {
            BinaryFormatter serializer = new BinaryFormatter();

            if (id == "")
            {
                loginForm.lbl_notice.Text = "아이디를 입력해주세요.";
                return;
            }
            else if (pw == "")
            {
                loginForm.lbl_notice.Text = "비밀번호를 입력해주세요.";
                return;
            }

            lbl_Size.Text = "0";

            // 로그인 서버와 연결
            TcpClient     logClient;
            NetworkStream logStream;
            Pack          flagPack = new Pack();
            Pack          reqMait  = new Pack();
            Pack          resMait  = new Pack();

            logClient = new TcpClient(clientAdress);
            logClient.Connect(loginAdress);
            logStream = logClient.GetStream();

            ReqLoginPack reqLoginPack = new ReqLoginPack() // 보낼 요청 인스턴스
            {
                Id = id,
                Pw = pw
            };

            serializer.Serialize(logStream, reqLoginPack);

            Pack resPack = (Pack)serializer.Deserialize(logStream);

            if (resPack.PackType == CONSTANTS.TYPE_ERROR) // 오류판별
            {
                if (resPack.Flag == CONSTANTS.ERROR_CONNECTED_ID)
                {
                    if (MessageBox.Show("이미 접속중인 ID 입니다. \n 기존 연결을 끊고 접속하시겠습니까?", "알림",
                                        MessageBoxButtons.YesNo) == DialogResult.Yes) // 중복 로그인인 경우 사용자가 기존 연결끊고 접속할지 여부를 선택한다.
                    {
                        flagPack.Flag = CONSTANTS.FLAG_YES;
                        serializer.Serialize(logStream, flagPack);
                        resPack = (Pack)serializer.Deserialize(logStream);

                        if (resPack.PackType == CONSTANTS.TYPE_ERROR)
                        {
                            return;
                        }
                    }
                    else
                    {
                        flagPack.Flag = CONSTANTS.FLAG_NO; //
                        serializer.Serialize(logStream, flagPack);
                        return;
                    }
                }
                else
                {
                    loginForm.lbl_notice.Text = CONSTANTS.Err_String[resPack.Flag]; // 로그인 폼에 오류이유를 알린다.
                    return;
                }
            }
            // 여기까지오면 로그인에 성공했다는 것이다.
            loginForm.Close(); // 로그인폼을 닫고
            // 로그인에 성공하면 초기 노드를 받고 컨트롤들을 활성화한다.
            startControl();
            btn_Login.Enabled    = false; // 로그인/회원가입 버튼은 비활성화
            btn_Register.Enabled = false;
            userID = reqLoginPack.Id;
            SetStartNode();
            // 로그인 유지를 하는 반복문을 비동기로 처리하고 메소드를 탈출한다.
            await Task.Run(() =>
            {
                while (true)
                {
                    //serializer.Serialize(logStream, reqMait); // 요청을 주고
                    resMait = (Pack)serializer.Deserialize(logStream); // 받는다.

                    if (resMait.PackType == CONSTANTS.TYPE_ERROR)      // 만약 받은 Pack에 에러가있다면 서버에서 연결을 끊이려는 것이다.
                    {
                        runUp = false;                                 // 끊기전에 업로드를 종료한다.
                        foreach (DownLoadWindow dw in dwList)          // 열려있는 다운로드창도 모두 닫는다.
                        {
                            dw.Close();
                        }
                        MessageBox.Show(CONSTANTS.Err_String[resMait.Flag], "알림");
                        Application.Exit(); // 프로그램 종료
                    }
                }
            });
        }