#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
enum STATE{
STATE0,
STATE1,
STATE2,
STATE3
};
enum MESSAGE {
M0,
M1,
M2
};
int f[4][3];
void init() {
memset(f, STATE0, sizeof(f));
for (int i = 0 ; i < 3 ; ++i) {
f[STATE0][i] = STATE0;
}
for (int i = 0 ; i < 3 ; ++i) {
f[STATE1][i] = STATE1;
}
for (int i = 0 ; i < 3 ; ++i) {
f[STATE2][i] = STATE2;
}
f[STATE0][M0] = STATE1;
f[STATE1][M1] = STATE2;
f[STATE2][M2] = STATE3;
}
int messageReceive() {
srand(time(NULL));
int msg = rand() % 4;
return msg;
}
void handler1(int msg) {
printf("msg: %d, 处理状态0\n", msg);
}
void handler2(int msg) {
printf("msg: %d, 处理状态1\n", msg);
}
void handler3(int msg) {
printf("msg: %d, 处理状态2\n", msg);
}
void handler4(int msg) {
printf("msg: %d, 处理状态3\n", msg);
}
void (*handlers[4])(int) = {handler1, handler2, handler3, handler4};
void stateSimulate() {
int state = STATE0;
init();
for ( ; state != STATE3 ; ) {
int msg = messageReceive();
state = f[state][msg];
handlers[state](msg);
sleep(1.5);
}
}
int main() {
stateSimulate();
return 0;
}