コード例 #1
0
        private void Receive()//받자 파일을
        {
            while (this.m_blsConnect)
            {
                try
                {
                    this.m_NetStream.Read(this.readBuffer, 0, readBuffer.Length);
                }
                catch
                {
                    this.m_blsConnect = false;
                    this.m_NetStream  = null;
                }
                FileData temp = (FileData)FileData.Deserialize(readBuffer);

                switch ((int)temp.Type)
                {
                case (int)FileDataType.로그인:
                {
                    break;
                }

                case (int)FileDataType.일리스트:
                {
                    filelist fList = (filelist)FileData.Deserialize(readBuffer);
                    string   list  = fList.fileList;

                    string[] strset = list.Split('%');
                    for (int i = 1; i < strset.Length; i = i + 2)
                    {
                        ListViewItem lvi = new ListViewItem(strset[i - 1]);
                        lvi.SubItems.Add(strset[i]);
                        metroListView1.Items.Add(lvi);
                    }

                    break;
                }

                case (int)FileDataType.텍스트파일:
                {
                    textFile tempText = (textFile)FileData.Deserialize(readBuffer);
                    myText.fillText(tempText.text, tempText.userName);
                    break;
                }

                case (int)FileDataType.일:
                {
                    bool open = false;

                    myFile file = (myFile)FileData.Deserialize(readBuffer);

                    FileStream fs = new FileStream(drPath + "\\" + file.filename, FileMode.Create, FileAccess.Write);

                    fs.Close();

                    fs = new FileStream(drPath + "\\" + file.filename, FileMode.Append, FileAccess.Write);

                    for (int i = 0; i < (int)file.size / (1024 * 4); i++)        //파일크기만큼 반복문
                    {
                        if (open)
                        {
                            m_NetStream.Read(readBuffer, 0, readBuffer.Length);
                            file = (myFile)FileData.Deserialize(readBuffer);
                        }
                        fs.Write(file.data, 0, 1024 * 4);
                        open = true;
                    }
                    if (open)
                    {
                        m_NetStream.Read(readBuffer, 0, readBuffer.Length);
                    }

                    file = (myFile)FileData.Deserialize(readBuffer);
                    fs.Write(file.data, 0, (int)file.size % (1024 * 4));
                    break;
                }

                case (int)FileDataType.접속목록:
                {
                    listItem listitem = (listItem)FileData.Deserialize(readBuffer);
                    if (listitem.index != -1)
                    {
                        listView1.Items.RemoveAt(listitem.index);
                        break;
                    }
                    ListViewItem item;
                    item = new ListViewItem(listitem.list);
                    listView1.Items.Add(item);

                    break;
                }

                case (int)FileDataType.일체크:
                {
                    fileCheck fCheck = (fileCheck)FileData.Deserialize(readBuffer);
                    if (fCheck.fileNeed == 0)
                    {
                        textFile tFile = new textFile(backup);
                        tFile.Type      = (int)FileDataType.텍스트파일;
                        tFile.userName  = textBox3.Text;
                        tFile.userIndex = fCheck.fileNumber;        //원래는 파일넘버가 이게 아니지만 유저 인덱스 넘겨줌
                        sendBuffer      = FileData.Serialize(tFile);

                        m_NetStream.Write(sendBuffer, 0, sendBuffer.Length);
                        m_NetStream.Flush();
                    }
                    break;
                }

                default:
                {
                    break;
                }
                }
            }
        }