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); }
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)); }