Advertisement
shiftry123

Laboratorium 3 main.c

Apr 16th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include "states.h"
  5.  
  6. int(*states[])(void) = {
  7.     open_connection_state,
  8.     get_request_state,
  9.     find_handler_state,
  10.     send_response_state,
  11.     send_error_state,
  12. };
  13.  
  14. int handle_transition(codes current_state, return_codes return_code) {
  15.     if (current_state == open) {
  16.         if (return_code == error) return send_error;
  17.         else if (return_code == done) return wait_for_request;
  18.     }
  19.     else if (current_state == wait_for_request) {
  20.         //zmienna liczaca jak dlugo maszyna stanow jest w stanie czekania na zadanie
  21.         static int time = 0;
  22.         time++;
  23.         if (time == 10) {
  24.             time = 0;
  25.             return send_error;
  26.         }
  27.         else if (return_code == request_available) return get_request;
  28.         else if (return_code == no_request) return wait_for_request;
  29.     }
  30.     else if (current_state == get_request) {
  31.         if (return_code == done) return find_handler;
  32.         else if (return_code == error) return send_error;
  33.     }
  34.     else if (current_state == find_handler) {
  35.         if (return_code == handler_available) return send_response;
  36.         else if (return_code == no_handler) return send_error;
  37.     }
  38.     else if (current_state == send_response) {
  39.         return close;
  40.     }
  41.     else if (current_state == send_error) {
  42.         return close;
  43.     }
  44.     return 0;
  45. }
  46.  
  47. int main(void) {
  48.  
  49.     codes current_state = open;
  50.     return_codes return_code;
  51.     int(*state_handler)(void);
  52.  
  53.     while (1) {
  54.         if (current_state == close) {
  55.             break;
  56.         }
  57.         state_handler = states[current_state];
  58.         return_code = (return_codes)state_handler();
  59.         current_state = handle_transition(current_state, return_code);
  60.     }
  61.  
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement