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_