Beispiel #1
0
        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");
            }
        }
Beispiel #2
0
        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");
            }
        }