29 #ifndef _MFSESSIONSTATE_H_
30 #define _MFSESSIONSTATE_H_
32 #include <boost/atomic.hpp>
45 LOGGING_OUT_USER_INITIATED,
46 LOGGING_OUT_SERVER_INITIATED,
47 LOGGED_OUT_POSSIBLE_AUTO_RELOGON,
48 LOGGED_OUT_NO_AUTO_RELOGON
52 bool internalIsAutoRelogonPossible() {
53 return LOGGED_OUT_POSSIBLE_AUTO_RELOGON ==
getState();
56 bool internalIsLoggedOn() {
return LOGGED_ON ==
getState(); }
58 bool internalIsManualLogonPossible() {
60 LOGGED_OUT_POSSIBLE_AUTO_RELOGON ==
getState() ||
61 LOGGED_OUT_NO_AUTO_RELOGON ==
getState());
64 bool internalIsWaitingForLogoutResponseFromServer() {
65 return LOGGING_OUT_USER_INITIATED ==
getState();
68 bool internalIsLoggingOn() {
return LOGGING_ON ==
getState(); }
70 bool internalIsManualLogoutPossible() {
return (LOGGED_ON ==
getState()); }
72 boost::atomic<State> _state;
85 #ifdef DEBUG_SESSIONSTATE
96 return (internalIsManualLogonPossible() &&
97 _state.compare_exchange_strong(currentState, LOGGING_ON));
111 bool manLogoutPoss = internalIsManualLogoutPossible();
112 setState(LOGGING_OUT_USER_INITIATED);
113 return manLogoutPoss;
118 static const char* States[] = {
120 "LOGGED_ON",
"LOGGING_OUT_USER_INITIATED",
121 "LOGGING_OUT_SERVER_INITIATED",
"LOGGED_OUT_POSSIBLE_AUTO_RELOGON",
122 "LOGGED_OUT_NO_AUTO_RELOGON"};
139 if (internalIsLoggingOn()) {
148 if (internalIsLoggingOn() || internalIsLoggedOn()) {
149 setState(LOGGING_OUT_SERVER_INITIATED);
156 #ifdef DEBUG_SESSIONSTATE
157 std::cerr <<
"SessionState - logoutResponseFromServerReceived" << std::endl;
159 setState(LOGGED_OUT_NO_AUTO_RELOGON);
167 return (currentState == LOGGED_OUT_POSSIBLE_AUTO_RELOGON &&
168 _state.compare_exchange_strong(currentState, LOGGING_ON));
173 #ifdef DEBUG_SESSIONSTATE
174 std::cerr <<
"SessionState - autoRelogonFailed" << std::endl;
176 setState(LOGGED_OUT_POSSIBLE_AUTO_RELOGON);
181 return internalIsWaitingForLogoutResponseFromServer();
192 #ifdef DEBUG_SESSIONSTATE
193 std::cerr <<
"SessionState - disconnected reconnectionPossible = "
194 << reconnectionPossible << std::endl;
196 if (LOGGING_OUT_USER_INITIATED ==
getState()) {
197 setState(LOGGED_OUT_NO_AUTO_RELOGON);
199 if (reconnectionPossible) {
200 setState(LOGGED_OUT_POSSIBLE_AUTO_RELOGON);
202 setState(LOGGED_OUT_NO_AUTO_RELOGON);
209 #ifdef DEBUG_SESSIONSTATE
210 std::cerr <<
"SessionState - connectionFailed" << std::endl;
212 setState(LOGGED_OUT_NO_AUTO_RELOGON);
217 #ifdef DEBUG_SESSIONSTATE
218 std::cerr <<
"SessionState - isUserInitiatedLogout" << std::endl;
220 return LOGGING_OUT_USER_INITIATED ==
getState();
bool isLoggingOn()
Is the session currently logging on?
Definition: SessionState.h:131
bool logout()
Definition: SessionState.h:110
bool isLoggedOn()
Is the session logged on?
Definition: SessionState.h:128
bool isWaitingForLogoutResponseFromServer()
Is the session waiting for a logout response from the server?
Definition: SessionState.h:180
void disconnected(bool reconnectionPossible)
Definition: SessionState.h:191
State
The enumeration of valid Session States.
Definition: SessionState.h:41
void setState(State state)
Bluntly set the new state.
Definition: SessionState.h:83
bool relogon()
If we are logged out and set for autorelogon, do it
Definition: SessionState.h:165
void connectionFailed()
Connection attempt failed. Don't try to auto login again.
Definition: SessionState.h:208
State getCurrentState()
Get the current state enum value.
Definition: SessionState.h:134
void logonResponseReceived()
Definition: SessionState.h:138
void logoutFromServerReceived()
Definition: SessionState.h:147
void autoRelogonFailed()
Auto relogon failed. Set the state to logged out and possible auto relogon.
Definition: SessionState.h:172
State getState()
Get the current state enum.
Definition: SessionState.h:80
const char * getCurrentStateName()
Get a self-documenting text version of the current state.
Definition: SessionState.h:117
void logoutResponseFromServerReceived()
Definition: SessionState.h:155
Definition: SessionState.h:37
SessionState()
Default constructor that sets the state to NEW.
Definition: SessionState.cpp:10
bool logon()
Definition: SessionState.h:94
bool isUserInitiatedLogout()
Has the user initiated a logout?
Definition: SessionState.h:216