Skip to content

Commit

Permalink
Adds support for Identify Events Global message. (#181)
Browse files Browse the repository at this point in the history
* Forks identify events message into global and addressed message.

* Adds support for Identify Events Global message.
This is forked from the IdentifyEventsAddressed message, but is not an instanceof AddressedMessage.

Implements parsing in the MessageDecoder (which was missing, even though we could actually render the message).

Adds reverse rendering tests.
  • Loading branch information
balazsracz authored Mar 26, 2021
1 parent 34bf899 commit 50b2268
Show file tree
Hide file tree
Showing 8 changed files with 219 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
*/
@Immutable
@ThreadSafe
public class IdentifyEventsMessage extends AddressedMessage {
public class IdentifyEventsAddressedMessage extends AddressedMessage {

public IdentifyEventsMessage(NodeID source, NodeID dest) {
public IdentifyEventsAddressedMessage(NodeID source, NodeID dest) {
super(source, dest);
}

Expand All @@ -27,7 +27,7 @@ public IdentifyEventsMessage(NodeID source, NodeID dest) {
*/
@Override
public void applyTo(MessageDecoder decoder, Connection sender) {
decoder.handleIdentifyEvents(this, sender);
decoder.handleIdentifyEventsAddressed(this, sender);
}
public String toString() {
return super.toString()
Expand Down
39 changes: 39 additions & 0 deletions src/org/openlcb/IdentifyEventsGlobalMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.openlcb;

// For annotations

import net.jcip.annotations.Immutable;
import net.jcip.annotations.ThreadSafe;

/**
* Identify Events message implementation
*
* @author Bob Jacobsen Copyright 2009
* @version $Revision$
*/
@Immutable
@ThreadSafe
public class IdentifyEventsGlobalMessage extends Message {

public IdentifyEventsGlobalMessage(NodeID source) {
super(source);
}

/**
* Implement message-type-specific
* processing when this message
* is received by a node.
*<p>
* Default is to do nothing.
*/
@Override
public void applyTo(MessageDecoder decoder, Connection sender) {
decoder.handleIdentifyEventsGlobal(this, sender);
}
public String toString() {
return super.toString()
+" Identify Events ";
}

public int getMTI() { return MTI_IDENTIFY_EVENTS; }
}
14 changes: 13 additions & 1 deletion src/org/openlcb/MessageDecoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,20 @@ public void handleProducerRangeIdentified(ProducerRangeIdentifiedMessage msg, Co
* @param msg message to handle
* @param sender connection where it came from
*/
public void handleIdentifyEvents(IdentifyEventsMessage msg, Connection sender){
public void handleIdentifyEventsAddressed(IdentifyEventsAddressedMessage msg,
Connection sender){
defaultHandler(msg, sender);
}

/**
* Handle "Identify Event Global" message
* @param msg message to handle
* @param sender connection where it came from
*/
public void handleIdentifyEventsGlobal(IdentifyEventsGlobalMessage msg, Connection sender) {
defaultHandler(msg, sender);
}

/**
* Handle "Learn Event" message
* @param msg message to handle
Expand Down Expand Up @@ -281,4 +292,5 @@ public void handleTractionProxyRequest(TractionProxyRequestMessage msg, Connecti
public void handleTractionProxyReply(TractionProxyReplyMessage msg, Connection sender) {
defaultHandler(msg, sender);
}

}
2 changes: 1 addition & 1 deletion src/org/openlcb/VerifyNodeIDNumberMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class VerifyNodeIDNumberMessage extends Message {

public VerifyNodeIDNumberMessage(NodeID source) {
super(source);
this. content = null;
this.content = null;
}

public VerifyNodeIDNumberMessage(NodeID source, NodeID content) {
Expand Down
21 changes: 18 additions & 3 deletions src/org/openlcb/can/MessageBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,10 @@ List<Message> processFormat1(CanFrame f) {
retlist.add(new ProducerConsumerEventReportMessage(source, getEventID(f)));
return retlist;
case IdentifyEventsAddressed:
retlist.add(new IdentifyEventsMessage(source, dest));
retlist.add(new IdentifyEventsAddressedMessage(source, dest));
return retlist;
case IdentifyEventsGlobal:
retlist.add(new IdentifyEventsGlobalMessage(source));
return retlist;
case LearnEvent:
retlist.add(new LearnEventMessage(source, getEventID(f)));
Expand Down Expand Up @@ -583,10 +586,11 @@ public void handleProducerIdentified(ProducerIdentifiedMessage msg, Connection s
retlist.add(f);
}
/**
* Handle "Identify Event" message
* Handle "Identify Event (Addressed)" message
*/
@Override
public void handleIdentifyEvents(IdentifyEventsMessage msg, Connection sender){
public void handleIdentifyEventsAddressed(IdentifyEventsAddressedMessage msg,
Connection sender){
OpenLcbCanFrame f = new OpenLcbCanFrame(0x00);
if (msg.getDestNodeID() != null) {
f.setOpenLcbMTI(MessageTypeIdentifier.IdentifyEventsAddressed.mti());
Expand All @@ -597,6 +601,17 @@ public void handleIdentifyEvents(IdentifyEventsMessage msg, Connection sender){
f.setSourceAlias(map.getAlias(msg.getSourceNodeID()));
retlist.add(f);
}

/**
* Handle "Identify Event (Global)" message
*/
@Override
public void handleIdentifyEventsGlobal(IdentifyEventsGlobalMessage msg, Connection sender) {
OpenLcbCanFrame f = new OpenLcbCanFrame(map.getAlias(msg.getSourceNodeID()));
f.setOpenLcbMTI(MessageTypeIdentifier.IdentifyEventsGlobal.mti());
retlist.add(f);
}

/**
* Handle "Learn Event" message
*/
Expand Down
11 changes: 9 additions & 2 deletions src/org/openlcb/implementations/BitProducerConsumer.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
import org.openlcb.EventMessage;
import org.openlcb.EventState;
import org.openlcb.IdentifyConsumersMessage;
import org.openlcb.IdentifyEventsMessage;
import org.openlcb.IdentifyEventsGlobalMessage;
import org.openlcb.IdentifyEventsAddressedMessage;
import org.openlcb.IdentifyProducersMessage;
import org.openlcb.MessageDecoder;
import org.openlcb.OlcbInterface;
Expand Down Expand Up @@ -245,12 +246,18 @@ public void handleProducerConsumerEventReport(ProducerConsumerEventReportMessage
}

@Override
public void handleIdentifyEvents(IdentifyEventsMessage msg, Connection sender) {
public void handleIdentifyEventsAddressed(IdentifyEventsAddressedMessage msg,
Connection sender) {
if (msg.getDestNodeID().equals(iface.getNodeId())) {
sendIdentifiedMessages(false);
}
}

@Override
public void handleIdentifyEventsGlobal(IdentifyEventsGlobalMessage msg, Connection sender) {
sendIdentifiedMessages(false);
}

private void setValueFromNetwork(boolean isOn) {
valueListener.setFromOwner(isOn);
}
Expand Down
51 changes: 42 additions & 9 deletions test/org/openlcb/IdentifyEventsMessageTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ public class IdentifyEventsMessageTest {

@Test
public void testEqualsSame() {
Message m1 = new IdentifyEventsMessage(
Message m1 = new IdentifyEventsAddressedMessage(
new NodeID(new byte[]{1,2,3,4,5,6}),
new NodeID(new byte[]{7,8,9,10,11,12}) );
Message m2 = new IdentifyEventsMessage(
Message m2 = new IdentifyEventsAddressedMessage(
new NodeID(new byte[]{1,2,3,4,5,6}),
new NodeID(new byte[]{7,8,9,10,11,12}) );

Expand All @@ -23,7 +23,7 @@ public void testEqualsSame() {

@Test
public void testEqualsSelf() {
Message m1 = new IdentifyEventsMessage(
Message m1 = new IdentifyEventsAddressedMessage(
new NodeID(new byte[]{1,2,3,4,5,6}),
new NodeID(new byte[]{7,8,9,10,11,12}) );

Expand All @@ -32,10 +32,10 @@ public void testEqualsSelf() {

@Test
public void testNotEqualsDifferentSrc() {
Message m1 = new IdentifyEventsMessage(
Message m1 = new IdentifyEventsAddressedMessage(
new NodeID(new byte[]{1,2,3,4,5,6}),
new NodeID(new byte[]{7,8,9,10,11,12}) );
Message m2 = new IdentifyEventsMessage(
Message m2 = new IdentifyEventsAddressedMessage(
new NodeID(new byte[]{1,3,3,4,5,6}),
new NodeID(new byte[]{7,8,9,10,11,12}) );

Expand All @@ -44,31 +44,64 @@ public void testNotEqualsDifferentSrc() {

@Test
public void testNotEqualsDifferentDest() {
Message m1 = new IdentifyEventsMessage(
Message m1 = new IdentifyEventsAddressedMessage(
new NodeID(new byte[]{1,2,3,4,5,6}),
new NodeID(new byte[]{7,8,9,10,11,12}) );
Message m2 = new IdentifyEventsMessage(
Message m2 = new IdentifyEventsAddressedMessage(
new NodeID(new byte[]{1,2,3,4,5,6}),
new NodeID(new byte[]{7,10,9,10,11,12}) );

Assert.assertTrue( ! m1.equals(m2));
}

@Test
public void testGlobalEquals() {
Message m1 = new IdentifyEventsGlobalMessage(
new NodeID(new byte[]{1,2,3,4,5,6}));
Message m2 = new IdentifyEventsGlobalMessage(
new NodeID(new byte[]{7,8,9,10,11,12}));
Message m3 = new IdentifyEventsGlobalMessage(
new NodeID(new byte[]{1,2,3,4,5,6}));

Assert.assertTrue(m1.equals(m3));
Assert.assertFalse(m1.equals(m2));
Assert.assertTrue(m1.equals(m1));
}

@Test
public void testHandling() {
result = false;
Node n = new Node(){
@Override
public void handleIdentifyEvents(IdentifyEventsMessage msg, Connection sender){
public void handleIdentifyEventsAddressed(IdentifyEventsAddressedMessage msg,
Connection sender){
result = true;
}
};
Message m = new IdentifyEventsMessage(
Message m = new IdentifyEventsAddressedMessage(
new NodeID(new byte[]{1,2,3,4,5,6}),
new NodeID(new byte[]{7,8,9,10,11,12}) );

n.put(m, null);

Assert.assertTrue(result);
}

@Test
public void testHandlingGlobal() {
result = false;
Node n = new Node(){
@Override
public void handleIdentifyEventsGlobal(IdentifyEventsGlobalMessage msg,
Connection sender){
result = true;
}
};
Message m = new IdentifyEventsGlobalMessage(
new NodeID(new byte[]{1,2,3,4,5,6}));

n.put(m, null);

Assert.assertTrue(result);
}
}
Loading

0 comments on commit 50b2268

Please sign in to comment.