Package org.gudy.azureus2.pluginsimpl.local.disk

Source Code of org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerImpl$DMWR

/*
* File    : DiskManagerImpl.java
* Created : 22-Mar-2004
* By      : parg
*
* Azureus - a Java Bittorrent client
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package org.gudy.azureus2.pluginsimpl.local.disk;

/**
* @author parg
*
*/


import org.gudy.azureus2.core3.disk.DiskManagerPiece;
import org.gudy.azureus2.core3.util.DirectByteBuffer;
import org.gudy.azureus2.plugins.disk.*;
import org.gudy.azureus2.plugins.utils.PooledByteBuffer;
import org.gudy.azureus2.pluginsimpl.local.utils.PooledByteBufferImpl;

public class
DiskManagerImpl
  implements DiskManager
{
  private org.gudy.azureus2.core3.disk.DiskManager    disk_manager;
 
  public
  DiskManagerImpl(
    org.gudy.azureus2.core3.disk.DiskManager    _disk_manager )
  {
    disk_manager  = _disk_manager;
  }
 
  public org.gudy.azureus2.core3.disk.DiskManager
  getDiskmanager()
  {
    return( disk_manager )
  }
 
  public DiskManagerReadRequest
  read(
    int                   piece_number,
    int                   offset,
    int                   length,
    final DiskManagerReadRequestListener  listener )
 
    throws DiskManagerException
  {
    if ( !disk_manager.checkBlockConsistencyForRead( "plugin", false, piece_number, offset, length )){
     
      throw( new DiskManagerException( "read invalid - parameters incorrect or piece incomplete" ));
    }
   
    final DMRR request = new DMRR( disk_manager.createReadRequest( piece_number, offset, length ));
   
    disk_manager.enqueueReadRequest(
      request.getDelegate(),
      new org.gudy.azureus2.core3.disk.DiskManagerReadRequestListener()
      {
        public void
        readCompleted(
          org.gudy.azureus2.core3.disk.DiskManagerReadRequest   _request,
          DirectByteBuffer                     _data )
        {
          listener.complete( request, new PooledByteBufferImpl( _data ));
        }

        public void
        readFailed(
          org.gudy.azureus2.core3.disk.DiskManagerReadRequest   _request,
          Throwable                         _cause )
        {
          listener.failed( request, new DiskManagerException( "read failed", _cause ));
        }

        public int
        getPriority()
        {
          return( 0 );
        }
       
        public void
        requestExecuted(
          long   bytes )
        {         
        }
      });
   
    return( request );
  }
 
  public DiskManagerWriteRequest
  write(
    final int                piece_number,
    final int                offset,
    PooledByteBuffer            data,
    final DiskManagerWriteRequestListener  listener )
 
    throws DiskManagerException
  {
    DirectByteBuffer buffer = ((PooledByteBufferImpl)data).getBuffer();
       
    if ( !disk_manager.checkBlockConsistencyForWrite( "plugin", piece_number, offset, buffer )){
     
      throw( new DiskManagerException( "write invalid - parameters incorrect" ));
    }
   
    final int  length = buffer.remaining( DirectByteBuffer.SS_EXTERNAL );
   
    final DMWR request = new DMWR( disk_manager.createWriteRequest( piece_number, offset, buffer, null ),length );
   
    disk_manager.enqueueWriteRequest(
      request.getDelegate(),
      new org.gudy.azureus2.core3.disk.DiskManagerWriteRequestListener()
      {
        public void
        writeCompleted(
          org.gudy.azureus2.core3.disk.DiskManagerWriteRequest   _request )
        {
          DiskManagerPiece[]  dm_pieces = disk_manager.getPieces();
       
          DiskManagerPiece  dm_piece = dm_pieces[piece_number];

          if (!dm_piece.isDone()){
           
            int  current_offset = offset;
           
            for ( int i=0;i<length;i+=DiskManager.BLOCK_SIZE ){
           
              dm_piece.setWritten( current_offset / DiskManager.BLOCK_SIZE );
             
              current_offset += DiskManager.BLOCK_SIZE;
            }
          }
         
          listener.complete( request );
        }

        public void
        writeFailed(
          org.gudy.azureus2.core3.disk.DiskManagerWriteRequest   _request,
          Throwable                         _cause )
        {
          listener.failed( request, new DiskManagerException( "read failed", _cause ));
        }
      });
   
    return( request );
  }
 
  private class
  DMRR
    implements org.gudy.azureus2.plugins.disk.DiskManagerReadRequest
  {
    private org.gudy.azureus2.core3.disk.DiskManagerReadRequest    request;
   
    private
    DMRR(
      org.gudy.azureus2.core3.disk.DiskManagerReadRequest  _request )
    {
      request = _request;
    }
   
    private org.gudy.azureus2.core3.disk.DiskManagerReadRequest
    getDelegate()
    {
      return( request );
    }
   
    public int
    getPieceNumber()
    {
      return( request.getPieceNumber());
    }
   
    public int
    getOffset()
    {
      return( request.getOffset());
    }
   
    public int
    getLength()
    {
      return( request.getLength());
    }
  }
 
  private class
  DMWR
    implements org.gudy.azureus2.plugins.disk.DiskManagerWriteRequest
  {
    private org.gudy.azureus2.core3.disk.DiskManagerWriteRequest    request;
    private int                              length;
   
    private
    DMWR(
      org.gudy.azureus2.core3.disk.DiskManagerWriteRequest  _request,
      int                            _length )
    {
      request = _request;
    }
   
    private org.gudy.azureus2.core3.disk.DiskManagerWriteRequest
    getDelegate()
    {
      return( request );
    }
   
    public int
    getPieceNumber()
    {
      return( request.getPieceNumber());
    }
   
    public int
    getOffset()
    {
      return( request.getOffset());
    }
   
    public int
    getLength()
    {
      return( length );
    }
  }
}
TOP

Related Classes of org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerImpl$DMWR

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.