📄 simplecontact.java
字号:
/** * simulator/SimpleContact.java */package implementations;import java.util.ArrayList;import java.util.ListIterator;import simulator.BasicContact;import simulator.BasicEvent;import simulator.Message;import util.CommandStatus;/** * */public class SimpleContact extends BasicContact{ private boolean hardDownPolicy = false; protected ArrayList<BasicEvent> deliveryEvents = new ArrayList<BasicEvent>(); protected ArrayList<Message> messagesToDeliver = new ArrayList<Message>(); public SimpleContact() { } public SimpleContact(SimpleContact org) { super(org); hardDownPolicy = org.hardDownPolicy; } public void setHardDownPolicy(boolean p) { hardDownPolicy = p; } public void processEvent(int evType, BasicEvent event) { if (!hardDownPolicy || (evType != CONTACT_MSG_SENT && evType != CONTACT_MSG_DELIVERED && evType != CONTACT_DOWN)) { super.processEvent(evType, event); return; } if (evType == CONTACT_MSG_SENT) { assert event != null; Message msg = event.getMessage(); assert msg != null; assert isUp; assert messageToSend == msg; isIdle = true; messageToSend = null; BasicEvent e = new BasicEvent(timeToDeliver(msg), this, CONTACT_MSG_DELIVERED, msg); messagesToDeliver.add(msg); deliveryEvents.add(e); scheduleEvent(e); srcNode.messageSent(msg, this, msg.getLength()); srcNode.contactIdle(this); } else if (evType == CONTACT_DOWN) { if (!isUp) return; super.processEvent(evType, event); ListIterator<BasicEvent> id = deliveryEvents.listIterator(); while (id.hasNext()) { cancelEvent(id.next()); id.remove(); } ListIterator<Message> im = messagesToDeliver.listIterator(); while (im.hasNext()) { Message msg = im.next(); srcNode.messageDelivered(msg, this, 0); im.remove(); } } else // MSG_DELIVERED { assert evType == CONTACT_MSG_DELIVERED; assert event != null; Message msg = event.getMessage(); assert msg != null; messagesToDeliver.remove(msg); super.processEvent(evType, event); } } public CommandStatus parseCommandPart(ArrayList<String> part, String path) { CommandStatus ret = super.parseCommandPart(part, path); if (ret != null) return ret; if (part.size() == 2) { if (part.get(0).equals("down_policy")) { String val = part.get(1); if (val.equals("hard")) { hardDownPolicy = true; return new CommandStatus(CommandStatus.COMMAND_OK); } else if (val.equals("soft")) { hardDownPolicy = false; return new CommandStatus(CommandStatus.COMMAND_OK); } return new CommandStatus("Invalid contact drop_policy: '" + val + "'."); } } return null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -