Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <sys/ipc.h>
  7. #include <sys/msg.h>
  8. #include <stdlib.h>
  9. #include <time.h>
  10. #include <sys/stat.h>
  11.  
  12. size_t sizemsg = 400;
  13. int status; //0-niezalogowany, 1-zalogowany
  14. int indeks; //0-niezalogowany, {1,2,..,9}-zalogowany
  15. //polska nazwa gdyż index globalny jest niedozwolona
  16. //ze względu na klase string.h, a nie chciałem
  17. //zmieniać konwencji ;)
  18. struct msgbuf {
  19. long type; //10-logowanie {1,2,..,9}-obsługa użytkownika
  20. char text[200];
  21. };
  22.  
  23. struct message { //struktura wysyłanych wiadomosci
  24. long type; //od kogo
  25. char text[400]; //wiadomość
  26. int address; //do kogo <1,9> - pojedynczy użytkownik
  27. time_t msgtime; //{11, 22, 33} - grupa 1, 2 i 3.
  28. };
  29.  
  30. //OBSLUGA KLIENTA
  31. void out_service(char* word) {
  32. int id_s; //zmienna z kolejką serwera
  33. id_s = msgget(99999, 0777 | IPC_CREAT);
  34.  
  35. // 1) //LOGOWANIE
  36. if(!strcmp(word, "login")) {
  37. if(!status) {
  38. struct msgbuf msg0;
  39. //PODAWANIE LOGINU
  40. do{
  41. printf("podaj login:\n");
  42. scanf("%s", msg0.text);
  43. msg0.type = 100;
  44. msgsnd(id_s, &msg0, sizeof(msg0)-sizeof(long), 0);
  45. msg0.type = 10;
  46. msgrcv(id_s, &msg0, sizeof(msg0)-sizeof(long), 10, 0);
  47. } while(strcmp(msg0.text, "poprawny"));
  48. //PODAWANIE HASŁA
  49. do{
  50. printf("podaj hasło:\n");
  51. scanf("%s", msg0.text);
  52. msg0.type = 100;
  53. msgsnd(id_s, &msg0, sizeof(msg0)-sizeof(long), 0);
  54. msg0.type = 10;
  55. msgrcv(id_s, &msg0, sizeof(msg0)-sizeof(long), 10, 0);
  56. } while(strcmp(msg0.text, "poprawny"));
  57. //ODEBRANIE NR UŻYTKOWNIKA
  58. msgrcv(id_s, &msg0, sizeof(msg0)-sizeof(long), 10, 0);
  59. sscanf(msg0.text, "%d", &indeks);
  60. status = 1;
  61. printf("zalogowany pod indeksem %d\n", indeks);
  62. }
  63. else {
  64. printf("jestes juz zalogowany!\n");
  65. }
  66. }
  67. // 2) //WYLOGOWYWANIE
  68. else if(!strcmp(word, "logout")) {
  69. //SPRAWDZENIE CZY JEST ZALOGOWANY
  70. if(status) {
  71. struct msgbuf msg2;
  72. msg2.type = 12;
  73. sprintf(msg2.text, "%d", indeks);
  74. msgsnd(id_s, &msg2, sizeof(msg2)-sizeof(long), 0);
  75. status = 0;
  76. indeks = 0;
  77. printf("wylogowano\n");
  78. }
  79. else {
  80. printf("nie jestes zalogowany!!!\n");
  81. }
  82. }
  83. // 3) //PODGLĄD LISTY ZALOGOWANYCH UŻYTKOWNIKÓW
  84. else if(!strcmp(word, "check_users")) {
  85. struct msgbuf msg3;
  86. msg3.type = 13;
  87. //WYSŁANIE NUMERU UŻYTKOWNIKA
  88. sprintf(msg3.text, "%d", indeks);
  89. msgsnd(id_s, &msg3, sizeof(msg3)-sizeof(long), 0);
  90. msgrcv(id_s, &msg3, sizeof(msg3)-sizeof(long), 133, 0);
  91. //ODBIÓR I PRINTOWANIE KOMUNIKATU
  92. printf("%s", msg3.text);
  93. }
  94. // 4) //ZAPISANIE SIĘ DO GRUPY
  95. else if(!strcmp(word, "join_group")) {
  96. if(status){
  97. struct msgbuf msg4;
  98. msg4.type = 14;
  99. strcpy(msg4.text, "");
  100. sprintf(msg4.text, "%d", indeks);
  101. //WYSYŁANIE INDEKSU UZYTKOWNIKA
  102. msgsnd(id_s, &msg4, sizeof(msg4)-sizeof(long), 0);
  103. msgrcv(id_s, &msg4, sizeof(msg4)-sizeof(long), 144, 0);
  104. printf("grupy: 1 2 3\n");
  105. printf("-------%s-------\n", msg4.text);
  106. printf("0-należysz 1-nienależysz\n");
  107. printf("podaj do ktorej grupy chesz sie dopisac: ");
  108. strcpy(msg4.text, "");
  109. int var;
  110. scanf("%d", &var);
  111. while(var < 1 || var > 3) {
  112. printf("błędny numer, podaj z zakresu {1,2,3}: ");
  113. scanf("%d", &var);
  114. }
  115. sprintf(msg4.text, "%d", var);
  116. msg4.type = 14;
  117. //WYSYŁANIE NUMERU GRUPY DO KTÓREJ CHCE DOŁĄCZYĆ
  118. msgsnd(id_s, &msg4, sizeof(msg4)-sizeof(long), 0);
  119. printf("dodawanie zakończone\n");
  120. }
  121. else {
  122. printf("Pierw się zaloguj!\n");
  123. }
  124. }
  125.  
  126. // 5) //WYPISANIE SIĘ Z GRUPY
  127. else if(!strcmp(word, "gout_group")) {
  128. if(status){
  129. struct msgbuf msg5;
  130. msg5.type = 15;
  131. strcpy(msg5.text, "");
  132. sprintf(msg5.text, "%d", indeks);
  133. //WYSYŁANIE INDEKSU UZYTKOWNIKA
  134. msgsnd(id_s, &msg5, sizeof(msg5)-sizeof(long), 0);
  135. msgrcv(id_s, &msg5, sizeof(msg5)-sizeof(long), 155, 0);
  136. printf("grupy: 1 2 3\n");
  137. printf("-------%s-------\n", msg5.text);
  138. printf("0-nienależysz 1-należysz\n");
  139. printf("podaj z której grupy chcesz sie wypisac: ");
  140. strcpy(msg5.text, "");
  141. int var;
  142. scanf("%d", &var);
  143. while(var < 1 || var > 3) {
  144. printf("błędny numer, podaj z zakresu {1,2,3}: ");
  145. scanf("%d", &var);
  146. }
  147. sprintf(msg5.text, "%d", var);
  148. msg5.type = 15;
  149. //WYSYŁANIE NUMERU GRUPY Z KTÓREJ CHCE WYJŚĆ
  150. msgsnd(id_s, &msg5, sizeof(msg5)-sizeof(long), 0);
  151. printf("wypisywanie zakończone\n");
  152. }
  153. else {
  154. printf("Pierw się zaloguj!\n");
  155. }
  156. }
  157. // 6) //PODGLĄD DANEJ GRUPY
  158. else if(!strcmp(word, "check_group")) {
  159. struct msgbuf msg6;
  160. msg6.type = 16;
  161. //POBRANIE NUMERU GRUPY
  162. printf("podaj numer grupy {1, 2, 3}: \n");
  163. int var;
  164. scanf("%d", &var);
  165. while(var < 1 || var > 3) {
  166. printf("błędny numer, podaj z zakresu powyższego!: ");
  167. scanf("%d", &var);
  168. }
  169. sprintf(msg6.text, "%d", var);
  170. //WYSŁANIE NUMERU GRUPY
  171. msgsnd(id_s, &msg6, sizeof(msg6)-sizeof(long), 0);
  172. msgrcv(id_s, &msg6, sizeof(msg6)-sizeof(long), 166, 0);
  173. //ODBIÓR I PRINTOWANIE KOMUNIKATU
  174. printf("osoba|przynależy\n");
  175. printf("%s", msg6.text);
  176. }
  177. // 7) //WYSŁANIE WIADOMOŚCI DO UŻYTKOWNIKA
  178. else if(!strcmp(word, "send_user")) {
  179. if(status){
  180. struct message mssg;
  181. mssg.type = indeks;
  182. printf("Do kogo chcesz wysłac wiadomosć?: ");
  183. scanf("%d", &mssg.address);
  184. while(mssg.address > 9 || mssg.address < 1) {
  185. printf("Wprowadż nr użytkownika z zakresu {1,2,..9}: ");
  186. scanf("%d", &mssg.address);
  187. }
  188. printf("Wprowadź wiadomosć(max 400 znaków):");
  189. //char b[400];
  190. fgets(mssg.text, 400, stdin);
  191. fgets(mssg.text, 400, stdin);
  192. mssg.msgtime = time(NULL);
  193. msgsnd(id_s, &mssg, sizeof(mssg)-sizeof(long)-sizeof(int)-sizeof(time_t), 0);
  194. printf("Wiadomość wysłana\n");
  195.  
  196. }
  197. else {
  198. printf("Pierw się zaloguj!\n");
  199. }
  200. }
  201. //8) //ODBIÓR WIADOMOŚCI
  202. else if(!strcmp(word, "recieve")) {
  203. if(status){
  204. struct message mssg;
  205. int clause;
  206. clause = msgrcv(id_s, &mssg, sizeof(mssg)-sizeof(long)-sizeof(int)
  207. -sizeof(time_t), indeks * 111, IPC_NOWAIT);
  208. if(clause != -1) {
  209. char *msgdata = ctime(&mssg.msgtime);
  210. printf("%s", msgdata);
  211. if(mssg.address < 10) {
  212. printf("Wiadomość od %d użytkownika\n", mssg.address);
  213. printf("%s", mssg.text);
  214. }
  215. else {
  216. printf("Wiadomość od %d grupy\n", (mssg.address/11));
  217. printf("%s", mssg.text);
  218. }
  219. }
  220. else {
  221. printf("Nie ma żadnych wiadomości\n");
  222. }
  223. }
  224. else {
  225. printf("Pierw się zaloguj!\n");
  226. }
  227. }
  228. //9) //WYSŁANIE WIADOMOŚCI DO GRUPY
  229. else if(!strcmp(word, "send_group")) {
  230. if(status){
  231. struct message mssg;
  232. mssg.type = 19;
  233. printf("Do której grupy chcesz wysłac wiadomosć?: ");
  234. scanf("%d", &mssg.address);
  235. while(mssg.address < 1 || mssg.address > 3) {
  236. printf("błędny numer, podaj z zakresu {1,2,3}!: ");
  237. scanf("%d", &mssg.address);
  238. }
  239. printf("Wprowadź wiadomosć(max 400 znaków):");
  240. fgets(mssg.text, 400, stdin);
  241. fgets(mssg.text, 400, stdin);
  242. mssg.msgtime = time(NULL);
  243. msgsnd(id_s, &mssg, sizeof(mssg)-sizeof(long)-sizeof(int)-sizeof(time_t), 0);
  244. printf("Wiadomość wysłana\n");
  245.  
  246. }
  247. else {
  248. printf("Pierw się zaloguj!\n");
  249. }
  250. }
  251. else {
  252. printf("zła komenda!\n");
  253. }
  254.  
  255.  
  256. }
  257.  
  258. int main(void) {
  259. printf("-----WITAJ W KOMUNIKATORZE-----\n");
  260. printf("wpisz nastepujące komendy:\n");
  261. printf("1) login - aby zalogować sie\n");
  262. printf("2) logout - aby wylogować sie\n");
  263. printf("3) check_users - podgląd listy zalogowanych uzytkownikow\n");
  264. printf("4) join_group - zapisanie się do grupy\n");
  265. printf("5) gout_group - wypisanie się z grupy\n");
  266. printf("6) check_group - sprawdzenie kto nalezy do grupy\n");
  267. printf("7) send_user - wyslanie wiadomosci do uzytkownika\n");
  268. printf("8) recieve - odebranie wiadomości\n");
  269. printf("9) send_group - wysłanie wiadomości do grupy\n");
  270. printf("exit - aby zakończyć\n");
  271.  
  272. char string_in[20];
  273. scanf("%s", string_in);
  274.  
  275. status = 0; //niezalogowany
  276. while(strcmp(string_in, "exit")) {
  277. out_service(string_in);
  278. scanf("%s", string_in);
  279. }
  280.  
  281. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement