private void trvDir_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            before_expand_request request_data = new before_expand_request();

            request_data.Type = (int)PacketType.beforeExpand요청;

            e.Node.Nodes.Clear();
            request_data.dir_path = e.Node.FullPath;

            Packet.Serialize(request_data).CopyTo(this.sendBuffer, 0);
            this.Send();

            this.m_networkstream.Read(readBuffer, 0, 1024 * 4);

            before_expand_response temp_response = (before_expand_response)Packet.Desserialize(this.readBuffer);

            foreach (dir_info temp_dir in temp_response.dir_list)
            {
                TreeNode node = e.Node.Nodes.Add(temp_dir.file_name);
                if (temp_dir.is_dir)
                {
                    node.Nodes.Add("");
                }
            }
        }
Beispiel #2
0
        public void Receive()
        {
            try
            {
                while (m_bConnect)
                {
                    try
                    {
                        this.m_networkstream.Read(readBuffer, 0, 1024 * 4);
                    }
                    catch
                    {
                        disconnect();
                    }


                    Packet packet = (Packet)Packet.Desserialize(this.readBuffer);

                    switch ((int)packet.Type)
                    {
                    case (int)PacketType.초기화데이터요청:
                    {
                        string             Drv = path_text_box.Text;
                        init_data_response temp_init_response = new init_data_response();

                        temp_init_response.rootName = path_text_box.Text;
                        Packet.Serialize(temp_init_response).CopyTo(this.sendBuffer, 0);

                        this.Send();

                        break;
                    }

                    case (int)PacketType.beforeExpand요청:
                    {
                        before_expand_request temp_request = (before_expand_request)Packet.Desserialize(this.readBuffer);

                        DirectoryInfo          dir = new DirectoryInfo(temp_request.dir_path);
                        DirectoryInfo[]        di  = dir.GetDirectories();
                        before_expand_response temp_before_expand_response = new before_expand_response();
                        ArrayList temp_arr = new ArrayList();

                        int count = 0;
                        foreach (DirectoryInfo dirs in di)
                        {
                            DirectoryInfo[] temp_di;
                            string          temp_path = temp_request.dir_path.ToString() + "\\" + dirs.Name.ToString();

                            DirectoryInfo temp_dir      = new DirectoryInfo(temp_path);
                            dir_info      temp_dir_info = new dir_info();
                            temp_di = temp_dir.GetDirectories();
                            temp_dir_info.file_name = dirs.Name;
                            if (temp_di.Length > 0)
                            {
                                temp_dir_info.is_dir = true;
                            }
                            else
                            {
                                temp_dir_info.is_dir = false;
                            }

                            temp_arr.Add(temp_dir_info);
                            count++;
                        }

                        temp_before_expand_response.dir_list = new dir_info[count];

                        count = 0;
                        foreach (dir_info dirs in temp_arr)
                        {
                            temp_before_expand_response.dir_list[count].file_name = dirs.file_name;
                            temp_before_expand_response.dir_list[count].is_dir    = dirs.is_dir;
                            count++;
                        }

                        temp_before_expand_response.Type = (int)PacketType.beforeExpand요청;
                        Packet.Serialize(temp_before_expand_response).CopyTo(this.sendBuffer, 0);

                        this.Send();

                        break;
                    }

                    case (int)PacketType.beforeSelect요청:
                    {
                        DirectoryInfo   di;
                        DirectoryInfo[] diArray;
                        FileInfo[]      fiArray;

                        before_select_request temp_request = (before_select_request)Packet.Desserialize(this.readBuffer);
                        di = new DirectoryInfo(temp_request.dir_path);

                        diArray = di.GetDirectories();
                        fiArray = di.GetFiles();

                        before_select_response temp_response = new before_select_response();
                        temp_response.fiArray_len = fiArray.Length;
                        temp_response.diArray_len = diArray.Length;
                        temp_response.fiArray     = new FileInfo[fiArray.Length];
                        temp_response.diArray     = new DirectoryInfo[diArray.Length];

                        int count = 0;
                        foreach (FileInfo temp_info in fiArray)
                        {
                            temp_response.fiArray[count++] = temp_info;
                        }
                        count = 0;
                        foreach (DirectoryInfo temp_info in diArray)
                        {
                            temp_response.diArray[count++] = temp_info;
                        }

                        temp_response.Type = (int)PacketType.beforeSelect응답;
                        Packet.Serialize(temp_response).CopyTo(this.sendBuffer, 0);

                        this.Send();
                        break;
                    }

                    case (int)PacketType.상세정보요청:
                    {
                        detail_info_request  temp_request  = (detail_info_request)Packet.Desserialize(this.readBuffer);
                        detail_info_response temp_response = new detail_info_response();

                        if (temp_request.file_type == "D")
                        {
                            temp_response.dir_type  = "D";
                            temp_response.di_info   = new DirectoryInfo(temp_request.detail_path);
                            temp_response.file_info = null;
                        }
                        else
                        {
                            temp_response.dir_type  = "F";
                            temp_response.file_info = new FileInfo(temp_request.detail_path);
                            temp_response.di_info   = null;
                        }

                        temp_response.Type = (int)PacketType.상세정보응답;
                        Packet.Serialize(temp_response).CopyTo(this.sendBuffer, 0);

                        this.Send();
                        break;
                    }
                    }
                }
            }
            catch
            {
                this.Invoke(new MethodInvoker(delegate()
                {
                    button2.Text      = "서버켜기";
                    button2.ForeColor = Color.Black;
                    log_txt_box.AppendText("접속 종료...\n");
                    disconnect();
                }));
            }
        }