#ifndef __Session_h__ #define __Session_h__ #include "TCPSocket.h" #include "SessionFilter.h" namespace core { class Command; class TCPServer; /// /// TCPSession /// /// TCPSession defines the nature of the interaction with the client /// and stores persistent data for a defined session. BMASession objects /// are not sockets but instead provide a communications control /// mechanism. Protocol conversations are provided through extensions /// from this object. /// class TCPSession : public TCPSocket { public: TCPSession(EPoll &ePoll, TCPServer &server); TCPSession(EPoll &ePoll, TCPServer &server, std::string text); ~TCPSession(); Command *grab = NULL; virtual void output(std::stringstream &data); /// /// The send method is used to output the contents of the out stream /// to the session containing the stream. /// void send(std::string data); /// /// Use this sendToAll method to output the contents of the out stream /// to all the connections on the server excluding the sender session. /// void sendToAll(std::string data); /// /// Use this sendToAll method to output the contents of the out stream /// to all the connections on the server excluding the sender session /// and the entries identified by the passed in filter object. /// void sendToAll(SessionFilter filter, std::string data); TCPServer &server; protected: virtual void onDataReceived(std::string data) override; virtual void onRegister() override; /// /// This method is called from within the protocol method when protocol is called /// on the initial connection where the data is an empty string. Use this method /// to deliver a message to the connection upon connection. /// virtual void onConnected(std::stringstream &out); /// /// Override the protocol method to manage and control the session communications /// in your inherited session. If you do not override this method then the Session /// default will process the 'commands' added to the server object using the /// processRequest method on the session input. /// virtual void protocol(std::stringstream &out, std::string data); private: std::mutex mtx; }; } #endif