2012-08-14 23:52:48 +02:00
|
|
|
|
|
|
|
#ifndef TOOLS_SHELL_SHELLSTATE
|
|
|
|
#define TOOLS_SHELL_SHELLSTATE
|
|
|
|
|
|
|
|
class ShellContext;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Currently, there are four types of state in total
|
|
|
|
* 1. start state: the first state the program enters
|
2013-10-05 07:32:05 +02:00
|
|
|
* 2. connecting state: the program try to connnect to a rocksdb server, whose
|
2012-08-14 23:52:48 +02:00
|
|
|
* previous states could be "start" or "connected" states
|
|
|
|
* 3. connected states: the program has already connected to a server, and is
|
|
|
|
* processing user commands
|
|
|
|
* 4. stop state: the last state the program enters, do some cleanning up things
|
|
|
|
*/
|
|
|
|
|
|
|
|
class ShellState {
|
|
|
|
public:
|
|
|
|
virtual void run(ShellContext *) = 0;
|
|
|
|
virtual ~ShellState() {}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class ShellStateStart : public ShellState {
|
|
|
|
public:
|
|
|
|
static ShellStateStart * getInstance(void) {
|
|
|
|
static ShellStateStart instance;
|
|
|
|
return &instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void run(ShellContext *);
|
|
|
|
|
|
|
|
private:
|
|
|
|
ShellStateStart() {}
|
|
|
|
virtual ~ShellStateStart() {}
|
|
|
|
};
|
|
|
|
|
|
|
|
class ShellStateStop : public ShellState {
|
|
|
|
public:
|
|
|
|
static ShellStateStop * getInstance(void) {
|
|
|
|
static ShellStateStop instance;
|
|
|
|
return &instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void run(ShellContext *);
|
|
|
|
|
|
|
|
private:
|
|
|
|
ShellStateStop() {}
|
|
|
|
virtual ~ShellStateStop() {}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
class ShellStateConnecting : public ShellState {
|
|
|
|
public:
|
|
|
|
static ShellStateConnecting * getInstance(void) {
|
|
|
|
static ShellStateConnecting instance;
|
|
|
|
return &instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void run(ShellContext *);
|
|
|
|
|
|
|
|
private:
|
|
|
|
ShellStateConnecting() {}
|
|
|
|
virtual ~ShellStateConnecting() {}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
class ShellStateConnected : public ShellState {
|
|
|
|
public:
|
|
|
|
static ShellStateConnected * getInstance(void) {
|
|
|
|
static ShellStateConnected instance;
|
|
|
|
return &instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void run(ShellContext *);
|
|
|
|
|
|
|
|
private:
|
|
|
|
ShellStateConnected() {}
|
|
|
|
virtual ~ShellStateConnected() {}
|
|
|
|
|
|
|
|
void unknownCmd();
|
|
|
|
void handleConError(ShellContext *);
|
|
|
|
void helpMsg();
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|