Esempio n. 1
0
        void ReceiveProcess(Socket clientSocket)
        {
            try
            {
                if (m_bufQueue.Count <= 0)
                {
                    return;
                }
                if (m_serverConnected == false)
                {
                    return;
                }


                if (m_initiateTransfer == true)
                {
                    File.AppendAllText("c:\\tcp.txt", "1 : " + m_bufQueue.Count.ToString() + Environment.NewLine);
                    if (m_bufQueue.Count < m_fileSize)
                    {
                        return;
                    }
                    File.AppendAllText("c:\\tcp.txt", "2 : " + m_bufQueue.Count.ToString() + Environment.NewLine);
                    m_bufQueue.read(readBuffer, m_fileSize);
                    File.AppendAllText("c:\\tcp.txt", "3 : " + m_bufQueue.Count.ToString() + Environment.NewLine);
                    m_binWriter.Write(readBuffer, 0, m_fileSize);
                    File.AppendAllText("c:\\tcp.txt", "4 : " + m_bufQueue.Count.ToString() + Environment.NewLine);
                    m_fileSize         = 0;
                    m_initiateTransfer = false;
                    m_binWriter.Close();
                    m_binWriter = null;
                    File.AppendAllText("c:\\tcp.txt", "5 : " + m_bufQueue.Count.ToString() + Environment.NewLine);
                    if (m_bufQueue.Count < 6)
                    {
                        return;
                    }
                    File.AppendAllText("c:\\tcp.txt", "6 : " + m_bufQueue.Count.ToString() + Environment.NewLine);
                }


                m_bufQueue.read(readBuffer, 6);
                string   str = Encoding.ASCII.GetString(readBuffer, 0, 6);
                string[] s   = str.Split(new Char[] { '|' });
                if (s[0] != "@")
                {
                    return;
                }
                while (m_bufQueue.Count < int.Parse(s[1]))
                {
                    Thread.Sleep(1);
                }
                m_bufQueue.read(readBuffer, int.Parse(s[1]));
                str = Encoding.ASCII.GetString(readBuffer, 0, int.Parse(s[1]));

                string[] jdata = str.Split(new Char[] { '|' });


                if (jdata[0] != "sendcredintials" && m_userName != m_loginName && m_hasPassword != m_password)
                {
                    string jData = m_wja.SendErrorMessage("TCP Server has rejected client credentials");
                    SendMessage(clientSocket, jData);
                    return;
                }

                switch (jdata[0])
                {
                case "sendcredintials":
                {
                }
                break;

                case "initiatefiletransfer":
                {
                    m_fileTransferInfo = m_wja.DeserializeObject <ServerJsonApi.jFileTransfer>(jdata[1]);
                    m_initiateTransfer = true;
                    m_fileSize         = int.Parse(m_fileTransferInfo.fileSize);
                    string fieldDir   = m_fileTransferInfo.DirectoryName.Substring("c:\\".Length);
                    string pathOfFile = m_storageDirectory + "\\" + m_fileTransferInfo.guidName + "\\" + m_fileTransferInfo.userName + "\\" + fieldDir;
                    if (Directory.Exists(pathOfFile) == false)
                    {
                        Directory.CreateDirectory(pathOfFile);
                    }
                    pathOfFile += "\\" + m_fileTransferInfo.fileName;
                    m_binWriter = new BinaryWriter(File.Open(pathOfFile, FileMode.Create));
                }
                break;
                }
            }
            catch (Exception err)
            {
                Console.WriteLine(err.Message);
            }
        }
        public void SendFile(string fileName,
                             string userName,
                             string fieldGuid,
                             DateTime startTimeToSend,
                             ulong listNum,
                             ulong fileNumber,
                             ulong g360Index,
                             string fileOwnerUserName,
                             DateTime wtsDateTime)
        {
            try
            {
                Console.WriteLine("SendFile {0} {1} {2} ", fileName, userName, fieldGuid);
                if (m_sock == null)
                {
                    m_connectionThread = new Thread(ConnectionThread);
                    m_connectionThread.Start();
                    while (m_sock.Connected == false && m_running == true)
                    {
                        Thread.Sleep(10000);
                    }
                    if (m_sock.Connected == false)
                    {
                        return;
                    }
                }

                using (BinaryReader b = new BinaryReader(File.Open(fileName, FileMode.Open)))
                {
                    Console.WriteLine("File is opened");
                    int length = (int)b.BaseStream.Length;
                    ServerJsonApi.jFileTransfer j = new ServerJsonApi.jFileTransfer();
                    j.fileName      = Path.GetFileName(fileName);
                    j.fileSize      = length.ToString();
                    j.guidName      = fieldGuid;
                    j.userName      = userName;
                    j.DirectoryName = Path.GetDirectoryName(fileName);
                    string jData = m_wja.InitiateFileTransfer(j);
                    SendMessage(m_sock, jData);

                    Console.WriteLine("InitiateFileTransfer is sent");

                    byte[] fileBuffer = new byte[length];
                    if (b.Read(fileBuffer, 0, length) != length)
                    {
                        Console.WriteLine("err");
                    }
                    int count = length;

                    while (m_sock.Poll(5000000, SelectMode.SelectWrite) == false)
                    {
                        Console.WriteLine("This Socket is not writable!");
                    }

                    while (count > 0)
                    {
                        int size = m_sock.Send(fileBuffer, 0, count, SocketFlags.None);
                        while (m_sock.Poll(5000000, SelectMode.SelectWrite) == false)
                        {
                            Console.WriteLine("This Socket is not writable 11!");
                        }
                        Console.WriteLine("size = {0}", size);
                        count -= size;
                    }

                    //m_bWriter.Write(fileBuffer, 0, length);
                    //m_bWriter.Flush();
                    Console.WriteLine("Writer sent {0}", length);
                    b.Close();
                    Console.WriteLine("Writer is closed");
                }
            }
            catch (Exception err)
            {
                Console.WriteLine(err.Message);
                Console.ReadLine();
                throw (new SystemException(err.Message));
            }
        }