public void sorter()//실험(성공) { try { sortStream = new NetworkStream(sortSocket); Encoding encode = Encoding.GetEncoding("utf-8"); sortReader = new StreamReader(sortStream, encode); sortWriter = new StreamWriter(sortStream, encode) { AutoFlush = true }; string num = sortReader.ReadLine(); mem_num = num; MessageDB msDB = new MessageDB(); msDB.mem_num = mem_num; //msDB.mem_num = MyVariables.mem_num;//불러올 메시지 사원번호 string sortQ = sortReader.ReadLine(); while (true)//솔팅 성공.!(회원 세션 구현해야함.) { if (MyVariables.end_flag) { break;//모든 흐름 종료하기위한 플레그 } if (num == "회원가입")//회원가입시 sorter 기능 중지. { break; } if (sortQ == "부재메시지 가져와") { //부재메시지 보냄. //부재메시지 보냄. //부재메시지 보냄. if (msDB.searchMessage()) { List <string> dataMs = msDB.readMessage(); string lastMs = ""; for (int i = 0; i < dataMs.Count; i++) { lastMs += dataMs[i] + "/";//메시지 수신 } sortWriter.WriteLine(lastMs);//부재메시지묶음 보냄. msDB.deleteMessage(); sortQ = "이제 메시지 가져와"; } else { sortQ = "이제 메시지 가져와"; string lastNull = "0"; sortWriter.WriteLine(lastNull); } } else//아니면 그냥 메시지 확인 루트 돌림. { bool check = msDB.searchMessage(); if (check) { List <string> dataMs = msDB.readMessage(); for (int i = 0; i < dataMs.Count; i++) { sortWriter.WriteLine(dataMs[i]);//메시지 수신 } msDB.deleteMessage(); Thread.Sleep(1000); } } } socket_close("sortSocket"); } catch (Exception e) { //MyVariables.logout_number = mem_num; //MyVariables.mem_cnt--; socket_close("sortSocket"); } }
public void chat() //각종 기능들 코딩할 공간.-------------------------------------------------------------------------------- { bool joinQ = false; //회원가입시 플레그 MessageDB msDB = new MessageDB(); string firstQ; //최초신호받을 변수 //MessageDB msDB=new MessageDB(); string streamStr; //실시간 메시지 받을 변수 //클라이언트의 데이터를 읽고, 쓰기 위한 스트림을 만든다. stream = new NetworkStream(socket); Encoding encode = Encoding.GetEncoding("utf-8"); reader = new StreamReader(stream, encode); writer = new StreamWriter(stream, encode) { AutoFlush = true }; try { while (true) { //최초 신호 받아오기. firstQ = reader.ReadLine(); if (firstQ == "회원가입") //회원가입을 한다는 신호가 왔을 경우 { makeMember_num mknum = new makeMember_num(); //사원번호를 만들기위한 클레스 변수 선언. mapperDB joinDB = new mapperDB(); //회원가입 정보를 DB에 넣기위한 클레스 변수 선언. memDB insertDB = new memDB(); //이름 비밀번호 직책 부서 입사년도 사원번호 세션 부재메시지 구독자 while (true) { streamStr = reader.ReadLine(); string[] split = streamStr.Split(new String[] { "/" }, StringSplitOptions.None);// '/'를 기준으로 문자열을 나눠 배열에 저장함. if (split[0] == "") { writer.WriteLine("이름오류"); //처리 continue; } else { insertDB.mem_name = split[0]; if (split[1] == "") { writer.WriteLine("비밀번호를 넣어주세요"); continue; } else { insertDB.mem_password = split[1]; if (split[2] == "") { writer.WriteLine("직책을 넣어주세요"); //처리 continue; } else { insertDB.mem_position = split[2]; if (split[3] == "") { writer.WriteLine("부서을 넣어주세요"); //처리 continue; } else { insertDB.mem_department = split[3]; if (split[4] == "") { writer.WriteLine("입사년도"); //처리 continue; } else { insertDB.mem_jobyear = int.Parse(split[4]); insertDB.mem_number = mknum.mknum(insertDB.mem_jobyear.ToString(), insertDB.mem_department.ToString(), insertDB.mem_position.ToString()); //사원번호 생성과 동시에 전달. try //회원가입 성공 { joinDB.insertJoin(insertDB); //회원가입 시도. writer.WriteLine("성공"); writer.WriteLine(insertDB.mem_number); MyVariables.join_member = insertDB.mem_name + "(" + insertDB.mem_number + ")"; } catch//회원가입 실패 { writer.WriteLine("회원가입 실패 코드오류"); } stream.Close(); } } } } } break; } //stream.Close(); socket_close("socket");//실험 joinQ = true; } else if (firstQ == "로그인") { //로그인 한다는 신호가 왔을 경우 memDB selectDB = new memDB(); mapperDB login = new mapperDB(); // 로그인 정보를 DB에서 가져오기 위한 클레스 변수 선언. //로그인 할 정보를 받아옴 streamStr = reader.ReadLine(); // '/'이거 기준으로 스플릿. selectDB.사원번호 / 비번 <= 가져온거 집어넣기 string[] split = streamStr.Split(new String[] { "/" }, StringSplitOptions.None); selectDB.mem_number = split[0]; selectDB.mem_password = split[1]; try //로그인 성공 { bool log_check = login.selectlogin(selectDB); //id 존재 유무 확인. if (log_check) { writer.WriteLine("로그인 성공"); mem_num = split[0]; msDB.mem_num = mem_num; MyVariables.temp_number = mem_num; //현재 접속한 사람. MyVariables.mem_cnt++; //접속자 수 +1 break; } else { writer.WriteLine("다시 시도"); firstQ = reader.ReadLine(); } } catch//로그인 오류 { writer.WriteLine("로그인 실패 코드오류"); } //writer.WriteLine("로그인 완료"); } if (MyVariables.end_flag) { break;//모든 흐름 종료하기위한 플레그 } } //-------------------------------------여기까지함.스트림을 크게 한개 더연결해야 할듯하다.(성공) while (true) //로그인 후 지속적인 stream 기능을 구현할 공간.//검색기능, 전송기능, 구독기능 등등 { if (MyVariables.end_flag) { break;//모든 흐름 종료하기위한 플레그 } if (joinQ) { break; } string str = reader.ReadLine(); //클라이언트한태 메시시 수신 string[] split = str.Split(new String[] { "/" }, StringSplitOptions.None); //0: 신호 , 1: 메시지 내용 if (split[0] == "전송") { msDB.insertMessage(split[1]);//전송받은 내용을 사원번호, 시간, 내용, 구독자수 로 구성하여 repository DB에넣음. writer.WriteLine("성공"); } else if (str == "검색") { List <string> getsublist = new List <string>(); string listData = ""; //검색기능 mapperDB searchDB = new mapperDB();//회원가입 정보를 DB에 넣기위한 클레스 변수 선언. // 입력값 받아옴 string getName = reader.ReadLine(); string getPosition = reader.ReadLine(); string getDeaprtment = reader.ReadLine(); try { // 검색함수 돌려서 나온값 넣기 getsublist = searchDB.selectSearchName(getName, getPosition, getDeaprtment); for (int i = 0; i < getsublist.Count; i++) { listData += getsublist[i]; // listData라는 변수에 리스트값을 다 더해서 넣어버림 } writer.WriteLine(listData); // listData 클라이언트쪽으로 반환 } catch { writer.WriteLine("실패 코드오류"); } } else if (str == "구독취소") { string getCheckData = ""; string getMemNumber = mem_num; List <string> sucessCheck = new List <string>(); string listData = ""; mapperDB subDB = new mapperDB(); memDB selectDB = new memDB(); getCheckData = reader.ReadLine(); try { sucessCheck = subDB.Findthendelete(getCheckData, getMemNumber); for (int i = 0; i < sucessCheck.Count; i++) { listData += sucessCheck[i]; // listData라는 변수에 리스트값을 다 더해서 넣어버림 } writer.WriteLine(listData); // listData 클라이언트쪽으로 반환 } catch { writer.WriteLine("실패 코드오류"); } } else if (str == "구독") { string getCheckData = ""; string getMemNumber = mem_num; List <string> sucessCheck = new List <string>(); string listData = ""; mapperDB subDB = new mapperDB(); memDB selectDB = new memDB(); getCheckData = reader.ReadLine(); try { sucessCheck = subDB.insertSub(getCheckData, getMemNumber); for (int i = 0; i < sucessCheck.Count; i++) { listData += sucessCheck[i]; // listData라는 변수에 리스트값을 다 더해서 넣어버림 } writer.WriteLine(listData); // listData 클라이언트쪽으로 반환 } catch { writer.WriteLine(""); } } else if (str == "로그인구독목록") { string getNumber = reader.ReadLine(); string listData = ""; mapperDB putDataToListDB = new mapperDB(); List <string> getsubedlist = new List <string>(); try { getsubedlist = putDataToListDB.LoadFormPutData(getNumber); for (int i = 0; i < getsubedlist.Count; i++) { listData += getsubedlist[i]; // listData라는 변수에 리스트값을 다 더해서 넣어버림 } writer.WriteLine(listData); // listData 클라이언트쪽으로 반환 } catch { writer.WriteLine("실패 코드오류"); } } else { writer.WriteLine("실패");//테스트 디버깅 } } socket_close("socket"); } catch (Exception e) { socket_close("socket"); } }