Rice Pastry API

org.mpisws.p2p.filetransfer
Class FileTransferImpl

java.lang.Object
  extended by org.mpisws.p2p.filetransfer.FileTransferImpl
All Implemented Interfaces:
FileTransfer, AppSocketReceiver

public class FileTransferImpl
extends java.lang.Object
implements FileTransfer, AppSocketReceiver

TODO: implement read, write

Author:
Jeff Hoye

Field Summary
protected  FileTransferCallback callback
           
static byte CANCEL_PRIORITY
           
protected  int CHUNK_SIZE
          Max size of a message, (the size that can't be preempted)
static byte DEFAULT_PRIORITY
           
protected  Environment environment
           
protected  int FILE_CACHE
          Number of chunks to keep in memory per file.
protected  FileAllocationStrategy fileAllocater
           
 int fileChunksInMemory
          Synchronized by only being mutated/checked on selector thread can be reading when < MAX_PENDING_CHUNKS, allowed to be greater
static byte HIGH_PRIORITY
           
protected  Logger logger
           
static byte LOW_PRIORITY
           
static byte LOWEST_PRIORITY
           
static int MAX_FILE_CHUNKS_IN_MEMORY
           
static byte MAX_PRIORITY
           
static byte MEDIUM_HIGH_PRIORITY
           
static byte MEDIUM_LOW_PRIORITY
           
static byte MEDIUM_PRIORITY
           
static byte MSG_BB_HEADER
          Contains int UID, int length
static byte MSG_CANCEL
          Contains int UID
static byte MSG_CANCEL_REQUEST
          Contains int UID
static byte MSG_CHUNK
          Contains int UID, int chunk_length, byte[chunk_length] msg
static byte MSG_FILE_HEADER
          Contains int UID, long offset, long length, int nameLength, UTF name
protected  Processor processor
           
protected  SelectorManager selectorManager
           
protected  AppSocket socket
           
 
Constructor Summary
FileTransferImpl(AppSocket socket, FileTransferCallback callback, Environment env)
           
FileTransferImpl(AppSocket socket, FileTransferCallback callback, FileAllocationStrategy fileAllocater, Environment env)
           
FileTransferImpl(AppSocket socket, FileTransferCallback callback, FileAllocationStrategy fileAllocater, Environment env, Processor p)
           
FileTransferImpl(AppSocket socket, FileTransferCallback callback, FileAllocationStrategy fileAllocater, Environment env, Processor p, int chunkSize, int numChunksToWriteToNetwork)
           
 
Method Summary
 void addIncomingFile(int uid, byte[] metadata, long offset, long length)
           
 void addIncomingMessage(int uid, int size)
           
 void addListener(FileTransferListener listener)
           
protected  boolean complete(org.mpisws.p2p.filetransfer.FileTransferImpl.MessageWrapper wrapper)
           
protected  void decrementFileChunksInMemory()
           
 java.lang.Iterable<FileTransferListener> getListeners()
           
protected  int getUid()
           
protected  void incrementFileChunksInMemory()
           
protected  void notifyListenersReceiveFileProgress(FileReceipt receipt, long bytesReceived, long bytesTotal)
           
protected  void notifyListenersReceiveMsgProgress(BBReceipt receipt, int bytesReceived, int bytesTotal)
           
protected  void notifyListenersReceiverCancelled(Receipt receipt)
           
protected  void notifyListenersSenderCancelled(org.mpisws.p2p.filetransfer.FileTransferImpl.DataReader receipt)
           
protected  void notifyListenersSendFileProgress(FileReceipt receipt, long bytesSent, long bytesTotal)
           
protected  void notifyListenersSendMsgProgress(BBReceipt receipt, int bytesSent, int bytesTotal)
           
protected  void notifyListenersTransferFailed(Receipt receipt, boolean incoming)
           
protected  void purge()
           
 void receiveException(AppSocket socket, java.lang.Exception e)
          Called when there is an error
protected  void receiverCancelled(int uid)
           
 void receiveSelectResult(AppSocket socket, boolean canRead, boolean canWrite)
          Called when a socket is available for read/write
 void receiveSocket(AppSocket socket)
          Called when we have a new socket (due to a call to connect or accept)
 void registerToReadIfPossible()
           
 void removeListener(FileTransferListener listener)
           
protected  boolean requestCancel(int uid)
          Only call this on the receiver side, b/c uid is simplex
protected  void scheduleToWriteIfNeeded()
          Must be called on selectorManager.
protected  boolean sendCancel(int uid)
          Only call this on the sender side, b/c uid is simplex
protected  void senderCancelled(int uid)
           
 FileReceipt sendFile(java.io.File f, java.nio.ByteBuffer metadata, byte priority, Continuation<FileReceipt,java.lang.Exception> c)
           
 FileReceipt sendFile(java.io.File f, java.nio.ByteBuffer metadataBB, byte priority, long offset, long length, Continuation<FileReceipt,java.lang.Exception> c)
           
 BBReceipt sendMsg(java.nio.ByteBuffer bb, byte priority, Continuation<BBReceipt,java.lang.Exception> c)
           
protected  void socketClosed()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MSG_FILE_HEADER

public static final byte MSG_FILE_HEADER
Contains int UID, long offset, long length, int nameLength, UTF name

See Also:
Constant Field Values

MSG_BB_HEADER

public static final byte MSG_BB_HEADER
Contains int UID, int length

See Also:
Constant Field Values

MSG_CHUNK

public static final byte MSG_CHUNK
Contains int UID, int chunk_length, byte[chunk_length] msg

See Also:
Constant Field Values

MSG_CANCEL

public static final byte MSG_CANCEL
Contains int UID

See Also:
Constant Field Values

MSG_CANCEL_REQUEST

public static final byte MSG_CANCEL_REQUEST
Contains int UID

See Also:
Constant Field Values

fileAllocater

protected FileAllocationStrategy fileAllocater

socket

protected AppSocket socket

callback

protected FileTransferCallback callback

CHUNK_SIZE

protected int CHUNK_SIZE
Max size of a message, (the size that can't be preempted)


FILE_CACHE

protected int FILE_CACHE
Number of chunks to keep in memory per file. If this is too big, takes more memory, if this is too small, we are always blocking on file I/O when there is available network I/O... Is there a way to make this adaptive? Think about it...


selectorManager

protected SelectorManager selectorManager

logger

protected Logger logger

processor

protected Processor processor

environment

protected Environment environment

MAX_PRIORITY

public static final byte MAX_PRIORITY
See Also:
Constant Field Values

HIGH_PRIORITY

public static final byte HIGH_PRIORITY
See Also:
Constant Field Values

MEDIUM_HIGH_PRIORITY

public static final byte MEDIUM_HIGH_PRIORITY
See Also:
Constant Field Values

MEDIUM_PRIORITY

public static final byte MEDIUM_PRIORITY
See Also:
Constant Field Values

MEDIUM_LOW_PRIORITY

public static final byte MEDIUM_LOW_PRIORITY
See Also:
Constant Field Values

LOW_PRIORITY

public static final byte LOW_PRIORITY
See Also:
Constant Field Values

LOWEST_PRIORITY

public static final byte LOWEST_PRIORITY
See Also:
Constant Field Values

DEFAULT_PRIORITY

public static final byte DEFAULT_PRIORITY
See Also:
Constant Field Values

CANCEL_PRIORITY

public static final byte CANCEL_PRIORITY
See Also:
Constant Field Values

MAX_FILE_CHUNKS_IN_MEMORY

public static final int MAX_FILE_CHUNKS_IN_MEMORY
See Also:
Constant Field Values

fileChunksInMemory

public int fileChunksInMemory
Synchronized by only being mutated/checked on selector thread can be reading when < MAX_PENDING_CHUNKS, allowed to be greater

Constructor Detail

FileTransferImpl

public FileTransferImpl(AppSocket socket,
                        FileTransferCallback callback,
                        FileAllocationStrategy fileAllocater,
                        Environment env,
                        Processor p)

FileTransferImpl

public FileTransferImpl(AppSocket socket,
                        FileTransferCallback callback,
                        FileAllocationStrategy fileAllocater,
                        Environment env,
                        Processor p,
                        int chunkSize,
                        int numChunksToWriteToNetwork)

FileTransferImpl

public FileTransferImpl(AppSocket socket,
                        FileTransferCallback callback,
                        Environment env)

FileTransferImpl

public FileTransferImpl(AppSocket socket,
                        FileTransferCallback callback,
                        FileAllocationStrategy fileAllocater,
                        Environment env)
Method Detail

socketClosed

protected void socketClosed()

receiveException

public void receiveException(AppSocket socket,
                             java.lang.Exception e)
Description copied from interface: AppSocketReceiver
Called when there is an error

Specified by:
receiveException in interface AppSocketReceiver

purge

protected void purge()

scheduleToWriteIfNeeded

protected void scheduleToWriteIfNeeded()
Must be called on selectorManager. A) finds a writingSocket if possible opens one if needed


complete

protected boolean complete(org.mpisws.p2p.filetransfer.FileTransferImpl.MessageWrapper wrapper)

addListener

public void addListener(FileTransferListener listener)
Specified by:
addListener in interface FileTransfer

removeListener

public void removeListener(FileTransferListener listener)
Specified by:
removeListener in interface FileTransfer

getListeners

public java.lang.Iterable<FileTransferListener> getListeners()

notifyListenersSendMsgProgress

protected void notifyListenersSendMsgProgress(BBReceipt receipt,
                                              int bytesSent,
                                              int bytesTotal)

notifyListenersReceiveMsgProgress

protected void notifyListenersReceiveMsgProgress(BBReceipt receipt,
                                                 int bytesReceived,
                                                 int bytesTotal)

notifyListenersSendFileProgress

protected void notifyListenersSendFileProgress(FileReceipt receipt,
                                               long bytesSent,
                                               long bytesTotal)

notifyListenersReceiveFileProgress

protected void notifyListenersReceiveFileProgress(FileReceipt receipt,
                                                  long bytesReceived,
                                                  long bytesTotal)

notifyListenersSenderCancelled

protected void notifyListenersSenderCancelled(org.mpisws.p2p.filetransfer.FileTransferImpl.DataReader receipt)

notifyListenersReceiverCancelled

protected void notifyListenersReceiverCancelled(Receipt receipt)

notifyListenersTransferFailed

protected void notifyListenersTransferFailed(Receipt receipt,
                                             boolean incoming)

sendFile

public FileReceipt sendFile(java.io.File f,
                            java.nio.ByteBuffer metadata,
                            byte priority,
                            Continuation<FileReceipt,java.lang.Exception> c)
                     throws java.io.IOException
Specified by:
sendFile in interface FileTransfer
Throws:
java.io.IOException

sendFile

public FileReceipt sendFile(java.io.File f,
                            java.nio.ByteBuffer metadataBB,
                            byte priority,
                            long offset,
                            long length,
                            Continuation<FileReceipt,java.lang.Exception> c)
                     throws java.io.IOException
Specified by:
sendFile in interface FileTransfer
Parameters:
f - the file to send
metadataBB - this data will be delivered to the FileAllocationStrategy and the FileTransferCallback, it can contain whatever the application needs to name the file, often a filename is sufficient.
priority - the priority of sending
offset - where to start in the file
length - how many bytes to send (must be <= fileLength-offset)
c - who to notify when it is done
Returns:
Throws:
java.io.IOException

sendMsg

public BBReceipt sendMsg(java.nio.ByteBuffer bb,
                         byte priority,
                         Continuation<BBReceipt,java.lang.Exception> c)
Specified by:
sendMsg in interface FileTransfer

getUid

protected int getUid()

receiveSelectResult

public void receiveSelectResult(AppSocket socket,
                                boolean canRead,
                                boolean canWrite)
Description copied from interface: AppSocketReceiver
Called when a socket is available for read/write

Specified by:
receiveSelectResult in interface AppSocketReceiver

incrementFileChunksInMemory

protected void incrementFileChunksInMemory()

decrementFileChunksInMemory

protected void decrementFileChunksInMemory()

registerToReadIfPossible

public void registerToReadIfPossible()

receiverCancelled

protected void receiverCancelled(int uid)

senderCancelled

protected void senderCancelled(int uid)

addIncomingMessage

public void addIncomingMessage(int uid,
                               int size)

addIncomingFile

public void addIncomingFile(int uid,
                            byte[] metadata,
                            long offset,
                            long length)
                     throws java.io.IOException
Throws:
java.io.IOException

receiveSocket

public void receiveSocket(AppSocket socket)
Description copied from interface: AppSocketReceiver
Called when we have a new socket (due to a call to connect or accept)

Specified by:
receiveSocket in interface AppSocketReceiver

requestCancel

protected boolean requestCancel(int uid)
Only call this on the receiver side, b/c uid is simplex

Parameters:
uid -
Returns:
if we can guarantee the request was cancelled

sendCancel

protected boolean sendCancel(int uid)
Only call this on the sender side, b/c uid is simplex

Parameters:
uid -
Returns:

Rice Pastry API

Copyright © 2001-2005 - Rice Pastry.


Imprint-Dataprotection