remove protobuf dependency

Change-Id: I10bf90ba940bbde27d91df58056f4f558843f697
diff --git a/src/chat-message.hpp b/src/chat-message.hpp
new file mode 100644
index 0000000..432fac9
--- /dev/null
+++ b/src/chat-message.hpp
@@ -0,0 +1,135 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013, Regents of the University of California
+ *
+ * BSD license, See the LICENSE file for more information
+ *
+ * Author: Qiuhan Ding <qiuhanding@cs.ucla.edu>
+ */
+
+#ifndef CHRONOCHAT_CHAT_MESSAGE_HPP
+#define CHRONOCHAT_CHAT_MESSAGE_HPP
+
+#include "common.hpp"
+#include "tlv.hpp"
+#include <ndn-cxx/util/concepts.hpp>
+#include <ndn-cxx/encoding/block.hpp>
+#include <ndn-cxx/encoding/encoding-buffer.hpp>
+#include <boost/concept_check.hpp>
+
+namespace chronochat {
+
+class ChatMessage
+{
+
+public:
+
+  class Error : public std::runtime_error
+  {
+  public:
+    explicit
+    Error(const std::string& what)
+      : std::runtime_error(what)
+    {
+    }
+  };
+
+  enum ChatMessageType {
+    CHAT = 0,
+    HELLO = 1,
+    LEAVE = 2,
+    JOIN = 3,
+    OTHER = 4,
+  };
+
+public:
+
+  ChatMessage();
+
+  explicit
+  ChatMessage(const Block& chatMsgWire);
+
+  const Block&
+  wireEncode() const;
+
+  void
+  wireDecode(const Block& chatMsgWire);
+
+  const std::string&
+  getNick() const;
+
+  const std::string&
+  getChatroomName() const;
+
+  const ChatMessageType
+  getMsgType() const;
+
+  const std::string&
+  getData() const;
+
+  const time_t
+  getTimestamp() const;
+
+  void
+  setNick(const std::string& nick);
+
+  void
+  setChatroomName(const std::string& chatroomName);
+
+  void
+  setMsgType(const ChatMessageType msgType);
+
+  void
+  setData(const std::string& data);
+
+  void
+  setTimestamp(const time_t timestamp);
+
+private:
+  template<bool T>
+  size_t
+  wireEncode(ndn::EncodingImpl<T>& block) const;
+
+private:
+  mutable Block m_wire;
+  std::string m_nick;
+  std::string m_chatroomName;
+  ChatMessageType m_msgType;
+  std::string m_data;
+  time_t m_timestamp;
+
+};
+
+inline const std::string&
+ChatMessage::getNick() const
+{
+  return m_nick;
+}
+
+inline const std::string&
+ChatMessage::getChatroomName() const
+{
+  return m_chatroomName;
+}
+
+inline const ChatMessage::ChatMessageType
+ChatMessage::getMsgType() const
+{
+  return m_msgType;
+}
+
+inline const std::string&
+ChatMessage::getData() const
+{
+  return m_data;
+}
+
+inline const time_t
+ChatMessage::getTimestamp() const
+{
+  return m_timestamp;
+}
+
+} // namespace chronochat
+
+#endif //CHRONOCHAT_CHAT_MESSAGE_HPP