ServerCore/TCPSession.h

89 lines
2.5 KiB
C++

#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