Advertisement
Guest User

Untitled

a guest
Feb 18th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.23 KB | None | 0 0
  1. double speed = 0; // Prędkość wytwarzania materiału
  2. long port = 0; // Lokalizacja producenta
  3. char address[20]="localhost"; // Gdy nie określone to localhost
  4. char* r_path = NULL; // Ścieżka adresu
  5. r_path = Parameters(argc, argv, &speed, address, &port);
  6. speed = speed * 60 / (96*100);
  7. //printf("Time: %f\nRaport: %s\nAddress & Port: %s:%ld\n", speed, r_path, address, port);
  8. struct buffer pBuf; // Bufor cykliczny
  9. createBuffer(&pBuf);
  10. struct queue* Q = createQueue(10000); // Kolejka FIFO na zamówienia
  11.  
  12. int createClock = timerfd_create(CLOCK_REALTIME, 0);
  13. //timer(value_to_add, createClock, speed);
  14. if(createClock == -1){
  15. printf("Problem with clock.\n");
  16. exit(1);
  17. }
  18. value_to_add.it_value.tv_sec = (int)speed;
  19. value_to_add.it_value.tv_nsec = (speed - value_to_add.it_value.tv_sec) * 1000000000;
  20. value_to_add.it_interval.tv_sec = (int)speed;
  21. value_to_add.it_interval.tv_nsec = (speed - value_to_add.it_interval.tv_sec) * 1000000000;
  22. if(timerfd_settime(createClock, 0, &value_to_add, NULL) == -1){
  23. printf("Problem with timerfd_settime - createClock\n");
  24. exit(1);
  25. }
  26.  
  27. int printClock = timerfd_create(CLOCK_REALTIME, 0);
  28. //timer(value_to_print, printClock, (int)5);
  29. if(printClock == -1){
  30. printf("Problem with clock.\n");
  31. exit(1);
  32. }
  33. value_to_print.it_value.tv_sec = 5;
  34. value_to_print.it_value.tv_nsec = 0;
  35. value_to_print.it_interval.tv_sec = 5;
  36. value_to_print.it_interval.tv_nsec = 0;
  37. if(timerfd_settime(printClock, 0, &value_to_print, NULL) == -1){
  38. printf("Problem with timerfd_settime - printClock\n");
  39. exit(1);
  40. }
  41. // *******************************************************
  42. int tmp, on = 1, socket_fd = -1, nsd = 1, end_server = 0, close_connection;
  43. char bufferX[buffer_gets], clientIP[25], rec_buff[5], server[25], c = 'a';
  44. struct sockaddr_in addressX;
  45. struct sockaddr_in *clientX = (struct sockaddr_in*)&clientIP;
  46. int actualSize = 0, timeout, nfds = 3, current_size = 0, sent_size = 0, make_size = 0, data_size = buffer_size;
  47. struct pollfd fds[200];
  48. if((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
  49. printf("Problem with socket()\n");
  50. exit(-1);
  51. }
  52. hostname_to_ip(address, server); // Zmiana z nazwy domeny na adres IP.
  53. if(setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0){
  54. printf("Setsockopt failed..\n");
  55. exit(-1);
  56. }
  57. if(ioctl(socket_fd, FIONBIO, (char*)&on) < 0){
  58. printf("Ioctl failed..\n");
  59. exit(-1);
  60. }
  61. memset(&addressX, 0, sizeof(addressX));
  62. addressX.sin_family = AF_INET;
  63. addressX.sin_addr.s_addr = inet_addr(server);
  64. addressX.sin_port = htons(port);
  65. if(bind(socket_fd, (struct sockaddr*)&addressX, sizeof(addressX)) < 0){
  66. printf("Problem with bind...\n");
  67. exit(-1);
  68. }
  69. if(listen(socket_fd, 32) < 0){
  70. printf("Problem with listen...\n");
  71. exit(-1);
  72. }
  73. struct timespec ts;
  74. memset(fds, 0, sizeof(fds));
  75. fds[0].fd = socket_fd;
  76. fds[0].events = POLLIN;
  77. fds[1].fd = createClock;
  78. fds[1].events = POLLIN;
  79. fds[2].fd = printClock;
  80. fds[2].events = POLLIN;
  81. timeout = (30000);
  82.  
  83. while(1){
  84. do{
  85. tmp = poll(fds, nfds, timeout);
  86. if(tmp < 0){
  87. printf("Problem with poll\n");
  88. break;
  89. }
  90. else if(tmp == 0){
  91. printf("End a program.\n");
  92. break;
  93. }
  94. current_size = nfds;
  95. while(actualSize > buffer_gets && currentsizeQueue(Q) > 0)
  96. {
  97. for(int i = 0; i < buffer_gets; i++)
  98. getfromBuffer(&pBuf, &bufferX[i]);
  99. data_size += buffer_gets;
  100. actualSize -= buffer_gets;
  101. sent_size += buffer_gets;
  102. if((tmp = send(getfromQueue(Q), &bufferX, sizeof(bufferX), 0)) < 0){
  103. printf("Problem with send()\n");
  104. close_connection = 1;
  105. break;
  106. }
  107. }
  108. for(int i = 0; i < current_size; i++){
  109. if(fds[i].revents == 0)
  110. continue;
  111. if(fds[i].fd == socket_fd){
  112. do{
  113. nsd = accept(socket_fd, NULL, NULL);
  114. if(nsd < 0){
  115. if(errno != EWOULDBLOCK){
  116. printf("Problem with accept()\n");
  117. end_server = 1;
  118. }
  119. break;
  120. }
  121. unsigned ex = sizeof(clientX);
  122. getpeername(socket_fd, (struct sockaddr*)&clientX, &ex);
  123. inet_ntop(AF_INET, &clientX->sin_addr, clientIP, INET6_ADDRSTRLEN);
  124. clock_gettime(CLOCK_REALTIME, &ts);
  125. long ts1 = ts.tv_sec;
  126. clock_gettime(CLOCK_MONOTONIC, &ts);
  127. long ts2 = ts.tv_sec;
  128. fd = fopen(r_path, "a");
  129. fprintf(fd, "After connection:\t1st clock:%ld\t2nd clock:%ld\tClient IP: %s\n", ts1, ts2, clientIP);
  130. fclose(fd);
  131. fds[nfds].fd = nsd;
  132. fds[nfds].events = POLLIN;
  133. nfds++;
  134. }while(nsd != -1);
  135. }
  136. else if(fds[i].fd == createClock){
  137. char buf[8];
  138. read(createClock, buf, 8);
  139. // *********************************************** Składowanie zamówienia
  140. if(data_size >= buffer_puts){
  141. if(c == 'Z' + 1)
  142. c = 'a';
  143. else if(c == 'z' + 1)
  144. c = 'A';
  145. for(int i = 0; i < buffer_puts; i++)
  146. {
  147. addtoBuffer(&pBuf, c); // Dodawanie wartości do bufora cyklicznego
  148. //printf("%c", c);
  149. }
  150. data_size -= buffer_puts;
  151. actualSize += buffer_puts;
  152. make_size += buffer_puts;
  153. c++;
  154. if(data_size == 0)
  155. break;
  156. }
  157. }
  158. else if(fds[i].fd == printClock){
  159. char buf[8];
  160. read(printClock, buf, 8);
  161. clock_gettime(CLOCK_REALTIME, &ts);
  162. long ts1 = ts.tv_sec;
  163. clock_gettime(CLOCK_MONOTONIC, &ts);
  164. long ts2 = ts.tv_sec;
  165.  
  166. printingFun(ts1, ts2, actualSize, buffer_size, make_size, sent_size, Q, r_path);
  167. make_size = 0;
  168. sent_size = 0;
  169. }
  170. else{
  171. close_connection = 0;
  172. tmp = recv(fds[i].fd, rec_buff, sizeof(rec_buff), 0);
  173. CheckRcv(tmp, &close_connection);
  174. addtoQueue(Q, fds[i].fd);
  175. if(close_connection){
  176. clock_gettime(CLOCK_REALTIME, &ts);
  177. long ts1 = ts.tv_sec;
  178. clock_gettime(CLOCK_MONOTONIC, &ts);
  179. long ts2 = ts.tv_sec;
  180.  
  181. fd = fopen(r_path, "a");
  182. fprintf(fd, "After disconnection:\t1st clock: %ld\t2nd clock:%ld\tClient IP: %s\n", ts1, ts2, clientIP);
  183. fclose(fd);
  184. close(fds[i].fd);
  185. fds[i].fd = -1;
  186. }
  187. }
  188. }
  189. }while(end_server == 0);
  190. for(int i = 0; i < nfds; i++){
  191. if(fds[i].fd >= 0)
  192. close(fds[i].fd);
  193. }
  194. }
  195. return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement