public SendFileInfo(string fileName, CrestronSocket socket, TransmitFileOptions flags, SendFileAsyncResult iar, AsyncCallback callback)
 {
     FileName = fileName;
     Socket   = socket;
     Flags    = flags;
     Iar      = iar;
     Callback = callback;
 }
        public IAsyncResult BeginSendFile(string fileName, byte[] preBuffer, byte[] postBuffer, TransmitFileOptions flags, AsyncCallback callback, object state)
        {
            if (fileName == null)
            {
                throw new ArgumentNullException("fileName");
            }

            if (!File.Exists(fileName))
            {
                throw new FileNotFoundException("file not found");
            }

            CheckDisposed();

            if (!Connected)
            {
                throw new NotSupportedException("not connected to remote host");
            }

            var iar = new SendFileAsyncResult {
                AsyncState = state
            };

            ThreadPool.QueueUserWorkItem(o =>
            {
                var sfi = (SendFileInfo)o;
                using (var fs = new FileStream(sfi.FileName, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (var ns = sfi.Socket.GetStream())
                    {
                        if (preBuffer != null)
                        {
                            ns.Write(preBuffer, 0, preBuffer.Length);
                        }
                        fs.CopyTo(ns);
                        if (postBuffer != null)
                        {
                            ns.Write(postBuffer, 0, postBuffer.Length);
                        }
                    }

                if (sfi.Flags.HasFlag(TransmitFileOptions.Disconnect))
                {
                    sfi.Socket.Close();
                }

                sfi.Iar.IsCompleted = true;
                ((CEvent)sfi.Iar.AsyncWaitHandle).Set();
                if (sfi.Callback != null)
                {
                    DoAsyncCallback(sfi.Callback, sfi.Iar);
                }
            }, new SendFileInfo(fileName, this, flags, iar, callback));

            return(iar);
        }
Esempio n. 3
0
		public IAsyncResult BeginSendFile (string fileName,
						   byte[] preBuffer,
						   byte[] postBuffer,
						   TransmitFileOptions flags,
						   AsyncCallback callback,
						   object state)
		{
			if (disposed && closed)
				throw new ObjectDisposedException (GetType ().ToString ());

			if (!connected)
				throw new NotSupportedException ();

			if (!File.Exists (fileName))
				throw new FileNotFoundException ();

			SendFileHandler d = new SendFileHandler (SendFile);
			return new SendFileAsyncResult (d, d.BeginInvoke (fileName, preBuffer, postBuffer, flags, ar => {
				SendFileAsyncResult sfar = new SendFileAsyncResult (d, ar);
				callback (sfar);
			}, state));
		}