コード例 #1
0
ファイル: TcpSocket.cs プロジェクト: scottyjoe9/SJDrone
 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); }
 }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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
            );
        }
コード例 #4
0
        /// <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
            );
        }