Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "states.h"
- int(*states[])(void) = {
- open_connection_state,
- get_request_state,
- find_handler_state,
- send_response_state,
- send_error_state,
- };
- int handle_transition(codes current_state, return_codes return_code) {
- if (current_state == open) {
- if (return_code == error) return send_error;
- else if (return_code == done) return wait_for_request;
- }
- else if (current_state == wait_for_request) {
- //zmienna liczaca jak dlugo maszyna stanow jest w stanie czekania na zadanie
- static int time = 0;
- time++;
- if (time == 10) {
- time = 0;
- return send_error;
- }
- else if (return_code == request_available) return get_request;
- else if (return_code == no_request) return wait_for_request;
- }
- else if (current_state == get_request) {
- if (return_code == done) return find_handler;
- else if (return_code == error) return send_error;
- }
- else if (current_state == find_handler) {
- if (return_code == handler_available) return send_response;
- else if (return_code == no_handler) return send_error;
- }
- else if (current_state == send_response) {
- return close;
- }
- else if (current_state == send_error) {
- return close;
- }
- return 0;
- }
- int main(void) {
- codes current_state = open;
- return_codes return_code;
- int(*state_handler)(void);
- while (1) {
- if (current_state == close) {
- break;
- }
- state_handler = states[current_state];
- return_code = (return_codes)state_handler();
- current_state = handle_transition(current_state, return_code);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement