/* Learning Net - shlomy boshy 031868912
 * Reinforcement Learning network simulation  
 */
package learnnet;

import learnnet.*;

public class Message {
	/* message (packet) structure */
	
	
	public final static int TYPE_DATA=0; /* default */
	public final static int TYPE_REPLY=1;

	
	public Object Data;
	public Node sender;
	public Node dest;	
  public Node source; /* null in replies */
	public int type;
  public double queueTime; 
  /* implemented as num messages waited for in queue */
  public double transferTime;
  /* is defined in the link between nodes */
  public double totalTime; 
  
  public double queueTimeOnSender; /* for dual-QRouting */

  Message(Node source,Object Data) {    
    this.source = source;
    this.Data = Data;
  }

	Message (Node source,Node sender,Node dest){
    this.source = source;
		this.sender = sender;	
		this.dest = dest;	

	}
	
	
	Message (Node source,Node sender,Node dest,Object Data,int type){
    this.source = source;
		this.sender = sender;	
		this.dest = dest;	
		this.Data = Data;		
		this.type = type;

	}
	
	
  
		protected boolean sendMessage(Node from,Node to,int type) {
			
		/* puts Message M in to's incoming queue
		 * and make it notice it 
		 *  
		 * NOTE : message dest is its FINAL destination and not 'to' 
		 *        so 'dest' is not updated. 
		 */
		 
		 this.sender = from;		
		 this.type = type;
		 to.putMessage(this);
		 to.noteMessage();	  
     //Network.debugPrint((String)Data+":"+from+"-"+to+"("+dest+")");
		 return true; /* message sent successfull */        
    }
    

}