From 09d363e6a1b2a2720a7232e6495228ed6b203c3c Mon Sep 17 00:00:00 2001
From: Micah Elizabeth Scott <micah@scanlime.org>
Date: Wed, 24 Jul 2013 00:39:00 -0700
Subject: [PATCH] Optional verbose logging

---
 server/README.md    |  1 +
 server/fcserver.cpp |  5 +++--
 server/fcserver.h   |  1 +
 server/opcsink.cpp  | 20 ++++++++++++++++++--
 server/opcsink.h    |  3 ++-
 5 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/server/README.md b/server/README.md
index 69084be..ef2e9fb 100644
--- a/server/README.md
+++ b/server/README.md
@@ -37,6 +37,7 @@ The following example config file supports two Fadecandy devices with distinct s
 
 	{
 		"listen": ["127.0.0.1", 7890],
+		"verbose": true,
 
 		"color": {
 			"gamma": 2.5,
diff --git a/server/fcserver.cpp b/server/fcserver.cpp
index 6958ee9..11cf724 100644
--- a/server/fcserver.cpp
+++ b/server/fcserver.cpp
@@ -25,14 +25,16 @@
 #include "fcserver.h"
 #include <netdb.h>
 #include <ctype.h>
+#include <iostream>
 
 
 FCServer::FCServer(rapidjson::Document &config)
 	: mListen(config["listen"]),
 	  mColor(config["color"]),
 	  mDevices(config["devices"]),
+	  mVerbose(config["verbose"].IsTrue()),
 	  mListenAddr(0),
-	  mOPCSink(opcCallback, this)
+	  mOPCSink(opcCallback, this, mVerbose)
 {
 	/*
 	 * Parse the listen [host, port] list.
@@ -81,7 +83,6 @@ void FCServer::start(struct ev_loop *loop)
 	mOPCSink.start(loop, mListenAddr);
 }
 
-
 void FCServer::opcCallback(OPCSink::Message &msg, void *context)
 {
 	FCServer *self = static_cast<FCServer*>(context);
diff --git a/server/fcserver.h b/server/fcserver.h
index d4cd653..f942cbf 100644
--- a/server/fcserver.h
+++ b/server/fcserver.h
@@ -48,6 +48,7 @@ private:
     const Value& mListen;
     const Value& mColor;
     const Value& mDevices;
+    bool mVerbose;
 
     struct addrinfo *mListenAddr;
     OPCSink mOPCSink;
diff --git a/server/opcsink.cpp b/server/opcsink.cpp
index 11f4173..1cebfb0 100644
--- a/server/opcsink.cpp
+++ b/server/opcsink.cpp
@@ -26,10 +26,12 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
+#include <arpa/inet.h>
+#include <iostream>
 
 
-OPCSink::OPCSink(callback_t cb, void *context)
-    : mCallback(cb), mContext(context) {}
+OPCSink::OPCSink(callback_t cb, void *context, bool verbose)
+    : mVerbose(verbose), mCallback(cb), mContext(context) {}
 
 void OPCSink::start(struct ev_loop *loop, struct addrinfo *listenAddr)
 {
@@ -52,6 +54,11 @@ void OPCSink::start(struct ev_loop *loop, struct addrinfo *listenAddr)
     // Get a callback when we're ready to accept a new connection
     ev_io_init(&mIOAccept, cbAccept, sock, EV_READ);
     ev_io_start(loop, &mIOAccept);
+
+    if (mVerbose) {
+        struct sockaddr_in *sin = (struct sockaddr_in*) listenAddr->ai_addr;
+        std::clog << "Listening on " << inet_ntoa(sin->sin_addr) << ":" << ntohs(sin->sin_port) << "\n";
+    }
 }
 
 void OPCSink::cbAccept(struct ev_loop *loop, struct ev_io *watcher, int revents)
@@ -72,6 +79,10 @@ void OPCSink::cbAccept(struct ev_loop *loop, struct ev_io *watcher, int revents)
 
     ev_io_init(&cli->ioRead, cbRead, sock, EV_READ);
     ev_io_start(loop, &cli->ioRead);
+
+    if (self->mVerbose) {
+        std::clog << "Client connected from " << inet_ntoa(clientAddr.sin_addr) << "\n";
+    }
 }
 
 void OPCSink::cbRead(struct ev_loop *loop, struct ev_io *watcher, int revents)
@@ -89,6 +100,11 @@ void OPCSink::cbRead(struct ev_loop *loop, struct ev_io *watcher, int revents)
 
     if (r == 0) {
         // Client disconnecting
+
+        if (self->mVerbose) {
+            std::clog << "Client disconnected\n";
+        }
+
         ev_io_stop(loop, watcher);
         delete cli;
         return;
diff --git a/server/opcsink.h b/server/opcsink.h
index 7c90a98..4556031 100644
--- a/server/opcsink.h
+++ b/server/opcsink.h
@@ -46,10 +46,11 @@ public:
 
     typedef void (*callback_t)(Message &msg, void *context);
 
-    OPCSink(callback_t cb, void *context);
+    OPCSink(callback_t cb, void *context, bool verbose = false);
     void start(struct ev_loop *loop, struct addrinfo *listenAddr);
 
 private:
+    bool mVerbose;
     callback_t mCallback;
     void *mContext;
     struct ev_io mIOAccept;
-- 
GitLab