📄 idealcontact.java
字号:
package implementations;import java.util.ArrayList;import simulator.Contact;import simulator.Message;import simulator.Event;import simulator.BasicEvent;import simulator.Stats;import util.CommandStatus;import util.Verbose;public class IdealContact extends Contact{ private boolean isUp = false; private boolean isIdle = false; public IdealContact() { super(); } public IdealContact(IdealContact org) { super(org); } public double getLatency() { return 0; } public double getTransferTime(Message msg) { return 0; } public boolean isUp() { return isUp; } public boolean isIdle() { return isIdle; } public boolean sendMessage(Message msg) { if (!isUp || !isIdle) return false; isIdle = false; // Delivery will be immediate, but we want to use event anyway, to avoid // too loong recursions. BasicEvent e = new BasicEvent(network.getCurrentTime(), this, CONTACT_MSG_SENT, msg); if (network.vShouldLog(Verbose.DEBUG3)) network.vprint("C_MSG_SENDING: " + msg + " by " + this); scheduleEvent(e); return true; } public boolean contactUp() { if (isUp) return false; isUp = true; isIdle = true; if (network.vShouldLog(Verbose.NOTIFY)) network.vprint("C_UP: " + this); dstNode.contactUp(this); srcNode.contactUp(this); srcNode.contactIdle(this); return true; } public boolean contactDown() { if (!isUp) return false; isUp = false; isIdle = false; if (network.vShouldLog(Verbose.NOTIFY)) network.vprint("C_DOWN: " + this); dstNode.contactDown(this); srcNode.contactDown(this); return true; } public CommandStatus parseCommandPart(ArrayList<String> part, String path) { String param = part.get(0); CommandStatus ok = new CommandStatus(CommandStatus.COMMAND_OK); if (param.equals("up")) { contactUp(); return ok; } else if (param.equals("down")) { contactDown(); return ok; } return null; } protected void receiveLocalEvent(Event event) { assert event != null; BasicEvent e = (BasicEvent) event; Message msg = e.getMessage(); assert msg != null; if (e.getType() == CONTACT_MSG_SENT) { if (isUp) isIdle = true; if (network.vShouldLog(Verbose.DEBUG3)) network.vprint("C_MSG_SENT&DELIVERED: " + msg + " by " + this); statCntEntry.setup(network.getCurrentTime(), Stats.CNT_MSG_SENT, this, msg); network.stats().notify(statCntEntry); // SENT should be BEFORE RECEIVED & IDLE srcNode.messageSent(msg, this, msg.getLength()); dstNode.messageReceived(msg, this, msg.getLength()); if (isIdle) srcNode.contactIdle(this); srcNode.messageDelivered(msg, this, msg.getLength()); } else { if (network.vShouldLog(Verbose.CRIT)) network.vprint("EVENT != MSG_SENT in IdealContact!"); assert false; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -