my first commit
[hochregal.git] / src / main.c
blob1443e2145bb5f3230324075afbe3eb657b116fc1
1 #include <sys/types.h>
2 #include <sys/socket.h>
3 #include <stdio.h>
4 #include <string.h>
5 #include <netinet/in.h>
6 #include <arpa/inet.h>
7 #include <unistd.h>
8 #include <pthread.h>
9 #include <unistd.h>
11 /***************SERVER****************/
13 void *Parser(void*);
14 void *Receive(void *);
15 void *Send(void *);
16 void *Timer_X(void *);
17 void *Timer_Y(void *);
18 int CreateSocket(int);
20 char instr[5], sensors[]="1000000000";
22 pthread_mutex_t simu_mutex;
23 pthread_cond_t sensor_trigger;
25 int main(int argc, char *arcv[])
27 int server_socket, new_socket, rc;
29 pthread_t parser, send, receive, timer_x, timer_y;
30 pthread_attr_t attr;
32 pthread_mutex_init(&simu_mutex, NULL);
33 pthread_cond_init (&sensor_trigger, NULL);
35 new_socket = CreateSocket(server_socket);
37 pthread_attr_init(&attr);
38 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
40 rc = pthread_create(&parser, NULL, Parser, NULL);
41 if (rc){
42 printf("ERROR; return code from pthread_create() parser is %d\n", rc);
45 rc = pthread_create(&send, &attr, Send, (void *) new_socket);
46 if (rc){
47 printf("ERROR; return code from pthread_create() send is %d\n", rc);
50 rc = pthread_create(&receive, NULL, Receive, (void *) new_socket);
51 if (rc){
52 printf("ERROR; return code from pthread_create() receive is %d\n", rc);
55 rc = pthread_create(&timer_x, &attr, Timer_X, NULL);
56 if (rc){
57 printf("ERROR; return code from pthread_create() timer_x is %d\n", rc);
60 rc = pthread_create(&timer_y, &attr, Timer_Y, NULL);
61 if (rc){
62 printf("ERROR; return code from pthread_create() timer_y is %d\n", rc);
65 pthread_join(send, NULL);
66 pthread_join(timer_x, NULL);
67 pthread_join(timer_y, NULL);
69 while(1)
74 printf("\n Server: close()...");
76 close(server_socket);
77 close(new_socket);
79 printf("\n Serverprogramm beendet\n\n");
82 pthread_attr_destroy(&attr);
83 pthread_mutex_destroy(&simu_mutex);
84 pthread_cond_destroy(&sensor_trigger);
85 pthread_exit(NULL);
86 return(0);
89 int CreateSocket(int server_socket)
91 int new_socket;
92 int length;
93 struct sockaddr_in serverinfo, clientinfo;
94 unsigned short int portnmbr=5000;
95 char ip_addr[]="127.0.0.1";
97 printf("\n Server: socket()...");
99 server_socket = socket(AF_INET, SOCK_STREAM, 0);
100 serverinfo.sin_family = AF_INET;
101 serverinfo.sin_addr.s_addr = inet_addr(ip_addr);
102 serverinfo.sin_port = htons(portnmbr);
103 length = sizeof(serverinfo);
105 printf("\n Server: bind()...");
106 bind(server_socket, (struct sockaddr *)&serverinfo, length);
107 printf("\n Server: listen()...");
108 printf("\n Server mit IP %s", ip_addr);
109 printf(" an Port %d wartet...", portnmbr);
111 listen(server_socket, 3);
112 printf("\n Server: accept()...");
113 new_socket = accept(server_socket,
114 (struct sockaddr *)&clientinfo, &length);
116 printf("Verbindung mit %s", inet_ntoa(clientinfo.sin_addr));
118 return new_socket;
121 void *Parser(void* arg)
123 char input[10];
124 printf("\n<Parser> started");
125 while(1)
127 printf("\n~>");
128 scanf("%10s", input);
129 fflush(stdin);
130 if(strstr(input, "test"))
131 printf("\nTesteingabe");
134 pthread_exit(NULL);
137 void *Receive(void *new_socket)
139 int socket;
140 socket=(int) new_socket;
142 printf("\n<Receive> started");
144 char rec[2];
146 read(socket, rec, sizeof(rec));
147 rec[1]='\0';
149 printf("\n Empfangen: %s", rec);
151 pthread_exit(NULL);
154 void *Send(void *new_socket)
156 int socket;
157 socket=(int) new_socket;
159 printf("\n<Send> started");
161 while(1)
163 pthread_mutex_lock(&simu_mutex);
164 pthread_cond_wait(&sensor_trigger, &simu_mutex);
166 write(socket, sensors, sizeof(sensors));
168 printf("\n<Send> received Signal");
169 fflush(stdout);
170 pthread_mutex_unlock(&simu_mutex);
172 pthread_exit(NULL);
176 void *Timer_X(void * arg)
178 int i, sensor;
180 printf("\n<TimerX> started");
182 for(i=0; i<11; i++)
183 if(sensors[i]=='1')
184 sensor=i;
186 for(i=0; i<10; i++)
188 usleep(1000000);
189 sensors[sensor++] = '0';
190 sensors[sensor] = '1';
191 pthread_mutex_lock(&simu_mutex);
192 pthread_cond_signal(&sensor_trigger);
193 pthread_mutex_unlock(&simu_mutex);
195 pthread_exit(NULL);
198 void *Timer_Y(void *arg)
200 int i;
202 printf("\n<TimerY> started");
204 /* for(i=0; i<10; i++)
206 usleep(1500000);
207 pthread_mutex_lock(&simu_mutex);
208 pthread_cond_signal(&sensor_trigger);
209 pthread_mutex_unlock(&simu_mutex);
212 pthread_exit(NULL);