Add server capabilities, refactor observer pattern
diff --git a/src/main/java/com/intel/jndn/utils/NDNEvent.java b/src/main/java/com/intel/jndn/utils/NDNEvent.java
new file mode 100644
index 0000000..5316ae1
--- /dev/null
+++ b/src/main/java/com/intel/jndn/utils/NDNEvent.java
@@ -0,0 +1,77 @@
+/*
+ * File name: NDNEvent.java
+ *
+ * Purpose: Signals a Client event for observers to act on
+ *
+ * © Copyright Intel Corporation. All rights reserved.
+ * Intel Corporation, 2200 Mission College Boulevard,
+ * Santa Clara, CA 95052-8119, USA
+ */
+package com.intel.jndn.utils;
+
+/**
+ * Signals an event (from Client or Server) for observers to act on
+ * @author Andrew Brown <andrew.brown@intel.com>
+ */
+public class NDNEvent<T> {
+
+ protected boolean success;
+ protected long timestamp;
+ protected T packet;
+
+ /**
+ * Constructor
+ */
+ public NDNEvent() {
+ timestamp = System.currentTimeMillis();
+ success = false; // an event without a packet is a failed event
+ }
+
+ /**
+ * Constructor
+ *
+ * @param packet
+ */
+ public NDNEvent(T packet) {
+ fromPacket(packet);
+ }
+
+ /**
+ * Build this event from a passed packet; the event is considered a failure
+ * if the packet is any type of Exception
+ *
+ * @param packet
+ */
+ public final void fromPacket(T packet) {
+ this.timestamp = System.currentTimeMillis();
+ this.success = !Exception.class.isInstance(packet);
+ this.packet = packet;
+ }
+
+ /**
+ * Retrieve success status
+ *
+ * @return
+ */
+ public boolean isSuccess() {
+ return success;
+ }
+
+ /**
+ * Retrieve event timestamp
+ *
+ * @return
+ */
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ /**
+ * Retrieve event packet
+ *
+ * @return
+ */
+ public T getPacket() {
+ return packet;
+ }
+}