diff options
| author | Paul Buetow <paul@buetow.org> | 2025-06-20 17:26:52 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-06-20 17:26:52 +0300 |
| commit | f6d2a6bbbc37c552accf91a13ccd6ea45ecf8e73 (patch) | |
| tree | b1ec7ce83b348fc76e3f6a21dce6960c457bf765 /src/main/java/events | |
| parent | 5e16f7f37c984d7ee1d1f0484cf0a8154bbb849d (diff) | |
Complete implementation of timestamp event classes
- Add language strings for all timestamp events and demo protocol in VSDefaultPrefs
- Register new timestamp events and protocol in VSRegisteredEvents:
- VSLamportTimestampEvent
- VSVectorTimestampEvent
- VSTimestampMonitorEvent
- VSTimestampTriggeredEvent
- VSTimestampDemoProtocol
- Integrate VSVectorClockMonitor into VSInternalProcess:
- Add vectorClockMonitor field
- Override increaseVectorTime() and updateVectorTime() to trigger monitor
- Clear monitor events on reset
- Add getVectorClockMonitor() accessor
- Add serialization support to VSTimestampTriggeredEvent for persistence
- Fix VSTimestampDemoProtocol to use process's vector clock monitor
- All 132 unit tests pass
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'src/main/java/events')
| -rw-r--r-- | src/main/java/events/VSRegisteredEvents.java | 5 | ||||
| -rw-r--r-- | src/main/java/events/implementations/VSTimestampTriggeredEvent.java | 60 |
2 files changed, 65 insertions, 0 deletions
diff --git a/src/main/java/events/VSRegisteredEvents.java b/src/main/java/events/VSRegisteredEvents.java index 6d50ae5..d2cc758 100644 --- a/src/main/java/events/VSRegisteredEvents.java +++ b/src/main/java/events/VSRegisteredEvents.java @@ -60,6 +60,10 @@ public final class VSRegisteredEvents { prefs = prefs_; registerEvent("events.implementations.VSProcessCrashEvent"); registerEvent("events.implementations.VSProcessRecoverEvent"); + registerEvent("events.implementations.VSLamportTimestampEvent"); + registerEvent("events.implementations.VSVectorTimestampEvent"); + registerEvent("events.implementations.VSTimestampMonitorEvent"); + registerEvent("events.implementations.VSTimestampTriggeredEvent"); registerEvent("protocols.implementations.VSBasicMulticastProtocol"); registerEvent("protocols.implementations.VSBerkelyTimeProtocol"); registerEvent("protocols.implementations.VSBroadcastProtocol"); @@ -70,6 +74,7 @@ public final class VSRegisteredEvents { registerEvent("protocols.implementations.VSPingPongProtocol"); registerEvent("protocols.implementations.VSReliableMulticastProtocol"); registerEvent("protocols.implementations.VSTwoPhaseCommitProtocol"); + registerEvent("protocols.implementations.VSTimestampDemoProtocol"); /* Make dummy objects of each protocol, to see if they contain VSPrefs values to edit */ diff --git a/src/main/java/events/implementations/VSTimestampTriggeredEvent.java b/src/main/java/events/implementations/VSTimestampTriggeredEvent.java index 16d552d..ef99104 100644 --- a/src/main/java/events/implementations/VSTimestampTriggeredEvent.java +++ b/src/main/java/events/implementations/VSTimestampTriggeredEvent.java @@ -1,10 +1,15 @@ package events.implementations; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + import core.VSInternalProcess; import core.time.VSLamportTime; import core.time.VSVectorTime; import events.VSAbstractEvent; import events.VSCopyableEvent; +import serialize.VSSerialize; /** * Abstract base class for timestamp-triggered events that fire when specific @@ -261,4 +266,59 @@ public abstract class VSTimestampTriggeredEvent extends VSAbstractEvent implemen public void reset() { hasTriggered = false; } + + @Override + public synchronized void serialize(VSSerialize serialize, + ObjectOutputStream objectOutputStream) + throws IOException { + super.serialize(serialize, objectOutputStream); + + if (VSSerialize.DEBUG) + System.out.println("Serializing: VSTimestampTriggeredEvent; id="+getID()); + + /** For later backwards compatibility, to add more stuff */ + objectOutputStream.writeObject(Boolean.valueOf(false)); + + objectOutputStream.writeObject(timestampType); + objectOutputStream.writeObject(operator); + objectOutputStream.writeObject(Long.valueOf(targetLamportTime)); + objectOutputStream.writeObject(Boolean.valueOf(hasTriggered)); + + // Serialize vector time if present + boolean hasVectorTime = (targetVectorTime != null); + objectOutputStream.writeObject(Boolean.valueOf(hasVectorTime)); + if (hasVectorTime) { + objectOutputStream.writeObject(targetVectorTime); + } + + /** For later backwards compatibility, to add more stuff */ + objectOutputStream.writeObject(Boolean.valueOf(false)); + } + + @Override + public synchronized void deserialize(VSSerialize serialize, + ObjectInputStream objectInputStream) + throws IOException, ClassNotFoundException { + super.deserialize(serialize, objectInputStream); + + if (VSSerialize.DEBUG) + System.out.print("Deserializing: VSTimestampTriggeredEvent "); + + /** For later backwards compatibility, to add more stuff */ + objectInputStream.readObject(); + + timestampType = (TimestampType) objectInputStream.readObject(); + operator = (ComparisonOperator) objectInputStream.readObject(); + targetLamportTime = ((Long) objectInputStream.readObject()).longValue(); + hasTriggered = ((Boolean) objectInputStream.readObject()).booleanValue(); + + // Deserialize vector time if present + boolean hasVectorTime = ((Boolean) objectInputStream.readObject()).booleanValue(); + if (hasVectorTime) { + targetVectorTime = (VSVectorTime) objectInputStream.readObject(); + } + + /** For later backwards compatibility, to add more stuff */ + objectInputStream.readObject(); + } }
\ No newline at end of file |
