view rep/handler/REPNode.java @ 382:4b87f89b3afd

REP Session Manager (Java version) new structure
author one@firefly.cr.ie.u-ryukyu.ac.jp
date Mon, 10 Nov 2008 22:07:45 +0900
parents
children bcdf5476b8e4
line wrap: on
line source

package rep.handler;

import java.io.IOException;

import rep.REP;
import rep.REPCommand;
import rep.channel.REPSelectionKey;
import rep.channel.REPSocketChannel;

public abstract class REPNode {

	public int eid; // globally unique
	public int sid=-1; // globally unique
	public String host;
	public String file;
	public REP mode;
	public REPSocketChannel<REPCommand> channel;
	public REPNode next;
	
	public REPNode() {
		
	}
	
	public REPNode(int eid, REPSocketChannel<REPCommand> channel) {
		this.eid = eid;
		this.channel = channel;
	}

	public String getName() {
		return file;
	}

	public void setName(String string) {
		file = string;
	}


	public void setSID(int sid) {
		this.sid = sid;
	}
	
	public int getSID() {
		return sid;
	}

	public boolean hasSession() {
		return sid != -1;
	}
	
	public String toString(){
		return ("Editor:" + eid);
	}

	public void setEID(int eid) {
		this.eid = eid;
	}
	
	public int getEID(){
		return eid;
	}

	public void setHost(String host){
		if (channel!=null)
			this.host = host;
	}

	
	public String getHost(){
		return host;
	}
	public REPSocketChannel<REPCommand> getChannel(){
		return channel;
		
	}
	public void setChannel(REPSocketChannel<REPCommand> channel) {
		this.channel = channel;		
	}

	public void merge(REPNode editor) {
		if (sid==-1) sid = editor.sid;
		if (file==null) file = editor.file;
		if (host==null) host = editor.host;
	}

	public abstract void handle(REPSelectionKey<REPCommand> key) throws IOException;


	public abstract void cancel(REPSocketChannel<REPCommand> channel1) ;

	public abstract String getLocalHostName();


	public abstract void send(REPCommand command) ;


	public abstract void setQuit2(REPCommand receivedCommand) ;

	public abstract int seq() ;

	public abstract boolean isMerging() ;


	public abstract boolean manage(REPCommand command) ;


	public void setMode(REP cmd) {
		mode = cmd;
	}

	public boolean isEditor() {
		return mode==REP.SMCMD_JOIN||mode==REP.SMCMD_PUT;
	}
	
	public boolean isForwarder() {
		return mode==REP.SMCMD_SM_JOIN||mode==REP.SMCMD_SM_JOIN_ACK;
	}

	public boolean isDirect() {
		return isEditor();
	}

	public REPNode getNextForwarder() {
		return next;
	}
	public void setNext(REPNode f) {
		next = f;
	}
	

}