Rice Pastry API

rice.tutorial.transportlayer
Class BandwidthLimitingTransportLayer<Identifier>

java.lang.Object
  extended by rice.tutorial.transportlayer.BandwidthLimitingTransportLayer<Identifier>
All Implemented Interfaces:
TransportLayer<Identifier,java.nio.ByteBuffer>, TransportLayerCallback<Identifier,java.nio.ByteBuffer>, Destructable

public class BandwidthLimitingTransportLayer<Identifier>
extends java.lang.Object
implements TransportLayer<Identifier,java.nio.ByteBuffer>, TransportLayerCallback<Identifier,java.nio.ByteBuffer>


Field Summary
protected  int bucket
          When this goes to zero, don't send messages
protected  int BUCKET_SIZE
          The size of the bucket.
protected  int BUCKET_TIME_LIMIT
          How often the bucket is refilled.
protected  Environment environment
          The environment
protected  Logger logger
           
protected  TransportLayer<Identifier,java.nio.ByteBuffer> tl
          The lower level transport layer.
 
Constructor Summary
BandwidthLimitingTransportLayer(TransportLayer<Identifier,java.nio.ByteBuffer> tl, int bucketSize, int bucketTimelimit, Environment env)
          To send 10K/second specify use 10240,1000
 
Method Summary
 void acceptMessages(boolean b)
          Toggle accepting incoming messages.
 void acceptSockets(boolean b)
          Toggle accepting new sockets.
 void destroy()
           
static PastryNodeFactory exampleA(int bindport, Environment env, NodeIdFactory nidFactory, int amt, int time)
           
static PastryNodeFactory exampleB(int bindport, Environment env, NodeIdFactory nidFactory, int amt, int time)
           
 Identifier getLocalIdentifier()
          The local node.
 void incomingSocket(P2PSocket<Identifier> s)
          Notification of a new socket.
 void messageReceived(Identifier i, java.nio.ByteBuffer m, java.util.Map<java.lang.String,java.lang.Object> options)
          Called when a new message is received.
 SocketRequestHandle<Identifier> openSocket(Identifier i, SocketCallback<Identifier> deliverSocketToMe, java.util.Map<java.lang.String,java.lang.Object> options)
          Open a socket to the Identifier
 MessageRequestHandle<Identifier,java.nio.ByteBuffer> sendMessage(Identifier i, java.nio.ByteBuffer m, MessageCallback<Identifier,java.nio.ByteBuffer> deliverAckToMe, java.util.Map<java.lang.String,java.lang.Object> options)
          Send the message to the identifier
 void setCallback(TransportLayerCallback<Identifier,java.nio.ByteBuffer> callback)
          Set the callback for incoming sockets/messages
 void setErrorHandler(ErrorHandler<Identifier> handler)
          To be notified of problems not related to an outgoing messaage/socket.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

tl

protected TransportLayer<Identifier,java.nio.ByteBuffer> tl
The lower level transport layer.


environment

protected Environment environment
The environment


logger

protected Logger logger

BUCKET_SIZE

protected int BUCKET_SIZE
The size of the bucket.


BUCKET_TIME_LIMIT

protected int BUCKET_TIME_LIMIT
How often the bucket is refilled.


bucket

protected int bucket
When this goes to zero, don't send messages

Constructor Detail

BandwidthLimitingTransportLayer

public BandwidthLimitingTransportLayer(TransportLayer<Identifier,java.nio.ByteBuffer> tl,
                                       int bucketSize,
                                       int bucketTimelimit,
                                       Environment env)
To send 10K/second specify use 10240,1000

Parameters:
bucketSize - bytes to send
bucketTimelimit - in millis
Method Detail

sendMessage

public MessageRequestHandle<Identifier,java.nio.ByteBuffer> sendMessage(Identifier i,
                                                                        java.nio.ByteBuffer m,
                                                                        MessageCallback<Identifier,java.nio.ByteBuffer> deliverAckToMe,
                                                                        java.util.Map<java.lang.String,java.lang.Object> options)
Description copied from interface: TransportLayer
Send the message to the identifier

Specified by:
sendMessage in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
i - the destination
m - the message
deliverAckToMe - layer dependent notification when the message is sent (can indicate placed on the wire, point-to-point acknowledgement, or end-to-end acknowledgement)
options - delivery options (don't source route, encrypt etc) (may not be respected if layer cannot provide service)
Returns:
ability to cancel the message if no longer relevent

openSocket

public SocketRequestHandle<Identifier> openSocket(Identifier i,
                                                  SocketCallback<Identifier> deliverSocketToMe,
                                                  java.util.Map<java.lang.String,java.lang.Object> options)
Description copied from interface: TransportLayer
Open a socket to the Identifier

Specified by:
openSocket in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
i - who to open the socket to
deliverSocketToMe - the callback when the socket is opened
options - options on how to open the socket (don't source route, encrypt etc) (may not be respected if layer cannot provide service)
Returns:
an object to cancel opening the socket if it takes to long, or is no longer relevent

setCallback

public void setCallback(TransportLayerCallback<Identifier,java.nio.ByteBuffer> callback)
Description copied from interface: TransportLayer
Set the callback for incoming sockets/messages

Specified by:
setCallback in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
callback - the callback for incoming sockets/messages

incomingSocket

public void incomingSocket(P2PSocket<Identifier> s)
                    throws java.io.IOException
Description copied from interface: TransportLayerCallback
Notification of a new socket.

Specified by:
incomingSocket in interface TransportLayerCallback<Identifier,java.nio.ByteBuffer>
Parameters:
s - the incoming socket
Throws:
java.io.IOException

acceptMessages

public void acceptMessages(boolean b)
Description copied from interface: TransportLayer
Toggle accepting incoming messages. Useful in flow control if overwhelmed by incoming sockets. Default: true

Specified by:
acceptMessages in interface TransportLayer<Identifier,java.nio.ByteBuffer>

acceptSockets

public void acceptSockets(boolean b)
Description copied from interface: TransportLayer
Toggle accepting new sockets. Useful in flow control if overwhelmed by incoming sockets. Default: true

Specified by:
acceptSockets in interface TransportLayer<Identifier,java.nio.ByteBuffer>

getLocalIdentifier

public Identifier getLocalIdentifier()
Description copied from interface: TransportLayer
The local node.

Specified by:
getLocalIdentifier in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Returns:
The local node.

setErrorHandler

public void setErrorHandler(ErrorHandler<Identifier> handler)
Description copied from interface: TransportLayer
To be notified of problems not related to an outgoing messaage/socket. Or to be notified if a callback isn't provided.

Specified by:
setErrorHandler in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
handler - to be notified of problems not related to a specific messaage/socket.

destroy

public void destroy()
Specified by:
destroy in interface Destructable

messageReceived

public void messageReceived(Identifier i,
                            java.nio.ByteBuffer m,
                            java.util.Map<java.lang.String,java.lang.Object> options)
                     throws java.io.IOException
Description copied from interface: TransportLayerCallback
Called when a new message is received.

Specified by:
messageReceived in interface TransportLayerCallback<Identifier,java.nio.ByteBuffer>
Parameters:
i - The node it is coming from
m - the message
options - describe how the message arrived (udp/tcp, encrypted etc)
Throws:
java.io.IOException - if there is a problem decoding the message

exampleA

public static PastryNodeFactory exampleA(int bindport,
                                         Environment env,
                                         NodeIdFactory nidFactory,
                                         int amt,
                                         int time)
                                  throws java.io.IOException
Throws:
java.io.IOException

exampleB

public static PastryNodeFactory exampleB(int bindport,
                                         Environment env,
                                         NodeIdFactory nidFactory,
                                         int amt,
                                         int time)
                                  throws java.io.IOException
Throws:
java.io.IOException

Rice Pastry API

Copyright © 2001-2005 - Rice Pastry.


Imprint-Dataprotection