public void BeginWrite(byte[] buffer, int offset, int size, WriteStreamCallback callback, object client) { temp_write_client = client; WriteCallback -= callback; WriteCallback += callback; SocketAsyncEventArgs e = new SocketAsyncEventArgs(); e.Completed += send_Completed; e.SetBuffer(buffer, offset, size); e.AcceptSocket = _tcpClientSocket.Client; if (!_tcpClientSocket.Client.SendAsync(e)) { send_Completed(_tcpClientSocket.Client, e); } }
/// <summary> /// Starts writing <b>stream</b> data to source stream. Data will be period handled and terminated as needed. /// </summary> /// <param name="stream">Stream which data to write to source stream.</param> /// <param name="maxSize">Maximum muber of bytes to read from <b>stream</b> and write source stream.</param> /// <param name="tag">User data.</param> /// <param name="callback">Callback to be called if asynchronous write completes.</param> /// <exception cref="ArgumentNullException">Raised when <b>stream</b> is null.</exception> /// <exception cref="InvalidOperationException">Raised when there already is pending write operation.</exception> public void BeginWritePeriodTerminated(Stream stream,int maxSize,object tag,WriteStreamCallback callback) { if(stream == null){ throw new ArgumentNullException("stream"); } lock(this){ if(m_IsWriteActive){ throw new InvalidOperationException("There is pending write operation, multiple write operations not allowed !"); } m_IsWriteActive = true; } m_pBeginWritePeriodTerminated_Stream = stream; m_BeginWritePeriodTerminated_MaxSize = maxSize; m_pBeginWritePeriodTerminated_Callback = callback; m_pBeginWritePeriodTerminated_BufferedStream = new BufferedStream(m_pStream); }
/// <summary> /// Starts writing all <b>stream</b> data to source stream. /// </summary> /// <param name="stream">Stream which data to write.</param> /// <param name="maxSize">Maximum number of bytes to read from <b>stream</b>.</param> /// <param name="tag">User data.</param> /// <param name="callback">Callback to be called if asynchronous write completes.</param> /// <exception cref="ArgumentNullException">Raised when <b>stream</b> is null.</exception> /// <exception cref="InvalidOperationException">Raised when there already is pending write operation.</exception> public void BeginWriteAll(Stream stream,int maxSize,object tag,WriteStreamCallback callback) { if(stream == null){ throw new ArgumentNullException("stream"); } lock(this){ if(m_IsWriteActive){ throw new InvalidOperationException("There is pending write operation, multiple write operations not allowed !"); } m_IsWriteActive = true; } m_pBeginWriteAll_Buffer = new byte[32000]; m_pBeginWriteAll_Stream = stream; m_BeginWriteAll_MaxSize = maxSize; m_pBeginWriteAll_Callback = callback; m_BeginWriteAll_Readed = 0; // Start reading data block. m_pBeginWriteAll_Stream.BeginRead( m_pBeginWriteAll_Buffer, 0, m_pBeginWriteAll_Buffer.Length, new AsyncCallback(this.InternalBeginWriteAllCallback), null ); }
/// <summary> /// Strats writing specified amount of data from <b>stream</b> to source stream. /// </summary> /// <param name="stream">Stream which data to wite to source stream.</param> /// <param name="count">Number of bytes read from <b>stream</b> and write to source stream.</param> /// <param name="callback">Callback to be called if asynchronous write completes.</param> /// <exception cref="ArgumentNullException">Raised when <b>stream</b> is null.</exception> /// <exception cref="InvalidOperationException">Raised when there already is pending write operation.</exception> public void BeginWrite(Stream stream,int count,WriteStreamCallback callback) { if(stream == null){ throw new ArgumentNullException("stream"); } lock(this){ if(m_IsWriteActive){ throw new InvalidOperationException("There is pending write operation, multiple write operations not allowed !"); } m_IsWriteActive = true; } m_pBeginWrite_Buffer = new byte[32000]; m_pBeginWrite_Stream = stream; m_BeginWrite_Count = count; m_pBeginWrite_Callback = callback; m_BeginWrite_Readed = 0; // Start reading data block. m_pBeginWrite_Stream.BeginRead( m_pBeginWrite_Buffer, 0, Math.Min(m_pBeginWrite_Buffer.Length,m_BeginWrite_Count), new AsyncCallback(this.InternalBeginWriteStreamCallback), null ); }