Esempio n. 1
0
 private void Button_Click(object sender, RoutedEventArgs e)
 {
     if (Data.Instance.ftpOn == false)
     {
         Data.Instance.ftpOn = true;
         ftp = new FTP_Channel(this.ChannelIndex, this.ChannelName, this.ChannelAdmin);
         ftp.Show();
     }
     else
     {
         return;
     }
 }
 private void MyFileDown_Click(object sender, RoutedEventArgs e)
 {
     ftpserver = new FTP_Channel();
     ftpserver.MyFileDownload();
 }
Esempio n. 3
0
        public void RecvData(string msg)
        {
            string[] pack  = msg.Split('$');
            string[] data  = pack[1].Split('#');
            string[] pdata = pack[1].Split('@');

            switch (pack[0].Trim())
            {
                #region 회원가입
            case "ACK_MEMBERADD_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate() { MainWindow.Instance.Member_Dlg.Hide(); });
                MessageBox.Show("회원가입 성공!"); break;

            case "ACK_MEMBERADD_F": MessageBox.Show("회원가입 실패!"); break;
                #endregion

                #region 아이디 중복확인
            case "ACK_IDCHECK_S":
                MessageBox.Show("중복확인 성공!");
                MainWindow.Instance.Member_Dlg.is_idcheck = true;
                break;

            case "ACK_IDCHECK_F":
                MessageBox.Show("중복된 아이디가 있습니다!");
                MainWindow.Instance.Member_Dlg.check_iddata = "";
                Data.Instance.myId = "";
                break;
                #endregion

                #region 로그인
            case "ACK_LOGIN_S":
                // ACK_LOGIN_S$ip#블라블라#####
                // pack[0] = ACK_LOGIN_S, pack[1] = ip#등등등
                // data[0] = ip;
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MainWindow.Instance.Hide();
                    MainRecording.Instance.Show();
                    Data.Instance.Init_Check = true;
                    Control.Instance.ChannelAllList();
                });
                break;

            case "ACK_LOGIN_F":
                MessageBox.Show("로그인에 실패했습니다.");
                Data.Instance.myId = "";
                break;
                #endregion

                #region 채널 목록 불러오기
            case "CHANNEL_ALLLIST_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MainRecording.Instance.xamlChannelList.Items.Clear();
                    MainChannel.Instance.LoadChannel(pack);

                    if (Data.Instance.Init_Check == true)
                    {
                        Control.Instance.RequestMyChannelList();     // 해당 아이디로 접속되어있는 채널들을 받기위해 패킷 전송
                        Data.Instance.Init_Check = false;
                    }
                });
                break;
                #endregion

                #region 접속 채널 초기화
            case "CHANNEL_INIT_S":
                //받는 데이터 : 채널 인덱스
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    Data.Instance.Init_IndexList = pdata[0].Split('#');     // 자신이 접속한 채널들의 인덱스를 배열에 보관
                    //Data.Instance.initchannellength = Data.Instance.initchannelindex.Length - 1;  // 현재 자신의 ID로 접속되어 있는 채널의 개수

                    //// =================================================================================
                    //// 접속된 채널들의 이름과 인덱스와 사용자들과 헤더 값을 추가
                    //for (int i = 0; i < Data.Instance.initchannelindex.Length - 1; i++)
                    //{
                    //    Data.Instance.myChannelName.Add(Data.Instance.SearchChannelName(Data.Instance.initchannelindex[i]));
                    //    Data.Instance.myChannelIndex.Add(Data.Instance.initchannelindex[i]);
                    //    Data.Instance.myChannelUsers.Add(pdatas[i]);
                    //    Data.Instance.myChannelheader++;
                    //}
                    //// =================================================================================

                    Data.Instance.Init_Check = true;
                    Control.Instance.Init_JoinChannel();     // 접속된 채널들 중에서 접속자 리스트를 불러옴
                });
                break;

                #endregion

                #region 초기화 채널 접속 성공
            case "CHANNEL_INITJOIN_S":
                // 0 채널의 인덱스, 1 접속 유저 목록, 2 자신의 이름
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    // =================================================================================
                    // 탭 컨트롤의 아이템을 전부 Clear
                    try
                    {
                        for (int i = 0; i < Data.Instance.MyChannelList.Count; i++)
                        {
                            if (Data.Instance.MyChannelList.Count == 0)
                            {
                                return;
                            }
                            MainRecording.Instance.xaml_TabControl.Items.RemoveAt(2);
                        }
                    }
                    catch
                    {
                    }
                    finally
                    {
                        this.InitChannelDialog(pdata[0], pdata[1], pdata[2]);
                    }
                    // =================================================================================
                });
                break;
                #endregion

                #region 로그아웃
            case "LOGOUT_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate() { MainWindow.Instance.Show(); });
                break;

            case "NOW_LOGOUT":     // 중복된 아이디가 접속해있을 경우 강제종료시킴 SendingLogoutPacket();
                if (data[0] == Data.Instance.myId)
                {
                    MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                    {
                        MessageBox.Show("현재 아이디가 접속 중입니다. 접속을 해제했으니 다시 한 번 시도해주십시오.");
                    });
                }
                break;
                #endregion

                #region 채널 생성
            case "CHANNEL_ADD_S":     // 채널 리스트 - 0은 인덱스, 1은 채널이름
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    CreateChannel.Instance.Hide();
                    Control.Instance.ChannelAllList();

                    // =================================================================================
                    // 탭 컨트롤의 아이템을 전부 Clear
                    for (int i = 0; i < Data.Instance.MyChannelList.Count; i++)
                    {
                        if (Data.Instance.MyChannelList.Count == 0)
                        {
                            return;
                        }
                        MainRecording.Instance.xaml_TabControl.Items.RemoveAt(2);
                    }
                    // =================================================================================
                    Data.Instance.exam_cname = data[1];
                    this.ShowChannelDialog(data[0], data[3]);
                    MainRecording.Instance.xaml_TabControl.SelectedIndex = Data.Instance.count;
                    Data.Instance.count++;
                });
                break;

            case "CHANNEL_ADD_F":
                MessageBox.Show("채널 생성에 실패했습니다.");
                break;

            case "CHANNEL_ADD_CHECK_F":
                MessageBox.Show("이미 생성된 채널명과 일치합니다.");
                break;
                #endregion

                #region 채널 조인
            case "CHANNEL_JOIN_S":
                // 조인이 되면 data클래스에 있는 cname을 사용
                // 0 채널의 인덱스, 1 접속 유저 목록, 2 자신의 이름
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    try
                    {
                        // =================================================================================
                        // 탭 컨트롤의 아이템을 전부 Clear
                        for (int i = 0; i < Data.Instance.MyChannelList.Count; i++)
                        {
                            if (Data.Instance.MyChannelList.Count == 0)
                            {
                                return;
                            }
                            MainRecording.Instance.xaml_TabControl.Items.RemoveAt(2);
                        }
                    }
                    catch
                    {
                    }
                    finally
                    {
                        MainRecording.Instance.xaml_TabControl.SelectedIndex = Data.Instance.count;
                        Data.Instance.count++;
                        // =================================================================================
                        this.ShowChannelDialog(pdata[0], pdata[1]);
                    }
                });
                break;
                #endregion

                #region 채널 조인 리스트
            case "CHANNEL_JOINLIST_S":
                // 받는 데이터 : 채널 아이디, 멤버 리스트, 내 아이디
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    foreach (ChannelDialog ac in Data.Instance.MyChannelList)
                    {
                        if (ac.ChannelIndex == pdata[0])                        // 채널 탭에서 일치하는 이름을 찾아서 갱신
                        {
                            ac.InChannelUserListRefresh(pdata[1], pdata[2], 1); // 접속자 새로 고침
                            // 새로 갱신된 접속자 리스트를 자신의 리스트에 추가
                            ac.ChannelUserList = pdata[1];

                            Control.Instance.ChannelAllList();
                        }
                    }
                });
                break;

            case "CHANNEL_JOIN_F":
                MessageBox.Show("채널 접속에 실패했습니다.");
                break;
                #endregion

                #region 채널 나가기
            case "CHANNEL_EXIT_S":
                // 받는 데이터 : 채널 아이디, 멤버 리스트, 내 아이디
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    Control.Instance.ExitRequestList();     // 채널에서 나갔다면 리스트를 서버에게 요구함
                    Control.Instance.ChannelAllList();

                    for (int i = 0; i < Data.Instance.myChannelName.Count; i++)
                    {
                        if (Data.Instance.myChannelName[i] == pdata[2])
                        {
                            Data.Instance.myChannelName.RemoveAt(i);
                        }
                    }
                    Data.Instance.count--;
                    if (Data.Instance.count < 2)
                    {
                        Data.Instance.count = 2;
                    }
                });
                break;

            case "CHANNEL_EXITLIST_S":
                // 채널에서 누군가가 나갔을 때, 유저 리스트를 갱신
                // 받는 데이터 : 채널 아이디, 멤버 리스트, 내 아이디
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    foreach (ChannelDialog ac in Data.Instance.MyChannelList)
                    {
                        if (ac.ChannelIndex == pdata[0])
                        {
                            ac.ChannelUserList = pdata[1];
                            ac.InChannelUserListRefresh(pdata[1], pdata[2], 2);
                        }
                    }
                });
                break;
                #endregion

                #region 채널 관리자 변경
            // 받는 데이터 : 채널 아이디, 멤버 리스트, 권한 이임받은 멤버 아이디
            case "CHANNEL_ADMIN_GIVEHANDLE_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    foreach (ChannelDialog ac in Data.Instance.MyChannelList)
                    {
                        if (ac.ChannelIndex == pdata[0])
                        {
                            ChannelDialog.Instance.InChannelUserListRefresh(pdata[1], pdata[2], 3);
                            Control.Instance.ChannelAllList();
                        }
                    }
                });
                break;
                #endregion

                #region 관리자-강퇴기능
            // 받는 데이터 : [0]채널인덱스, [1]접속자 리스트, [2]강퇴대상 아이디
            case "ADM_OUT_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    foreach (ChannelDialog ac in Data.Instance.MyChannelList)
                    {
                        if (ac.ChannelIndex == pdata[0])
                        {
                            ChannelDialog.Instance.InChannelUserListRefresh(pdata[1], pdata[2], 4);
                        }
                    }
                });
                break;
                #endregion

                #region 관리자-채널 삭제기능
            case "CHANNEL_DELETE_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    Control.Instance.ChannelAllList();           // 채널리스트 갱신
                });
                break;
                #endregion

                #region 채팅
            case "R_ACHATTING_SEND":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MainChannel.Instance.Chatting(pack);
                });
                break;

            case "R_ACHATTING_SEND_F":
                MessageBox.Show("로그인이 되어있지 않거나, 다른채널에 접속중입니다.");
                break;

            case "R_ICHATTING_SEND":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    foreach (ChannelDialog ac in Data.Instance.MyChannelList)
                    {
                        if (ac.ChannelIndex == data[1])
                        {
                            ac.ChannelChatting(pack);
                        }
                    }
                });
                break;
                #endregion

                #region FTP관련
            //채널접속 시 파일리스트 출력
            case "FTP_INITLIST_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    foreach (ChannelDialog ac in Data.Instance.MyChannelList)
                    {
                        if (ac.ChannelName == pdata[0])
                        {
                            if (pdata[3] == "파일없음")
                            {
                                return;
                            }
                            else
                            {
                                ac.ftp.FileList_Load(pdata[1], pdata[2], pdata[3]);     // FTP ID, FTP PASSWORD, FILELIST 전송
                            }
                        }
                    }
                });
                break;

                #endregion

                #region FTP 파일 전송
            case "FILE_UPLOAD_S":
                // FTPServer cs의 FileUpload()에 접근
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    foreach (ChannelDialog ac in Data.Instance.MyChannelList)
                    {
                        if (ac.ChannelIndex == Data.Instance.uploadfile_cidx)
                        {
                            ac.ftp.FileUpload();
                        }
                    }
                });
                break;
                #endregion

                #region FTP 파일 수신
            case "FILE_DOWNLOAD_S":
                // FTPServer cs의 FileUpload()에 접근
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    foreach (ChannelDialog ac in Data.Instance.MyChannelList)
                    {
                        if (ac.ChannelIndex == Data.Instance.uploadfile_cidx)
                        {
                            ac.ftp.FileDownload();
                        }
                    }
                });
                break;

            case "FILE_DOWNLOAD_F":
                MessageBox.Show("파일을 찾을 수 없습니다.");
                break;
                #endregion

                #region FTP 파일 삭제
            case "FILE_DELETE_S":
                // FTPServer cs의 FileUpload()에 접근
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    foreach (ChannelDialog ac in Data.Instance.MyChannelList)
                    {
                        if (ac.ChannelIndex == Data.Instance.uploadfile_cidx)
                        {
                            ac.ftp.FileDelete();
                        }
                    }
                });
                break;

            case "FILE_DELETE_F":
                MessageBox.Show("파일을 찾을 수 없습니다.");
                break;
                #endregion

                #region  일 자동저장

            case "AUTO_SAVE_S":
                //S를 받았으면 폴더이름을 기준으로 그 폴더에 파일 저장. 파일 이름이 동일할 경우 덮어씀
                //FTP 업로드
                ftpserver.LogFileUpload();
                break;

            case "AUTO_SAVE_F":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MessageBox.Show("저장이 실패하였습니다. 다시 시도해주세요");
                });
                break;
                #endregion

                #region 로그 파일 수동 저장

            case "RECORDING_SAVE_S":
                //S를 받았으면 폴더이름을 기준으로 그 폴더에 파일 저장. 파일 이름이 동일할 경우 덮어씀
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    ftpserver = new FTP_Channel();
                    ftpserver.LogFileUpload();
                });

                break;

            case "RECORDING_SAVE_F":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MessageBox.Show("저장이 실패하였습니다. 다시 시도해주세요");
                });
                break;
                #endregion

                #region  일업로드 여부

            case "FILEUPLOAD_SUCCESS_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    //MessageBox.Show("저장되었습니다.");
                });
                break;

            case "FILEUPLOAD_SUCCESS_F":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MessageBox.Show("DB에 로그파일 업로드 실패");
                });
                break;
                #endregion

                #region 개인 ID폴더 읽어서 ListView 출력

            case "ID_LOGLISTINIT_S":
                //로그 리스트 리스트뷰에 띄워줌
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Clear();
                    for (int i = 0; i < pdata.Length - 1; i++)
                    {
                        string[] cdata = pdata[i].Split('#');

                        MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Add(new InitDBLogList(cdata[0], cdata[1], cdata[2], cdata[3], cdata[4]));
                    }
                });
                break;
                #endregion

                #region 개인 ID폴더 파일 삭제
            case "MY_DBFILEDELETE_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    ftpserver = new FTP_Channel();
                    ftpserver.MyFileDelete();
                });
                break;

            case "MY_DBFILEDELETE_F":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MessageBox.Show("삭제할 파일이 없습니다.");
                });
                break;
                #endregion

                #region 개인 ID폴더 파일 업로드
            case "MYFILE_UPLOAD_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    ftpserver = new FTP_Channel();
                    ftpserver.MyFileUpload();
                    ftpserver.FileUploadSuccess();
                    MainRecording.Instance.dblist_Dlg.DBLogListInit();
                });
                break;
                #endregion

                #region 개인 ID폴더 날짜별 오름차순, 내림차순 정렬
            case "LIST_ASC_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Clear();
                    for (int i = 0; i < pdata.Length - 1; i++)
                    {
                        string[] cdata = pdata[i].Split('#');
                        MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Add(new InitDBLogList(cdata[0], cdata[1], cdata[2], cdata[3], cdata[4]));
                    }
                });
                break;

            case "LIST_DESC_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Clear();
                    for (int i = 0; i < pdata.Length - 1; i++)
                    {
                        string[] cdata = pdata[i].Split('#');
                        MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Add(new InitDBLogList(cdata[0], cdata[1], cdata[2], cdata[3], cdata[4]));
                    }
                });
                break;

            case "LIST_ASC_FILENAME_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Clear();
                    for (int i = 0; i < pdata.Length - 1; i++)
                    {
                        string[] cdata = pdata[i].Split('#');
                        MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Add(new InitDBLogList(cdata[0], cdata[1], cdata[2], cdata[3], cdata[4]));
                    }
                });
                break;

            case "LIST_DESC_FILENAME_S":
                MainWindow.Instance.Dispatcher.Invoke(DispatcherPriority.Normal, (Action) delegate()
                {
                    MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Clear();
                    for (int i = 0; i < pdata.Length - 1; i++)
                    {
                        string[] cdata = pdata[i].Split('#');
                        MainRecording.Instance.dblist_Dlg.InitMemoList.Items.Add(new InitDBLogList(cdata[0], cdata[1], cdata[2], cdata[3], cdata[4]));
                    }
                });
                break;
                #endregion
            }
        }