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); }
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(); // 프로그램 종료 } } }); }