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