#ifndef MUDUO_EXAMPLES_SIMPLE_CHARGEN_CHARGEN_H
#define MUDUO_EXAMPLES_SIMPLE_CHARGEN_CHARGEN_H

#include "muduo/net/TcpServer.h"

// RFC 864
class ChargenServer {
public:
    ChargenServer(muduo::net::EventLoop*         loop,
                  const muduo::net::InetAddress& listenAddr,
                  bool                           print = false);

    void start();

private:
    void onConnection(const muduo::net::TcpConnectionPtr& conn);

    void onMessage(const muduo::net::TcpConnectionPtr& conn,
                   muduo::net::Buffer* buf, muduo::Timestamp time);

    void onWriteComplete(const muduo::net::TcpConnectionPtr& conn);
    void printThroughput();

    muduo::net::TcpServer server_;

    muduo::string    message_;
    int64_t          transferred_;
    muduo::Timestamp startTime_;
};

#endif  // MUDUO_EXAMPLES_SIMPLE_CHARGEN_CHARGEN_H