lots of vision stuff from Ben
diff --git a/vision/BinaryServer.h b/vision/BinaryServer.h
new file mode 100644
index 0000000..76fbd9e
--- /dev/null
+++ b/vision/BinaryServer.h
@@ -0,0 +1,54 @@
+#ifndef FRC971_VISION_BINARY_SERVER_H_
+#define FRC971_VISION_BINARY_SERVER_H_
+#include "event2/buffer.h"
+#include "event2/event.h"
+#include "event2/listener.h"
+#include "event2/bufferevent.h"
+#include "aos/common/mutex.h"
+
+#include <sys/types.h> 
+#include <sys/socket.h>
+#include "PacketNotifier.h"
+
+namespace frc971 {
+namespace vision {
+
+/* This runs the libevent loop and interfaces in with the sockets provided from the PacketNotifier
+ * to allow a secondary process to focus primarily on doing processing and then feeding this task.
+ */
+class BinaryServer {
+ public:
+  BinaryServer(uint16_t port,PacketNotifier *notify);
+
+
+  void StartServer(uint16_t port);
+ private:
+  event_base *const _base;
+  int _fd;
+  PacketNotifier *_notify;
+  bool have_id;
+  int _client_fd;
+  struct event *frame_notify;
+  struct evbuffer *_output;
+  struct bufferevent *_bufev;
+  struct evconnlistener *listener;
+  void Accept(evconnlistener *listener, evutil_socket_t fd,
+      struct sockaddr* /*address*/, int /*socklen*/);
+  void Notify(int /*fd*/, short /*what*/);
+  void ErrorEvent(struct bufferevent *bev,short events);
+  static void StaticAccept(evconnlistener *listener, evutil_socket_t fd,
+          struct sockaddr *address, int socklen,void *self){
+    ((BinaryServer *)(self))->Accept(listener, fd, address, socklen);
+  }
+  static void StaticNotify(int fd, short what, void *self){
+    ((BinaryServer *)(self))->Notify(fd, what);
+  }
+  static void StaticErrorEvent(struct bufferevent *bev,short events,void *self){
+    ((BinaryServer *)(self))->ErrorEvent(bev,events);
+  }
+};
+
+}  // namespace vision
+}  // namespace frc971
+
+#endif  // FRC971_VISION_BINARY_SERVER_H_