public BadNetwork(Channel leftIn, Channel leftOut, 
			Channel rightIn, Channel rightOut) {
		leftIn_ = leftIn;
		leftOut_ = leftOut;
		rightIn_ = rightIn;
		rightOut_ = rightOut;
		currentState = Status.NOMSG;
		
		
		/* Swing */
		netLbl = new JLabel("Network");
		netBtnFail = new JButton("Failure");
		netBtnSuccess = new JButton("Success");
		netBtnTimeout = new JButton("Timeout");
		disableButtons();
		add(netLbl);
		add(netBtnSuccess);
		add(netBtnFail);
		add(netBtnTimeout);
		netLbl.setAlignmentX(Component.CENTER_ALIGNMENT);
		netBtnFail.setAlignmentX(Component.CENTER_ALIGNMENT);
		netBtnSuccess.setAlignmentX(Component.CENTER_ALIGNMENT);
		netBtnTimeout.setAlignmentX(Component.CENTER_ALIGNMENT);
		setPreferredSize(Config.NET_SIZE);
		setLayout(new GridLayout(4,3));
		//setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		setBorder(BorderFactory.createMatteBorder(1, 2, 1, 1,Color.black));
		
		
		/* The Java implementation has to keep track of "happens-before" events
		 * in order to execute the correct sequence of events according to specific input events
		 */
		
		/* In the event that FAILURE occurs */
		netBtnFail.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					disableButtons();
					switch (currentState) {
					
					case MSGLEFT:
						leftOut_.send(new Message(Message.Type.FAILURE));
						break;
					
					case MSGRIGHT:
						rightOut_.send(new Message(Message.Type.FAILURE));
						break;
					}
					
				} catch (InterruptedException ie) {}
			}
		});
		
		/* In the event that SUCCESS occurs */
		netBtnSuccess.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					disableButtons();
					switch (currentState) {
					case MSGLEFT:	
						rightOut_.send(transitionLeftMsg);
						break;
					case MSGRIGHT:
						leftOut_.send(transitionRightMsg);
						break;
					}
					
				} catch (InterruptedException ie) {}
			}
		});
		
		/* In the event that TIMEOUT occurs */
		netBtnTimeout.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					disableButtons();
					switch (currentState) {
					case MSGLEFT:
						leftOut_.send(new Message(Message.Type.TIMEOUT));
						break;
					case MSGRIGHT:
						rightOut_.send(new Message(Message.Type.TIMEOUT));
						break;
					}
					
				} catch (InterruptedException ie) {}
			}
		});
		
		
	}